def response_generator(self, ex):
        """
        Handle exception raised in all operations.

        It will return object with proper error code, which can be used in
        client to display proper error message.
        """

        status = -1
        command_output = "{}".format(str(ex))
        try:
            logger.info("Error code %s " % ex.response['Error']['Code'])
            if ex.response['Error']['Code'] == Strings.INVALID_ACCESS_KEY:
                status = Status.UNAUTHORIZED
            elif ex.response['Error']['Code'] == Strings.ENTITY_EXISTS:
                status = Status.CONFLICT_STATUS
            elif ex.response['Error']['Code'] == Strings.NO_SUCH_ENTITY:
                status = Status.NOT_FOUND
            elif ex.response['Error']['Code'] == Strings.SIGNATURE_NOT_MATCH:
                status = Status.UNAUTHORIZED
            elif ex.response['Error']['Code'] == Strings.QUOTA_EXCEEDED:
                status = Status.BAD_REQUEST
            response = CommandResponse(status=status, msg=command_output)
        except Exception as ex:
            response = CommandResponse(status=status, msg=command_output)
        return response
예제 #2
0
    def create(self):
        """
        Handle user create operation.
        """
        user_args = {}
        user_args['UserName'] = self.args.get("name", None)
        path = self.args.get("path", None)
        if path is not None:
            user_args['Path'] = path

        try:
            result = self.client.create_user(**user_args)
            metadata = result.get('ResponseMetadata')
            if metadata is not None:
                status = metadata.get('HTTPStatusCode')
                response = CommandResponse(status, result)
                logger.info("User created successfully")
            else:
                response = self.response_generator("No Response received.")
        except ClientError as e:
            response = self.response_generator(e)
        except Exception as ex:
            logger.info("Exception %s " % str(ex))
            status = -1
            if type(ex) == Strings.CONNECTION_ERROR:
                status = Status.SERVICE_UNAVAILABLE
            response = CommandResponse(status=status, msg=str(ex))

        return response
예제 #3
0
 def create(self):
     """
     Handles account creation operation.
     """
     name = self.args.get("name", None)
     email = self.args.get("email", None)
     logger.info("Inside create command")
     parameters = {'Action': 'CreateAccount',
                   'AccountName': name,
                   'Email': email}
     try:
         response, data = execute_cmd(self.client, parameters)
         if response.status == Status.CREATED_STATUS:
             account_response = json.loads(
                 json.dumps(xmltodict.parse(data)))
             account = \
                 account_response['CreateAccountResponse'][
                     'CreateAccountResult'][
                     'Account']
             temp_account_response = CommandResponse(
                 response.status, account)
             return temp_account_response
         else:
             logger.info("Status  %s " % response.status)
             temp_account_response = CommandResponse(response.status, None)
             return temp_account_response
     except Exception as ex:
         logger.info("Exception %s " % str(ex))
         status = -1
         if type(ex) == Strings.CONNECTION_ERROR:
             status = Status.SERVICE_UNAVAILABLE
         temp_account_response = CommandResponse(status=status, msg=str(ex))
         return temp_account_response
예제 #4
0
    def list(self):
        """
        Handles account list operation
        """

        parameters = {'Action': Strings.LIST_ACCOUNTS}
        try:
            response, data = execute_cmd(self.client, parameters)
            if response.status == Status.OK_STATUS:
                account_response = json.loads(
                    json.dumps(xmltodict.parse(data)))
                accounts = \
                    account_response['ListAccountsResponse'][
                        'ListAccountsResult'][
                        'Accounts']
                temp_account_response = CommandResponse(response.status,
                                                        accounts)
                return temp_account_response
            else:
                temp_account_response = CommandResponse(response.status, None)
                return temp_account_response

        except Exception as ex:
            status = -1
            if type(ex) == Strings.CONNECTION_ERROR:
                status = Status.SERVICE_UNAVAILABLE
            temp_account_response = CommandResponse(status=status, msg=str(ex))
            return temp_account_response
예제 #5
0
    def remove(self):
        """
        Handle user remove operation.
        """
        user_args = {}
        user_args['UserName'] = self.args.get("name", None)
        try:
            result = self.client.delete_user(**user_args)
            metadata = result.get('ResponseMetadata')
            if metadata is not None:
                status = metadata.get('HTTPStatusCode')
                response = CommandResponse(status, result)
                logger.info("User removed successfully")
            else:
                response = self.response_generator("No Response received.")

        except Exception as ex:
            response = self.response_generator(ex)
        return response
