From 84d5e36bfa879e97ce673ba53d8900adc92dc009 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Mon, 14 Jan 2019 07:48:08 +0100
Subject: [PATCH] [scripts] Add caupdate command

---
 bob/devtools/constants.py        | 55 ++++++++++++++++++++++++++++++++
 bob/devtools/scripts/caupdate.py | 45 ++++++++++++++++++++++++++
 conda/meta.yaml                  |  1 +
 setup.py                         |  1 +
 4 files changed, 102 insertions(+)
 create mode 100644 bob/devtools/scripts/caupdate.py

diff --git a/bob/devtools/constants.py b/bob/devtools/constants.py
index c8fd691e..a5179b1d 100644
--- a/bob/devtools/constants.py
+++ b/bob/devtools/constants.py
@@ -14,17 +14,71 @@ CONDARC = pkg_resources.resource_filename(__name__,
     os.path.join('data', 'build-condarc'))
 '''The .condarc to use for building and creating new environments'''
 
+
 CONDA_BUILD_CONFIG = pkg_resources.resource_filename(__name__,
     os.path.join('data', 'conda_build_config.yaml'))
 '''Configuration variants we like building'''
 
+
 CONDA_RECIPE_APPEND = pkg_resources.resource_filename(__name__,
     os.path.join('data', 'recipe_append.yaml'))
 '''Extra information to be appended to every recipe upon building'''
 
+
 SERVER = 'http://www.idiap.ch'
 '''This is the default server use use to store data and build artifacts'''
 
+
+IDIAP_ROOT_CA = b'''
+Idiap Root CA 2016 - for internal use
+=====================================
+-----BEGIN CERTIFICATE-----
+MIIG7zCCBNegAwIBAgIJAP2rGWTQbd8bMA0GCSqGSIb3DQEBCwUAMIGYMQswCQYD
+VQQGEwJDSDELMAkGA1UECBMCVlMxETAPBgNVBAcTCE1hcnRpZ255MSEwHwYDVQQK
+ExhJZGlhcCBSZXNlYXJjaCBJbnN0aXR1dGUxDDAKBgNVBAsTA1BLSTEbMBkGA1UE
+AxMSSWRpYXAgUm9vdCBDQSAyMDE2MRswGQYJKoZIhvcNAQkBFgxwa2lAaWRpYXAu
+Y2gwHhcNMTYwMTI3MTU1MzAxWhcNNDYwMTMwMTU1MzAxWjCBmDELMAkGA1UEBhMC
+Q0gxCzAJBgNVBAgTAlZTMREwDwYDVQQHEwhNYXJ0aWdueTEhMB8GA1UEChMYSWRp
+YXAgUmVzZWFyY2ggSW5zdGl0dXRlMQwwCgYDVQQLEwNQS0kxGzAZBgNVBAMTEklk
+aWFwIFJvb3QgQ0EgMjAxNjEbMBkGCSqGSIb3DQEJARYMcGtpQGlkaWFwLmNoMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAydOC2EzaT+6bPcUFin8BawnS
+OxfFzDh18536O+PDAuyycOY1cIefpC3PvLk7XM83hIlUY1Q02/yt4h0iXkAUs/RI
+VE6PyIh7pTxabyjIqIZ7xlVkK9cfGhlUm+ofd/Limo6WBbaH64jf/Jm6KdRtu2n4
+q1brII31nCIwBvf8uVBuo5Y4NMS8bWcaBxj93S+C16sV4E2gz28FYCuSpAnU5DeP
+0PwNsuBkVFgHUwc2VxfUyCmQEs+qlWb+6W7ULWvtD3K28414tygVxOSXkl9ZVJGX
+KBwevSs2TTlH25Q3TAY4mXweJ2RweFwlnbzpA0YYrQUDy5MTVslD5Sl0c5vO6HZH
+DgT4jyWbL87akczTaz028zmUQvC7RoGPKXqhHlaO3uDu1fBC7aoA/L1akqfYGnoO
+x4xU7gouGi9Hck23DKLsW1HP2PzaZ/ME++IZPr2I049aKBadz3vCbAh2bHgosdyp
+a69e6SMiq9guloQXCqFTSk+P6CwU9wWil3SdGojRafyocKyoBL67hKIFkJQOdjhq
+edi3WfoSU+1kDwEyXU2fCsTjgg0q1BsJFctSUFs7QoVMAoyXXauDCf1YuojlXuXM
+FrQmYLBzSFA7OFFynWbnn1mHMzsHEiAzAr0+7ecIreBwN1gJqx1+7hxkSQzDm2oH
+jTPGGwJfbJnej4RduBkCAwEAAaOCATgwggE0MB0GA1UdDgQWBBR6H/NwUn5K3lVV
+IVgpNR41/bxdtTCBzQYDVR0jBIHFMIHCgBR6H/NwUn5K3lVVIVgpNR41/bxdtaGB
+nqSBmzCBmDELMAkGA1UEBhMCQ0gxCzAJBgNVBAgTAlZTMREwDwYDVQQHEwhNYXJ0
+aWdueTEhMB8GA1UEChMYSWRpYXAgUmVzZWFyY2ggSW5zdGl0dXRlMQwwCgYDVQQL
+EwNQS0kxGzAZBgNVBAMTEklkaWFwIFJvb3QgQ0EgMjAxNjEbMBkGCSqGSIb3DQEJ
+ARYMcGtpQGlkaWFwLmNoggkA/asZZNBt3xswDwYDVR0TAQH/BAUwAwEB/zAJBgNV
+HRIEAjAAMBcGA1UdEQQQMA6BDHBraUBpZGlhcC5jaDAOBgNVHQ8BAf8EBAMCAQYw
+DQYJKoZIhvcNAQELBQADggIBAJmXqtgmHj1XXUptloVVsCwCYBU8ykf1dZz2Kxrx
+oe0dnDO24CA6w3D3TCt8rncT2lFNRTbc/4HO32xl1IDNiWh5P/ZPNpptwd6XjGR1
+EgDjpIBKNotf+6WWvcKrs23mj9UwNPHDwNA251LAMVXaoMN2iOflzj2BbIcasY3P
+IcYeshd3CChy8QqltE1M8mjwb7brkIzwcPI5QEhW9NmfYUfbijILZrE2kgo6oOFH
+mRZIDoexrd19hHLWFLxoe0IPj6R1GFajBHi8Ttt3tPQOPjwjGQvNfVPRhWh3/kAF
+UrWZposffDDIc+8TNlrhkx+YKucYH56Tyuh6Y1Po7FCkvp2/G/JxKWeAEqKpI2+g
+8Hsl0XjSOJ9bOhs+R0wMzeBzntDk8k+6ar3KYGJD24gQ+QDy4klE/rsdC/Gp6dEi
+tSIPvH4VIvN0lLICWKj3IFhBv6IOJ12Xq5IMquDq5BZ6O2+yqoROIYQyhwHq+xhn
+rqqR6TsFMl/F5R0j14oGzg+VdB8VsIrg7rTJx+oDD9r+Pa2hua4DRmQsw+CJgnHz
+NqU3Xei/78W+eLh9HZvVqXpi4s/fF6z+lXKDHpqVRh5kNAKJbYQUfcV2H7FEtCux
+NIDS6J1GnHJKCmYPuwFSrQ5VXM/1p7w+A9MkJktsxw2kxsRUvJn7Ka+bp7M6wERU
+JHsX
+-----END CERTIFICATE-----
+'''
+
+
+CACERT_URL = 'https://curl.haxx.se/ca/cacert.pem'
+'''Location of the most up-to-date CA certificate bundle'''
+
+
 CACERT = pkg_resources.resource_filename(__name__,
     os.path.join('data', 'cacert.pem'))
 '''We keep a copy of the CA certificates we trust here
@@ -34,6 +88,7 @@ CACERT = pkg_resources.resource_filename(__name__,
    More information here: https://curl.haxx.se/docs/caextract.html
 '''
 
