def get_one(self, api_key_id_or_key, requester_user, show_secrets=None): """ List api keys. Handle: GET /apikeys/1 """ api_key_db = None try: api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) except ApiKeyNotFoundError: msg = ('ApiKey matching %s for reference and id not found.' % (api_key_id_or_key)) LOG.exception(msg) abort(http_client.NOT_FOUND, msg) permission_type = PermissionType.API_KEY_VIEW rbac_utils.assert_user_has_resource_db_permission(user_db=requester_user, resource_db=api_key_db, permission_type=permission_type) try: mask_secrets = self._get_mask_secrets(show_secrets=show_secrets, requester_user=requester_user) return ApiKeyAPI.from_model(api_key_db, mask_secrets=mask_secrets) except (ValidationError, ValueError) as e: LOG.exception('Failed to serialize API key.') abort(http_client.INTERNAL_SERVER_ERROR, str(e))
def get_all(self, requester_user, show_secrets=None, limit=None, offset=0): """ List all keys. Handles requests: GET /apikeys/ """ mask_secrets = self._get_mask_secrets(show_secrets=show_secrets, requester_user=requester_user) if limit and int(limit) > self.max_limit: msg = 'Limit "%s" specified, maximum value is "%s"' % (limit, self.max_limit) raise ValueError(msg) api_key_dbs = ApiKey.get_all(limit=limit, offset=offset) try: api_keys = [ApiKeyAPI.from_model(api_key_db, mask_secrets=mask_secrets) for api_key_db in api_key_dbs] except OverflowError: msg = 'Offset "%s" specified is more than 32 bit int' % (offset) raise ValueError(msg) resp = Response(json=api_keys) resp.headers['X-Total-Count'] = str(api_key_dbs.count()) if limit: resp.headers['X-Limit'] = str(limit) return resp
def get_one(self, api_key_id_or_key, requester_user, show_secrets=None): """ List api keys. Handle: GET /apikeys/1 """ api_key_db = None try: api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) except ApiKeyNotFoundError: msg = ('ApiKey matching %s for reference and id not found.' % (api_key_id_or_key)) LOG.exception(msg) abort(http_client.NOT_FOUND, msg) permission_type = PermissionType.API_KEY_VIEW rbac_utils = get_rbac_backend().get_utils_class() rbac_utils.assert_user_has_resource_db_permission(user_db=requester_user, resource_db=api_key_db, permission_type=permission_type) try: mask_secrets = self._get_mask_secrets(show_secrets=show_secrets, requester_user=requester_user) return ApiKeyAPI.from_model(api_key_db, mask_secrets=mask_secrets) except (ValidationError, ValueError) as e: LOG.exception('Failed to serialize API key.') abort(http_client.INTERNAL_SERVER_ERROR, six.text_type(e))
def get_all(self, requester_user, show_secrets=None, limit=None, offset=0): """ List all keys. Handles requests: GET /apikeys/ """ mask_secrets = self._get_mask_secrets(show_secrets=show_secrets, requester_user=requester_user) limit = resource.validate_limit_query_param(limit, requester_user=requester_user) try: api_key_dbs = ApiKey.get_all(limit=limit, offset=offset) api_keys = [ApiKeyAPI.from_model(api_key_db, mask_secrets=mask_secrets) for api_key_db in api_key_dbs] except OverflowError: msg = 'Offset "%s" specified is more than 32 bit int' % (offset) raise ValueError(msg) resp = Response(json=api_keys) resp.headers['X-Total-Count'] = str(api_key_dbs.count()) if limit: resp.headers['X-Limit'] = str(limit) return resp
def put(self, api_key_id_or_key, api_key_api): api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) LOG.debug('PUT /apikeys/ lookup with api_key_id_or_key=%s found object: %s', api_key_id_or_key, api_key_db) old_api_key_db = api_key_db api_key_db = ApiKeyAPI.to_model(api_key_api) # Passing in key_hash as MASKED_ATTRIBUTE_VALUE is expected since we do not # leak it out therefore it is expected we get the same value back. Interpret # this special code and empty value as no-change if api_key_db.key_hash == MASKED_ATTRIBUTE_VALUE or not api_key_db.key_hash: api_key_db.key_hash = old_api_key_db.key_hash # Rather than silently ignore any update to key_hash it is better to explicitly # disallow and notify user. if old_api_key_db.key_hash != api_key_db.key_hash: raise ValueError('Update of key_hash is not allowed.') api_key_db.id = old_api_key_db.id api_key_db = ApiKey.add_or_update(api_key_db) extra = {'old_api_key_db': old_api_key_db, 'new_api_key_db': api_key_db} LOG.audit('API Key updated. ApiKey.id=%s.' % (api_key_db.id), extra=extra) api_key_api = ApiKeyAPI.from_model(api_key_db) return api_key_api
def put(self, api_key_id_or_key, api_key_api): api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) LOG.debug( 'PUT /apikeys/ lookup with api_key_id_or_key=%s found object: %s', api_key_id_or_key, api_key_db) old_api_key_db = api_key_db api_key_db = ApiKeyAPI.to_model(api_key_api) # Passing in key_hash as MASKED_ATTRIBUTE_VALUE is expected since we do not # leak it out therefore it is expected we get the same value back. Interpret # this special code and empty value as no-change if api_key_db.key_hash == MASKED_ATTRIBUTE_VALUE or not api_key_db.key_hash: api_key_db.key_hash = old_api_key_db.key_hash # Rather than silently ignore any update to key_hash it is better to explicitly # disallow and notify user. if old_api_key_db.key_hash != api_key_db.key_hash: raise ValueError('Update of key_hash is not allowed.') api_key_db.id = old_api_key_db.id api_key_db = ApiKey.add_or_update(api_key_db) extra = { 'old_api_key_db': old_api_key_db, 'new_api_key_db': api_key_db } LOG.audit('API Key updated. ApiKey.id=%s.' % (api_key_db.id), extra=extra) api_key_api = ApiKeyAPI.from_model(api_key_db) return api_key_api
def get_all(self, **kw): """ List all keys. Handles requests: GET /keys/ """ api_key_dbs = ApiKey.get_all(**kw) api_keys = [ApiKeyAPI.from_model(api_key_db, mask_secrets=True) for api_key_db in api_key_dbs] return api_keys
def get_all(self, **kw): """ List all keys. Handles requests: GET /keys/ """ api_key_dbs = ApiKey.get_all(**kw) api_keys = [ApiKeyAPI.from_model(api_key_db, mask_secrets=True) for api_key_db in api_key_dbs] return api_keys
def get_all(self, requester_user, show_secrets=None): """ List all keys. Handles requests: GET /apikeys/ """ mask_secrets = self._get_mask_secrets(show_secrets=show_secrets, requester_user=requester_user) api_key_dbs = ApiKey.get_all() api_keys = [ApiKeyAPI.from_model(api_key_db, mask_secrets=mask_secrets) for api_key_db in api_key_dbs] return api_keys
def put(self, api_key_api, api_key_id_or_key, requester_user): api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) permission_type = PermissionType.API_KEY_MODIFY rbac_utils = get_rbac_backend().get_utils_class() rbac_utils.assert_user_has_resource_db_permission( user_db=requester_user, resource_db=api_key_db, permission_type=permission_type, ) old_api_key_db = api_key_db api_key_db = ApiKeyAPI.to_model(api_key_api) try: User.get_by_name(api_key_api.user) except StackStormDBObjectNotFoundError: user_db = UserDB(name=api_key_api.user) User.add_or_update(user_db) extra = {"username": api_key_api.user, "user": user_db} LOG.audit('Registered new user "%s".' % (api_key_api.user), extra=extra) # Passing in key_hash as MASKED_ATTRIBUTE_VALUE is expected since we do not # leak it out therefore it is expected we get the same value back. Interpret # this special code and empty value as no-change if api_key_db.key_hash == MASKED_ATTRIBUTE_VALUE or not api_key_db.key_hash: api_key_db.key_hash = old_api_key_db.key_hash # Rather than silently ignore any update to key_hash it is better to explicitly # disallow and notify user. if old_api_key_db.key_hash != api_key_db.key_hash: raise ValueError("Update of key_hash is not allowed.") api_key_db.id = old_api_key_db.id api_key_db = ApiKey.add_or_update(api_key_db) extra = { "old_api_key_db": old_api_key_db, "new_api_key_db": api_key_db } LOG.audit("API Key updated. ApiKey.id=%s." % (api_key_db.id), extra=extra) api_key_api = ApiKeyAPI.from_model(api_key_db) return api_key_api
def get_one(self, api_key_id_or_key): """ List api keys. Handle: GET /apikeys/1 """ api_key_db = None try: api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) except ApiKeyNotFoundError: msg = 'ApiKey matching %s for reference and id not found.', api_key_id_or_key LOG.exception(msg) abort(http_client.NOT_FOUND, msg) try: return ApiKeyAPI.from_model(api_key_db, mask_secrets=True) except (ValidationError, ValueError) as e: LOG.exception('Failed to serialize API key.') abort(http_client.INTERNAL_SERVER_ERROR, str(e))
def get_one(self, api_key_id_or_key): """ List api keys. Handle: GET /apikeys/1 """ api_key_db = None try: api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) except ApiKeyNotFoundError: msg = 'ApiKey matching %s for reference and id not found.', api_key_id_or_key LOG.exception(msg) abort(http_client.NOT_FOUND, msg) try: return ApiKeyAPI.from_model(api_key_db, mask_secrets=True) except (ValidationError, ValueError) as e: LOG.exception('Failed to serialize API key.') abort(http_client.INTERNAL_SERVER_ERROR, str(e))
def put(self, api_key_api, api_key_id_or_key, requester_user): api_key_db = ApiKey.get_by_key_or_id(api_key_id_or_key) permission_type = PermissionType.API_KEY_MODIFY rbac_utils = get_rbac_backend().get_utils_class() rbac_utils.assert_user_has_resource_db_permission(user_db=requester_user, resource_db=api_key_db, permission_type=permission_type) old_api_key_db = api_key_db api_key_db = ApiKeyAPI.to_model(api_key_api) try: User.get_by_name(api_key_api.user) except StackStormDBObjectNotFoundError: user_db = UserDB(name=api_key_api.user) User.add_or_update(user_db) extra = {'username': api_key_api.user, 'user': user_db} LOG.audit('Registered new user "%s".' % (api_key_api.user), extra=extra) # Passing in key_hash as MASKED_ATTRIBUTE_VALUE is expected since we do not # leak it out therefore it is expected we get the same value back. Interpret # this special code and empty value as no-change if api_key_db.key_hash == MASKED_ATTRIBUTE_VALUE or not api_key_db.key_hash: api_key_db.key_hash = old_api_key_db.key_hash # Rather than silently ignore any update to key_hash it is better to explicitly # disallow and notify user. if old_api_key_db.key_hash != api_key_db.key_hash: raise ValueError('Update of key_hash is not allowed.') api_key_db.id = old_api_key_db.id api_key_db = ApiKey.add_or_update(api_key_db) extra = {'old_api_key_db': old_api_key_db, 'new_api_key_db': api_key_db} LOG.audit('API Key updated. ApiKey.id=%s.' % (api_key_db.id), extra=extra) api_key_api = ApiKeyAPI.from_model(api_key_db) return api_key_api