예제 #6
0
    def list(self):
        """
        Handles user list operation.
        """

        user_args = {}
        try:
            logger.info("Inside list command")
            result = self.client.list_users(**user_args)
            metadata = result.get('ResponseMetadata')
            if metadata is not None:
                status = metadata.get('HTTPStatusCode')
                response = CommandResponse(status, result)
            else:
                response = self.response_generator("No Response received.")

        except Exception as ex:
            response = self.response_generator(ex)
        return response
    def create(self):
        """
        Handle access key create operation.
        """

        access_key_args = {}
        access_key_args['UserName'] = self.args.get("user_name", None)

        try:
            result = self.client.create_access_key(**access_key_args)
            metadata = result.get('ResponseMetadata')
            if metadata is not None:
                status = metadata.get('HTTPStatusCode')
                response = CommandResponse(status, result)
            else:
                response = self.response_generator("No Response received.")
        except Exception as ex:
            response = self.response_generator(ex)
        return response
예제 #8
0
    def modify(self):
        """
        Handle user modify operation.
        """
        user_args = {}
        logger.info("Inside modify command")
        user_args['UserName'] = self.args.get("name", None)
        user_args['NewUserName'] = self.args.get("new_name", None)
        path = self.args.get("path", None)
        if path is not None:
            user_args['NewPath'] = path

        try:
            result = self.client.update_user(**user_args)
            metadata = result.get('ResponseMetadata')
            if metadata is not None:
                status = metadata.get('HTTPStatusCode')
                response = CommandResponse(status, result)
                logger.info("User modified successfully")
            else:
                response = self.response_generator("No Response received.")
        except ClientError as ex:
            response = self.response_generator(ex)
        return response
예제 #9
0
    def remove(self):
        """
        Handles Account remove operation
        :return:
        """
        logger.info("Inside Remove command ")

        access_key = self.args.get("access_key", None)
        secret_key = self.args.get("secret_key", None)

        from sspl_hl.utils.s3admin.s3_utils import get_client

        s3_client, response = get_client(access_key, secret_key,
                                         Strings.S3_SERVICE)
        # First check if buckets are available for this account or not.
        logger.info("Check if buckets are associated with Account")
        try:
            if s3_client is None:
                # No S3 Client available.
                temp_account_response = CommandResponse(msg=response.msg,
                                                        status=response.status)
                return temp_account_response
            else:
                is_bucket_avail = self.is_buckets_available(s3_client)
                if is_bucket_avail:
                    status = -1
                    temp_account_response = CommandResponse(
                        status=status, msg=Strings.BUCKETS_AVAILABLE_ERROR)
                    return temp_account_response

        except Exception as ex:
            status = -1
            command_output = "{}".format(str(ex))
            try:
                logger.info("command_output %s " % command_output)
                if ex.response['Error']['Code'] == Strings.INVALID_ACCESS_KEY:
                    status = Status.UNAUTHORIZED
                elif ex.response['Error']['Code'] \
                        == Strings.SERVICE_UNAVAILABLE:
                    status = Status.SERVICE_UNAVAILABLE
                response = CommandResponse(status=status, msg=command_output)
            except Exception:
                response = CommandResponse(status=status, msg=command_output)
            return response

        # Buckets are not available.
        force = self.args.get("force", None)
        name = self.args.get("name", None)
        headers = {"content-type": "application/x-www-form-urlencoded",
                   "Accept": "text/plain"}
        parameters = {'Action': 'DeleteAccount',
                      'AccountName': name}
        parameters['force'] = force
        auth_header = sign_request_v2(access_key, secret_key,
                                      'POST', '/', {}, headers)
        headers['Authorization'] = auth_header

        try:
            response, data = execute_cmd(self.client, parameters, headers)
            logger.info("Account Remove response: [%s] " % response.status)
            if response.status == Status.OK_STATUS:
                account_response = json.loads(
                    json.dumps(xmltodict.parse(data)))
                temp_account_response = CommandResponse(
                    status=response.status)
                return temp_account_response
            else:
                account_response = json.loads(
                    json.dumps(xmltodict.parse(data)))['ErrorResponse']
                if account_response is None:
                    temp_account_response = CommandResponse(
                        response.status, None)
                    return temp_account_response
                status = -1
                if account_response['Error']['Code'] == \
                        Strings.NO_SUCH_ENTITY:
                    status = Status.NOT_FOUND
                elif account_response['Error']['Code'] == \
                        Strings.SIGNATURE_NOT_MATCH:
                    status = Status.UNAUTHORIZED
                elif account_response['Error']['Code'] == \
                        Strings.DELETE_CONFLICT:
                    status = Status.CONFLICT_STATUS
                temp_account_response = CommandResponse(status=status)
                return temp_account_response
        except Exception as ex:
            logger.info("Exception %s " % str(ex))
            status = -1
            if type(ex) == Strings.CONNECTION_ERROR:
                status = Status.SERVICE_UNAVAILABLE
            temp_account_response = CommandResponse(
                status=status, msg=str(ex))
            return temp_account_response