aboutsummaryrefslogtreecommitdiff
path: root/http-what-repos.py
diff options
context:
space:
mode:
Diffstat (limited to 'http-what-repos.py')
-rwxr-xr-xhttp-what-repos.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/http-what-repos.py b/http-what-repos.py
new file mode 100755
index 0000000..27125bd
--- /dev/null
+++ b/http-what-repos.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+# List Cryptech git repository URLs by scraping them from the
+# automatically generated Trac page. Yes, we know too much about how
+# the generation script and Trac format this page, c'est la vie.
+
+from urllib import urlopen
+from xml.etree.ElementTree import ElementTree
+from tempfile import NamedTemporaryFile
+from os import environ, fchmod
+
+url = "https://wiki.cryptech.is/wiki/GitRepositories"
+
+cacert = '''\
+-----BEGIN CERTIFICATE-----
+MIIERzCCAy+gAwIBAgIBADANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJVUzEL
+MAkGA1UECBMCTUExEDAOBgNVBAcTB1JlYWRpbmcxITAfBgNVBAoTGEdydW5jaHdl
+YXRoZXIgQXNzb2NpYXRlczEkMCIGCSqGSIb3DQEJARYVcG9zdG1hc3RlckBoYWN0
+cm4ubmV0MCAXDTEwMDkyNTA1MzQ0MloYDzIxMDkwOTI1MDUzNDQyWjB1MQswCQYD
+VQQGEwJVUzELMAkGA1UECBMCTUExEDAOBgNVBAcTB1JlYWRpbmcxITAfBgNVBAoT
+GEdydW5jaHdlYXRoZXIgQXNzb2NpYXRlczEkMCIGCSqGSIb3DQEJARYVcG9zdG1h
+c3RlckBoYWN0cm4ubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+wf723VEaWozuyJCytEgFkEMXDd17RTChb4RCpqFrlswbKEk4/Vw7IvBeLYNfl5F8
+1hx6ca7CU4qD+4tVkanJ7dJhT9a1jWPKjx/Xz8rpZBSDzgiDZNlgX4giDHjG3Ju8
+QcT9Elpx4SEBxeaVEl2AXXsShv1PrSpCt9WUdS+0NQkA7z3cXASNPOBFoITM37pC
+21nuQuocpjFTaGXw5s3/FhVgcKSUHmQN5UdYK5N2w7pcn7UV2v92UFYSG9cEjQL5
+DfPqzJeLemzmUl+XBqSfY/gPCyJdAPOudflnFyptVv3BrmMQYEyJBeRnt2o5aYWd
+q1w2wB2HPsEglm1K19gEoQIDAQABo4HfMIHcMAwGA1UdEwQFMAMBAf8wCwYDVR0P
+BAQDAgEGMB0GA1UdDgQWBBQkrUZV1MeYpBcTnpsuT60UPRjCZjCBnwYDVR0jBIGX
+MIGUgBQkrUZV1MeYpBcTnpsuT60UPRjCZqF5pHcwdTELMAkGA1UEBhMCVVMxCzAJ
+BgNVBAgTAk1BMRAwDgYDVQQHEwdSZWFkaW5nMSEwHwYDVQQKExhHcnVuY2h3ZWF0
+aGVyIEFzc29jaWF0ZXMxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAaGFjdHJu
+Lm5ldIIBADANBgkqhkiG9w0BAQUFAAOCAQEAMeBzm4x6hlwbcrR8AcjSP4S/8+pW
+4WsmkuKlZMyP/E4rc2DpVBi9WRnLtQoQ+FDU47VkG1D97i+HYx1Ky7W8oU4YB3Xr
+ptoAenVmiQOVnbMluuQlxBa8JbOizt+BzL0NJEC6gHvCYT5SmFFsJgXBQZNPpRJb
+cDzuilf3b6vCFtRL+hD75VFLkljQWUWt59cNPGhtBItsq3q72LZ2ftPgk9ufC2h3
+whlvaaZldSFGnPRcFgXYYUootSh0yUW2lIHn52s/tPRN6XXnrdz+cLUCCchSkPOi
+Q9q/UFgaXUetsqlb56PINOrLZUpAfqC4xFBVVo2oI0ubFq173QlATQpn/w==
+-----END CERTIFICATE-----
+'''
+
+try:
+ ssl_cert_file = NamedTemporaryFile("w")
+ ssl_cert_file.write(cacert)
+ ssl_cert_file.flush()
+ try:
+ fchmod(ssl_cert_file.fileno(), 0600)
+ except:
+ pass
+ environ["SSL_CERT_FILE"] = ssl_cert_file.name # OpenSSL looks for this
+ environ["GIT_SSL_CAINFO"] = ssl_cert_file.name # Git looks for this
+
+ for x in ElementTree(file = urlopen(url)).iter("{http://www.w3.org/1999/xhtml}tt"):
+ if x.text.startswith("https://git.cryptech.is/") and x.text.endswith(".git"):
+ print x.text
+
+finally:
+ ssl_cert_file.close()