Beispiel #1
0
    def _copyObject(self):
        self._LOGGER.info("coping the object")

        self._LOGGER.debug("Bucket-name : %s" % self.s3Request.BUCKET)
        self._LOGGER.debug("Object-name : %s" % self.s3Request.OBJECT)

        storage_class = "STANDARD"
        if self.s3Request._AUTH_S3_HEADERS.has_key("x-amz-storage-class"):
            storage_class = self.s3Request._AUTH_S3_HEADERS["x-amz-storage-class"]

        object_acl = S3ACP.AMZ_PRIVATE
        if self.s3Request._AUTH_S3_HEADERS.has_key("x-amz-acl"):
            object_acl = self.s3Request._AUTH_S3_HEADERS["x-amz-acl"]
        self._LOGGER.debug("Object acl : %s" % object_acl)

        content_type = None
        if self.s3Request._AUTH_S3_HEADERS.has_key("Content-Type"):
            content_type = self.s3Request._AUTH_S3_HEADERS["Content-Type"]
        self._LOGGER.debug("Object content type : %s" % content_type)

        meta_replace = "COPY"
        if self.s3Request._AUTH_S3_HEADERS.has_key("x-amz-metadata-directive"):
            meta_replace = self.s3Request._AUTH_S3_HEADERS["x-amz-metadata-directive"]

        meta = None
        if meta_replace == "REPLACE":
            meta = self.s3Request.getMetaData()

        copy_path = urllib.unquote(self.s3Request._AUTH_S3_HEADERS["x-amz-copy-source"])
        sourcePosition = copy_path.find("/")
        bucket_path = copy_path[:sourcePosition]
        object_path = copy_path[sourcePosition + 1 :]

        grant = Grant()
        grant.uid = self.getUser().uid
        grant.permission = ACPHelper.amzToPerm(object_acl)
        grantList = [grant]

        obj = self.application.objectSrv.copyObject(
            self.s3Request.BUCKET,
            self.s3Request.OBJECT,
            bucket_path,
            object_path,
            self.getUser(),
            self.s3Request.ID_REQUEST,
            storage_class,
            grantList,
            content_type,
            meta,
        )

        return obj
Beispiel #2
0
    def _copyObject(self):
        self._LOGGER.info("coping the object")

        self._LOGGER.debug('Bucket-name : %s' % self.s3Request.BUCKET)
        self._LOGGER.debug('Object-name : %s' % self.s3Request.OBJECT)

        storage_class = "STANDARD"
        if self.s3Request._AUTH_S3_HEADERS.has_key('x-amz-storage-class'):
            storage_class = self.s3Request._AUTH_S3_HEADERS[
                'x-amz-storage-class']

        object_acl = S3ACP.AMZ_PRIVATE
        if self.s3Request._AUTH_S3_HEADERS.has_key('x-amz-acl'):
            object_acl = self.s3Request._AUTH_S3_HEADERS['x-amz-acl']
        self._LOGGER.debug('Object acl : %s' % object_acl)

        content_type = None
        if self.s3Request._AUTH_S3_HEADERS.has_key('Content-Type'):
            content_type = self.s3Request._AUTH_S3_HEADERS['Content-Type']
        self._LOGGER.debug('Object content type : %s' % content_type)

        meta_replace = "COPY"
        if self.s3Request._AUTH_S3_HEADERS.has_key('x-amz-metadata-directive'):
            meta_replace = self.s3Request._AUTH_S3_HEADERS[
                'x-amz-metadata-directive']

        meta = None
        if meta_replace == "REPLACE":
            meta = self.s3Request.getMetaData()

        copy_path = urllib.unquote(
            self.s3Request._AUTH_S3_HEADERS['x-amz-copy-source'])
        sourcePosition = copy_path.find('/')
        bucket_path = copy_path[:sourcePosition]
        object_path = copy_path[sourcePosition + 1:]

        grant = Grant()
        grant.uid = self.getUser().uid
        grant.permission = ACPHelper.amzToPerm(object_acl)
        grantList = [grant]

        obj = self.application.objectSrv.copyObject(self.s3Request.BUCKET,
                                                    self.s3Request.OBJECT,
                                                    bucket_path, object_path,
                                                    self.getUser(),
                                                    self.s3Request.ID_REQUEST,
                                                    storage_class, grantList,
                                                    content_type, meta)

        return obj
