mirror of
https://github.com/tlsnotary/pagesigner-oracles.git
synced 2026-01-08 22:47:57 -05:00
112 lines
3.4 KiB
Python
112 lines
3.4 KiB
Python
import sys
|
|
import hmac
|
|
import base64
|
|
import hashlib
|
|
from urllib import parse
|
|
|
|
if len(sys.argv) != 6:
|
|
print ('Outputs HTTPS GET links in JSON to be used to check the oracle status')
|
|
print ('The default availability zone is ec2.us-east-1.amazonaws.com')
|
|
print ('Usage: ami-id instance-id volume-id AWS-ID AWS-secret')
|
|
print ('Where:')
|
|
print ('ami-id is the AMI from which the instance was launched,')
|
|
print ('instance-id is the notary server instance, and')
|
|
print ('volume-id is the volume attached to it.')
|
|
exit(0)
|
|
|
|
common_args = [('Expires=2030-01-01'), ('SignatureMethod=HmacSHA256'), ('SignatureVersion=2')]
|
|
availability_zone = 'ec2.us-east-1.amazonaws.com'
|
|
ami_id = sys.argv[1]
|
|
instance_id = sys.argv[2]
|
|
volume_id = sys.argv[3]
|
|
key = sys.argv[4]
|
|
secret = sys.argv[5]
|
|
output = ''
|
|
|
|
def makeurl(args, endpoint, abbr):
|
|
global output
|
|
# sorting is essential, otherwise AWS will refuse the signature
|
|
args.sort()
|
|
argstr = ''
|
|
for arg in args:
|
|
argstr += parse.quote_plus(arg, '=')+'&'
|
|
argstr = argstr[:-1]
|
|
secret_bytes = bytes(secret , 'latin-1')
|
|
mhmac = hmac.new(secret_bytes, ('GET\n'+endpoint+'\n/\n'+argstr).encode('utf-8'),hashlib.sha256)
|
|
base64str = base64.b64encode(mhmac.digest()).strip().decode('utf-8')
|
|
urlenc_sig = parse.quote_plus(base64str)
|
|
final_string='https://'+endpoint+'/?'+argstr+'&Signature='+urlenc_sig
|
|
output += '"' + final_string + '",'
|
|
|
|
print('The JSON below is an input for URLFetcher:')
|
|
output += '['
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=DescribeInstances')
|
|
args.append('InstanceId='+instance_id)
|
|
args.append('AWSAccessKeyId='+key)
|
|
# Version= seems to be some AWS-specific expected value. If changed, it will
|
|
# cause the HTTP query to fail
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'DI')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=DescribeVolumes')
|
|
args.append('VolumeId='+volume_id)
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'DV')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=GetConsoleOutput')
|
|
args.append('InstanceId='+instance_id)
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'GCO')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=GetUser')
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2010-05-08')
|
|
makeurl(args, 'iam.amazonaws.com', 'GU')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=DescribeInstanceAttribute')
|
|
args.append('InstanceId='+instance_id)
|
|
args.append('Attribute=userData')
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'DIAud')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=DescribeInstanceAttribute')
|
|
args.append('InstanceId='+instance_id)
|
|
args.append('Attribute=kernel')
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'DIAk')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=DescribeInstanceAttribute')
|
|
args.append('InstanceId='+instance_id)
|
|
args.append('Attribute=ramdisk')
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'DIAr')
|
|
|
|
args = []
|
|
args.extend(common_args)
|
|
args.append('Action=DescribeImages')
|
|
args.append('ImageId.1='+ami_id)
|
|
args.append('AWSAccessKeyId='+key)
|
|
args.append('Version=2014-10-01')
|
|
makeurl(args, availability_zone, 'DImg')
|
|
output = output[:-1]
|
|
output += ']'
|
|
print(output) |