import sys import boto.s3.connection import os.path #------------------------------------------------------------------------------ HOST_S3 = 'ss3.scayle.es' PORT_S3 = 443 #------------------------------------------------------------------------------ # FUNCTION: S3 Connection # DESCRIPTION: Connection to Server S3 # PARAMETERS: accessKey: Encoded token to access with AD User #------------------------------------------------------------------------------ def S3Connection (accessKey): global conn try: conn = boto.connect_s3( aws_access_key_id=accessKey, aws_secret_access_key=accessKey, host=HOST_S3, port=PORT_S3, is_secure=True, calling_format=boto.s3.connection.OrdinaryCallingFormat(), ) except: print ("AD User with access data <%s> has not privileges or does not exist." % (accessKey)) sys.exit(-1) #------------------------------------------------------------------------------ # FUNCTION: createKey # DESCRIPTION: Key Creation based on parameters # PARAMETERS: keyName Key Name # fileName File name associated to the key # keyMode Access mode: public-read or private # expirationTime Expiration Time # authMode Autorizathion mode: secure or no secure #------------------------------------------------------------------------------ def createKey (keyName, fileName , keyMode,expirationTime, authMode): URL_KO='http://' + HOST_S3 URL_OK='https://' + HOST_S3+':' + str(PORT_S3) try: key = bucket.new_key(keyName) key.set_contents_from_filename (fileName) key.set_canned_acl (keyMode) url_access = key.generate_url(expirationTime, query_auth=authMode, force_http=True) url_accessOK = url_access.replace (URL_KO, URL_OK) print (" Key %s on bucket %s created on mode %s and security %s. If it is secure, its expiration time is %ld.\n URL associated is: %s" % (keyName, bucketName, keyMode, authMode, expirationTime, url_accessOK)) except: print (" !!! KEY WARNING. Error during key %s creation. " % (keyName)) print (" Error description %s.\n Review field CODE" % (sys.exc_info()[1])) sys.exit(-3) return key #------------------------------------------------------------------------------ # FUNCTION: recoverBucket # DESCRIPTION: Verify the bucket which will contains the key exists. # PARAMETERS: bucketName Bucket Name #------------------------------------------------------------------------------ def recoverBucket (bucketName): global bucket try: for bucket in conn.get_all_buckets(): if (bucketName == bucket.name): return True except: print ("Connection to OpenCayle can not be done, please review your AccessKey:") print ("1) Run program s3AccessKey.py") print ("2) Run program s3CheckConnection.py") print ("If problem persists then contact to Scayle through HelpDesk tool.") sys.exit (-4) return False ######################################################################################################### # PROGRAM ######################################################################################################### # ----------------------------- PARAMETERS EVALUATION ----------------------------- if len(sys.argv) >= 7: accessKey = str(sys.argv[1]) bucketName = str(sys.argv[2]) keyName = str (sys.argv[3]) fileName = str (sys.argv[4]) isPrivate = int (sys.argv[5]) expirationTime = int (sys.argv[6]) else: print ("USE: python s3CreateKey.py ") sys.exit(-1) # ----------------------- VERIFY FILE EXISTS ------------------------------------------------ if (os.path.exists(fileName) == False): print ("File <%s> does not exist. Key %s can be created on bucket %s" % (fileName, keyName, bucketName)) sys.exit(-2) # ----------------------- CONNECTION ------------------------------------------------ S3Connection (accessKey) # ----------------------- RECOVER BUCKET ------------------------------------------ if (recoverBucket (bucketName) == False): print ("Bucket, whose name is %s, does not exist" % (bucketName)) sys.exit(-3) # ----------------------- KEY CREATION ------------------------------------------- if (isPrivate == 0): key = createKey (keyName,fileName,'public-read',0, False) else: key = createKey (keyName,fileName,'private',expirationTime, True) # -------------- END PROCESS -------------------------------------------------------------------- print ("Key %s associated to Bucket %s created successfully." % (keyName, bucketName)) sys.exit(0)