Beispiel #3
0
    def _putObject(self):

        self._LOGGER.info("creating the object")

        self._LOGGER.debug("Bucket-name : %s" % self.s3Request.BUCKET)
        self._LOGGER.debug("Object-name : %s" % self.s3Request.OBJECT)

        storage_class = "STANDARD"
        if self.s3Request._AUTH_S3_HEADERS.has_key("x-amz-storage-class"):
            storage_class = self.s3Request._AUTH_S3_HEADERS["x-amz-storage-class"]

        object_acl = S3ACP.AMZ_PRIVATE
        # if self.s3Request._AUTH_S3_HEADERS.has_key('x-amz-acl'):
        #    object_acl = self.s3Request._AUTH_S3_HEADERS['x-amz-acl']
        self._LOGGER.debug("Object acl : %s" % object_acl)

        content_type = None
        if self.s3Request._AUTH_S3_HEADERS.has_key("content-type"):
            content_type = self.s3Request._AUTH_S3_HEADERS["content-type"]
        self._LOGGER.debug("Object content type : %s" % content_type)

        meta = self.s3Request.getMetaData()

        acp = ACP()
        grant = Grant()
        # FIXME user amzToID
        grant.uid = self.getUser().uid
        grant.permission = ACPHelper.amzToPerm(object_acl)
        grantList = [grant]
        acp.setByGrants(grantList)

        obj = self.application.objectSrv.addObject(
            self.s3Request.BUCKET,
            self.s3Request.OBJECT,
            self.getUser(),
            self.s3Request.ID_REQUEST,
            storage_class,
            acp,
            content_type,
            meta,
            self.getBody(),
        )
        headers = {}

        headers["ETag"] = obj.md5

        return headers
Beispiel #4
0
    def _putObject(self):

        self._LOGGER.info("creating the object")

        self._LOGGER.debug('Bucket-name : %s' % self.s3Request.BUCKET)
        self._LOGGER.debug('Object-name : %s' % self.s3Request.OBJECT)

        storage_class = "STANDARD"
        if self.s3Request._AUTH_S3_HEADERS.has_key('x-amz-storage-class'):
            storage_class = self.s3Request._AUTH_S3_HEADERS[
                'x-amz-storage-class']

        object_acl = S3ACP.AMZ_PRIVATE
        #if self.s3Request._AUTH_S3_HEADERS.has_key('x-amz-acl'):
        #    object_acl = self.s3Request._AUTH_S3_HEADERS['x-amz-acl']
        self._LOGGER.debug('Object acl : %s' % object_acl)

        content_type = None
        if self.s3Request._AUTH_S3_HEADERS.has_key('content-type'):
            content_type = self.s3Request._AUTH_S3_HEADERS['content-type']
        self._LOGGER.debug('Object content type : %s' % content_type)

        meta = self.s3Request.getMetaData()

        acp = ACP()
        grant = Grant()
        #FIXME user amzToID
        grant.uid = self.getUser().uid
        grant.permission = ACPHelper.amzToPerm(object_acl)
        grantList = [grant]
        acp.setByGrants(grantList)

        obj = self.application.objectSrv.addObject(self.s3Request.BUCKET,
                                                   self.s3Request.OBJECT,
                                                   self.getUser(),
                                                   self.s3Request.ID_REQUEST,
                                                   storage_class, acp,
                                                   content_type, meta,
                                                   self.getBody())
        headers = {}

        headers["ETag"] = obj.md5

        return headers
