def _check_creds(self): try: self.s3_client.get_bucket_location(Bucket=self.bucket_name) except Exception as ex: if hasattr(ex, 'response') and ex.response.get( 'ResponseMetadata', {}).get('HTTPStatusCode') in [403, 401]: # Permission denied raise BadCredentialsError( creds_dict=self.session.get_credentials().__dict__, endpoint=self.s3_client._endpoint, cause=ex) elif hasattr(ex, 'response') and ex.response.get( 'ResponseMetadata', {}).get('HTTPStatusCode') in [400]: # Signature mismatch error (bad request), usually a wrong secret key for a valid access key raise BadCredentialsError( creds_dict=self.session.get_credentials().__dict__, endpoint=self.s3_client._endpoint, cause=ex) elif hasattr(ex, 'response') and ex.response.get( 'ResponseMetadata', {}).get('HTTPStatusCode') in [404]: raise BucketNotFoundError(self.bucket_name) else: logger.error('Got cred check error: {}'.format( ex.response.get('ResponseMetadata'))) raise ex
def _check_creds(self): """ Simple operation to verify creds work without state change :return: True on success """ try: resp = self.client.stat() if resp["success"]: return True elif resp.get("error") and resp.get("error").http_status in [401, 403]: raise BadCredentialsError( self.auth_options, endpoint=None, cause=resp.get("error") ) elif resp.get("error"): raise DriverConfigurationError(cause=resp.get("error")) else: raise DriverConfigurationError( Exception( "Got unsuccessful response from stat operation against service: {}".format( resp ) ) ) except SwiftError as e: raise DriverConfigurationError(e)
def _check(self): """ Ensure that client can put/get/delete from a bucket. """ key = "__anchore_s3_key_self_check__{}".format(str(uuid.uuid4())) try: self.s3_client.put_object(Bucket=self.bucket_name, Key=key, Body=b"") self.s3_client.get_object(Bucket=self.bucket_name, Key=key) self.s3_client.delete_object(Bucket=self.bucket_name, Key=key) except Exception as ex: try: code = ex.response.get("ResponseMetadata", {}).get("HTTPStatusCode") if code in [403, 401, 400]: raise BadCredentialsError( creds_dict=self.session.get_credentials().__dict__, endpoint=self.s3_client._endpoint, cause=ex, ) elif code == 404: if self.create_bucket: self.s3_client.create_bucket(Bucket=self.bucket_name) else: raise BucketNotFoundError(self.bucket_name) except AttributeError: raise
def _check_creds(self): try: self.s3_client.get_bucket_location(Bucket=self.bucket_name) except Exception as ex: if type(ex).__name__ == 'ClientError' and hasattr( ex, 'response') and ex.response.get( 'ResponseMetadata', {}).get('HTTPStatusCode') in [403, 401]: raise BadCredentialsError( creds_dict=self.session.get_credentials().__dict__, endpoint=self.s3_client._endpoint, cause=ex)