PatchInventory: check_pokersocial

File check_pokersocial, 4.4 kB (added by admin, 3 years ago)

check_pokersocial

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