+
 MATPLOTLIB_RCDIR = pkg_resources.resource_filename(__name__, 'data')
 '''Base directory where the file matplotlibrc lives
 
diff --git a/bob/devtools/scripts/caupdate.py b/bob/devtools/scripts/caupdate.py
new file mode 100644
index 00000000..575c43ad
--- /dev/null
+++ b/bob/devtools/scripts/caupdate.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+import os
+import logging
+logger = logging.getLogger(__name__)
+
+import click
+
+from . import bdt
+from ..log import verbosity_option
+
+
+@click.command(epilog='''
+Examples:
+
+  1. Update the root certificate authority bundle on the distribution:
+
+     $ bdt caupdate -v
+     $ git status  #to check if bundle changed
+     $ git commit -m '[data] Update CA bundle'  #if need be
+
+''')
+@verbosity_option()
+@bdt.raise_on_error
+def caupdate():
+    """Updates the root certificate authority bundle on the distribution
+
+    This script will download the latest CA bundle from curl at
+    https://curl.haxx.se/ca/cacert.pem and will append Idiap's Root CA to the
+    bundle, so we can use https://gitlab.idiap.ch transparently.
+    """
+
+    import requests
+    from ..constants import CACERT, CACERT_URL, IDIAP_ROOT_CA
+
+    logger.info('Retrieving %s...', CACERT_URL)
+    r = requests.get(CACERT_URL, allow_redirects=True)
+
+    logger.info('Writing %s...', CACERT)
+    with open(CACERT, 'wb') as f:
+      f.write(r.content)
+      f.write(IDIAP_ROOT_CA)
+
+    logger.warn('CA bundle is updated')
+    logger.warn('Run git status, commit and push (if need be)')
diff --git a/conda/meta.yaml b/conda/meta.yaml
index 6d122fd6..14abefcd 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -62,6 +62,7 @@ test:
     - bdt bootstrap --help
     - bdt build --help
     - bdt getpath --help
+    - bdt caupdate --help
     - sphinx-build -aEW ${PREFIX}/share/doc/{{ name }}/doc {{ project_dir }}/sphinx
 
 about:
diff --git a/setup.py b/setup.py
index 24c0a812..012596bf 100644
--- a/setup.py
+++ b/setup.py
@@ -49,6 +49,7 @@ setup(
             'bootstrap = bob.devtools.scripts.bootstrap:bootstrap',
             'build = bob.devtools.scripts.build:build',
             'getpath = bob.devtools.scripts.getpath:getpath',
+            'caupdate = bob.devtools.scripts.caupdate:caupdate',
         ],
     },
     classifiers=[
-- 
GitLab