| 1 | #!/usr/bin/python |
|---|
| 2 | import urllib |
|---|
| 3 | import hashlib |
|---|
| 4 | import base64 |
|---|
| 5 | import sys |
|---|
| 6 | from optparse import OptionParser |
|---|
| 7 | |
|---|
| 8 | def escape(s): |
|---|
| 9 | return urllib.quote(s, safe='~') |
|---|
| 10 | |
|---|
| 11 | parser = OptionParser() |
|---|
| 12 | parser.add_option("-H", "--hostname", dest="hostname", |
|---|
| 13 | help="pokersocial hostname") |
|---|
| 14 | parser.add_option("-c", "--container", dest="container", |
|---|
| 15 | help="pokersocial container path") |
|---|
| 16 | (options, args) = parser.parse_args() |
|---|
| 17 | |
|---|
| 18 | if options.hostname == None or options.container == None: |
|---|
| 19 | parser.print_help() |
|---|
| 20 | sys.exit(1) |
|---|
| 21 | |
|---|
| 22 | host = options.hostname |
|---|
| 23 | container_path = options.container |
|---|
| 24 | |
|---|
| 25 | path = '/POKER_REST' |
|---|
| 26 | method = 'POST' |
|---|
| 27 | key_values = [('auth', ['BC03972677ECA61C71B2457DD915F23C25FE25D8']), ('container', ['default']), ('oauth_consumer_key', [host]), ('oauth_nonce', ['4db6ff89ddb083541fb2164ff00eaad2']), ('oauth_signature_method', ['RSA-SHA1']), ('oauth_timestamp', ['1268657888']), ('oauth_token', ['']), ('opensocial_app_id', ['15']), ('opensocial_owner_id', ['1']), ('opensocial_viewer_id', ['1']), ('packet', ['{"type":"PacketPing"}']), ('uid', ['8E771F2FBBEF1D2CC49ACEB418DCCEBE007D05DE']), ('xoauth_signature_publickey', ['http://%s%s/sites/all/modules/shindig_integrator/shindig/php/public.cer' % (host, container_path) ])] |
|---|
| 28 | normalized_parameters = '&'.join('%s=%s' % (escape(k), escape(v[0])) for k, v in key_values) |
|---|
| 29 | scheme = 'http' |
|---|
| 30 | url = scheme + '://' + host + path |
|---|
| 31 | hash_base_string = '&'.join((escape(method), escape(url), escape(normalized_parameters))) |
|---|
| 32 | local_hash = hashlib.sha1(hash_base_string).digest() |
|---|
| 33 | |
|---|
| 34 | private = """ |
|---|
| 35 | -----BEGIN RSA PRIVATE KEY----- |
|---|
| 36 | Proc-Type: 4,ENCRYPTED |
|---|
| 37 | DEK-Info: DES-EDE3-CBC,C69E69BF4D533880 |
|---|
| 38 | |
|---|
| 39 | iKwTHIFruW1Dt7ASm2xnNgtA2G2WJMwwxICxAu06K75gvi7Kj6BNra5rMlhi2fbR |
|---|
| 40 | 7tp+425xbaykOZETSAfT70fwcpRQzifRM5HEBmEnRu5I7POEkgDyPvWlS9Kq8lgB |
|---|
| 41 | zPlbxkSWGnPk/r6f71fNupo2gAU+gdbQQnoliQKCG2DtUvkBIgsJWDsMFYyD364b |
|---|
| 42 | UzZubrsT8iaNbSb4oDYPsgrHXbmTQcw8bWoly/nNqtunR1VEqgzxWeJIG02ThaLm |
|---|
| 43 | SMijbxCTgZKvQtf7vKHWxP3kMQQiqfgxxUA0OJ4Ym6zmkijEC57PjdKYQUo85M++ |
|---|
| 44 | eZEWXgDk6qEC2nNyROjyZPyTYwDuxrFs4KujsqdQyzUIm+FHbnU0WmGEfzP2D3Ai |
|---|
| 45 | gla64RTIJHsSVWlcYL4bCGUplZvklzNNGzDSLwIBPJPXS5hzsjoh4ScFisSP7Myc |
|---|
| 46 | Vc6xJpw5vjZetZQLQ77h8XObBxODiSEGt7cOF88eGJkK8/hsPTJVB+JZdioRxRZB |
|---|
| 47 | 4ErZzfJNZp8nPmoxhLh2zMMYyyfo4l7TRr6/0GnOW/63L6iR3zrqKmkp2c4VBIih |
|---|
| 48 | nOu8iT/CNzTsEBEM0nUuc1y6r/JEB8m9S9OS7gVQTl8Zq12NpUeZ3FYHVBI7yavI |
|---|
| 49 | GJiObLyvzAOMbL7PaJnjnIPHeKUHlIPi0H+z3q9lHThmjigo1NtJLCIF2v09ZGCe |
|---|
| 50 | AF9e1AjXqB/PiQ/mA1yRYbSTkekyBNx43pmjXeCaqa+vfXACFn4DXwNa81LsRCqV |
|---|
| 51 | aOTCsbAqOWhTOZDegqxERzEuNdBFDXZQQAAOBzaRsI5KTOwefHPOow== |
|---|
| 52 | -----END RSA PRIVATE KEY----- |
|---|
| 53 | """ |
|---|
| 54 | |
|---|
| 55 | public = """ |
|---|
| 56 | -----BEGIN CERTIFICATE----- |
|---|
| 57 | MIICsDCCAhmgAwIBAgIJAPISjQewTBhAMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV |
|---|
| 58 | BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX |
|---|
| 59 | aWRnaXRzIFB0eSBMdGQwHhcNMDkwODIxMTUzMDI4WhcNMTAwODIxMTUzMDI4WjBF |
|---|
| 60 | MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 |
|---|
| 61 | ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB |
|---|
| 62 | gQC06xOEe7T1n4E/6tO2yQv6ICnXQG5b6JnfSbwe8YhNMaGo5vladgPG6BdxwOh3 |
|---|
| 63 | NRPBqCy/AnZ02vU5Bk+f0J0C8sVDvUUw1/jaeBm6r6RuiDJK2y2jvVgp8+lZEwLh |
|---|
| 64 | uwbOBt5f5xuHVap3pMRq5XGKUjczNNGSx5YPW70Mtth/pQIDAQABo4GnMIGkMB0G |
|---|
| 65 | A1UdDgQWBBTAA1jLJMtZz4RLDOHDLoqSeznfZDB1BgNVHSMEbjBsgBTAA1jLJMtZ |
|---|
| 66 | z4RLDOHDLoqSeznfZKFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt |
|---|
| 67 | U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAPISjQew |
|---|
| 68 | TBhAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAKcS/VxIq5L6TVOol |
|---|
| 69 | z0Xs2+p3DN7ik6zJ5IENVJD1G/3M38mSkDhe4NqV4MQfZ8jrwp/2BpFK5HhYEyXT |
|---|
| 70 | baFLnX+FizCiN4S912pEsbBAjeJpv8i0CRKsg75DxrfqRlLfBbHE6JIO1Sc7CP0h |
|---|
| 71 | 56q/kG2SE7m2xo1AMZaNzcY8EpM= |
|---|
| 72 | -----END CERTIFICATE----- |
|---|
| 73 | """ |
|---|
| 74 | |
|---|
| 75 | import M2Crypto.RSA |
|---|
| 76 | rsa = M2Crypto.RSA.load_key_string(private, callback=lambda v: 'drupal') |
|---|
| 77 | |
|---|
| 78 | signature = rsa.sign(local_hash) |
|---|
| 79 | |
|---|
| 80 | args = normalized_parameters[:] + '&oauth_signature=%s' % escape(base64.encodestring(signature)) |
|---|
| 81 | |
|---|
| 82 | exponent = 65537L |
|---|
| 83 | hex_cert = "0xB4EB13847BB4F59F813FEAD3B6C90BFA2029D7406E5BE899DF49BC1EF1884D31A1A8E6F95A7603C6E81771C0E8773513C1A82CBF027674DAF539064F9FD09D02F2C543BD4530D7F8DA7819BAAFA46E88324ADB2DA3BD5829F3E9591302E1BB06CE06DE5FE71B8755AA77A4C46AE5718A52373334D192C7960F5BBD0CB6D87FA5" |
|---|
| 84 | public_key_long = long(hex_cert, 16) |
|---|
| 85 | import Crypto.PublicKey.RSA |
|---|
| 86 | public_key = Crypto.PublicKey.RSA.construct((public_key_long, exponent)) |
|---|
| 87 | remote_hash = public_key.encrypt(signature, '')[0][-20:] |
|---|
| 88 | |
|---|
| 89 | uri = "%s?%s" % (url, args) |
|---|
| 90 | result = urllib.urlopen(uri, data='').read() |
|---|
| 91 | if result == '[]': |
|---|
| 92 | print 'OK: PacketPing returns: %s' % result |
|---|
| 93 | sys.exit(0) |
|---|
| 94 | else: |
|---|
| 95 | print 'CRITICAL: PacketPing returns: %s' % result |
|---|
| 96 | sys.exit(2) |
|---|
| 97 | |
|---|
| 98 | #print "curl -d '' '%s?%s'" % (url, args) |
|---|