Beispiel #5
0
    def putBucket(self, bucket_name, user, session, amz, location):
        # service operation for search
        self._LOGGER.info("Creating the bucket")
        self._LOGGER.debug('Bucket-name : %s' % bucket_name)

        context = ''
        if user.id == 0:
            self._LOGGER.warning(
                'The user have not privileges to create the bucket')
            raise RestFSError(errCode.err['AuthorizationDeny']['code'],\
                              errCode.err['AuthorizationDeny']['message'],\
                              errCode.err['AuthorizationDeny']['http'])
        res = self.res.findBucket(bucket_name)

        if res > 0:
            self._LOGGER.warning(
                'The bucket you have tried to create already exists')
            raise RestFSError(errCode.err['BucketAlreadyExists']['code'],\
                              errCode.err['BucketAlreadyExists']['message'],\
                              errCode.err['BucketAlreadyExists']['http'])

        # How many bucket can create ?
        num = self.res.getCountBucketByOwner(user.uid)
        self._LOGGER.debug('Bucket-number created : %s' % num)
        mymax = User.max_buckets
        self._LOGGER.debug('Bucket-number max the user can create : %s' %
                           mymax)

        if num > mymax:
            self._LOGGER.warning(
                'The user has reached the limit of the buckets to create')
            raise RestFSError(errCode.err['LimitBucketsReached']['code'],\
                              errCode.err['LimitBucketsReached']['message'],\
                              errCode.err['LimitBucketsReached']['http'])

        #check policy
        #FIX

        if res > 0:
            self._LOGGER.warning('The policy document specified is invalid')
            raise RestFSError(errCode.err['InvalidPolicyDocument']['code'],\
                              errCode.err['InvalidPolicyDocument']['message'],\
                              errCode.err['InvalidPolicyDocument']['http'])

        #check location
        loc = self.res.getRegionList()
        if not location:
            location = "EU"
        elif location not in loc:
            self._LOGGER.warning(
                'The region/location the user specified was not found')
            raise RestFSError(errCode.err['RegionNotFound']['code'],\
                              errCode.err['RegionNotFound']['message'],\
                              errCode.err['RegionNotFound']['http'])

        #Find cluster

        # Set Administration privileges ..
        # Make registration of the new Bucket
        # Resource manager operation
        self.res.addBucket(bucket_name, user.uid)

        # Convert S3 Permission to RestFs Permission
        acp = ACP()
        grant = Grant()
        grant.permission = ACPHelper.amzToPerm(amz)
        grant.uid = user.uid
        grantList = [grant]
        acp.setByGrants(grantList)
        #FIX ME
        gid = ''

        self.meta.createBucket(bucket_name, acp, location, user.uid, gid,
                               context)

        #Storage operation
        self.storage.createBucket(bucket_name, context)

        #Close the transaction, put bucket online
        self.res.setBucketStatus(bucket_name, 2, context)
Beispiel #6
0
    def putBucket(self,bucket_name, user, session, amz, location):
        # service operation for search 
        self._LOGGER.info("Creating the bucket")
        self._LOGGER.debug('Bucket-name : %s' % bucket_name) 
        
        context = ''
        if user.id == 0 :
            self._LOGGER.warning('The user have not privileges to create the bucket')
            raise RestFSError(errCode.err['AuthorizationDeny']['code'],\
                              errCode.err['AuthorizationDeny']['message'],\
                              errCode.err['AuthorizationDeny']['http'])
        res = self.res.findBucket(bucket_name)
        
        if res > 0:
            self._LOGGER.warning('The bucket you have tried to create already exists')
            raise RestFSError(errCode.err['BucketAlreadyExists']['code'],\
                              errCode.err['BucketAlreadyExists']['message'],\
                              errCode.err['BucketAlreadyExists']['http']) 

        # How many bucket can create ? 
        num = self.res.getCountBucketByOwner(user.uid)
        self._LOGGER.debug('Bucket-number created : %s' % num) 
        mymax = User.max_buckets
        self._LOGGER.debug('Bucket-number max the user can create : %s' % mymax) 


        if num > mymax:
            self._LOGGER.warning('The user has reached the limit of the buckets to create')
            raise RestFSError(errCode.err['LimitBucketsReached']['code'],\
                              errCode.err['LimitBucketsReached']['message'],\
                              errCode.err['LimitBucketsReached']['http'])    

        #check policy
        #FIX

        if res > 0:
            self._LOGGER.warning('The policy document specified is invalid')
            raise RestFSError(errCode.err['InvalidPolicyDocument']['code'],\
                              errCode.err['InvalidPolicyDocument']['message'],\
                              errCode.err['InvalidPolicyDocument']['http'])

        #check location
        loc = self.res.getRegionList()
        if not location:
            location = "EU"
        elif location not in loc:
            self._LOGGER.warning('The region/location the user specified was not found')
            raise RestFSError(errCode.err['RegionNotFound']['code'],\
                              errCode.err['RegionNotFound']['message'],\
                              errCode.err['RegionNotFound']['http'])

        
        #Find cluster
    
        # Set Administration privileges .. 
        # Make registration of the new Bucket
        # Resource manager operation
        self.res.addBucket(bucket_name,user.uid)
               
        # Convert S3 Permission to RestFs Permission
        acp = ACP()
        grant = Grant()
        grant.permission = ACPHelper.amzToPerm(amz)
        grant.uid = user.uid
        grantList = [grant]
        acp.setByGrants(grantList)
        #FIX ME
        gid = ''
      
        self.meta.createBucket(bucket_name,acp,location,user.uid, gid,context)
        
        #Storage operation
        self.storage.createBucket(bucket_name,context)
        
        #Close the transaction, put bucket online
        self.res.setBucketStatus(bucket_name,2,context)