def s3_set_config(node, auth, user_addon, node_addon, **kwargs): """Saves selected bucket to node settings.""" # Fail if user settings not authorized if not user_addon.has_auth: raise HTTPError(httplib.UNAUTHORIZED) # If authorized, only owner can change settings if node_addon.has_auth and node_addon.user_settings.owner != auth.user: raise HTTPError(httplib.FORBIDDEN) # Claiming the node settings if not node_addon.user_settings: node_addon.user_settings = user_addon bucket = request.json.get('s3_bucket', '') if not utils.bucket_exists(node_addon.external_account.oauth_key, node_addon.external_account.oauth_secret, bucket): error_message = ('We are having trouble connecting to that bucket. ' 'Try a different one.') return {'message': error_message}, httplib.BAD_REQUEST if bucket != node_addon.bucket: # Update node settings and log node_addon.set_folder(bucket, auth) return S3Serializer().serialize_settings(node_addon, auth.user)
def s3_post_node_settings(node, auth, user_addon, node_addon, **kwargs): # Fail if user settings not authorized if not user_addon.has_auth: raise HTTPError(httplib.BAD_REQUEST) # If authorized, only owner can change settings if node_addon.has_auth and node_addon.user_settings.owner != auth.user: raise HTTPError(httplib.BAD_REQUEST) # Claiming the node settings if not node_addon.user_settings: node_addon.user_settings = user_addon bucket = request.json.get("s3_bucket", "") if not utils.bucket_exists(user_addon.access_key, user_addon.secret_key, bucket): error_message = "We are having trouble connecting to that bucket. " "Try a different one." return {"message": error_message}, httplib.BAD_REQUEST if bucket != node_addon.bucket: # Update node settings node_addon.bucket = bucket node_addon.save() node.add_log( action="s3_bucket_linked", params={"node": node._id, "project": node.parent_id, "bucket": node_addon.bucket}, auth=auth, ) return node_addon.to_json(auth.user)
def s3_post_node_settings(node, auth, user_addon, node_addon, **kwargs): # Fail if user settings not authorized if not user_addon.has_auth: raise HTTPError(httplib.BAD_REQUEST) # If authorized, only owner can change settings if node_addon.has_auth and node_addon.user_settings.owner != auth.user: raise HTTPError(httplib.BAD_REQUEST) # Claiming the node settings if not node_addon.user_settings: node_addon.user_settings = user_addon bucket = request.json.get('s3_bucket', '') if not utils.bucket_exists(user_addon.access_key, user_addon.secret_key, bucket): error_message = ('We are having trouble connecting to that bucket. ' 'Try a different one.') return {'message': error_message}, httplib.BAD_REQUEST if bucket != node_addon.bucket: # Update node settings node_addon.bucket = bucket node_addon.save() node.add_log( action='s3_bucket_linked', params={ 'node': node._id, 'project': node.parent_id, 'bucket': node_addon.bucket, }, auth=auth, ) return node_addon.to_json(auth.user)
def set_folder(self, folder_id, auth): if not bucket_exists(self.external_account.oauth_key, self.external_account.oauth_secret, folder_id): error_message = ('We are having trouble connecting to that bucket. ' 'Try a different one.') raise exceptions.InvalidFolderError(error_message) self.folder_id = str(folder_id) bucket_location = get_bucket_location_or_error( self.external_account.oauth_key, self.external_account.oauth_secret, folder_id ) try: bucket_location = BUCKET_LOCATIONS[bucket_location] except KeyError: # Unlisted location, S3 may have added it recently. # Default to the key. When hit, add mapping to settings pass self.folder_name = '{} ({})'.format(folder_id, bucket_location) self.save() self.nodelogger.log(action='bucket_linked', extra={'bucket': str(folder_id)}, save=True)