mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-24 01:11:38 -05:00
In response to [1]. [1]: https://github.com/alphagov/notifications-api/pull/3300#discussion_r681653248
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
import uuid
|
|
|
|
from flask import current_app
|
|
from notifications_python_client.authentication import create_jwt_token
|
|
|
|
from app.dao.api_key_dao import save_model_api_key
|
|
from app.dao.services_dao import dao_fetch_service_by_id
|
|
from app.models import KEY_TYPE_NORMAL, ApiKey
|
|
|
|
|
|
def create_service_authorization_header(service_id, key_type=KEY_TYPE_NORMAL):
|
|
client_id = str(service_id)
|
|
secrets = ApiKey.query.filter_by(service_id=service_id, key_type=key_type).all()
|
|
|
|
if secrets:
|
|
secret = secrets[0].secret
|
|
else:
|
|
service = dao_fetch_service_by_id(service_id)
|
|
data = {
|
|
'service': service,
|
|
'name': uuid.uuid4(),
|
|
'created_by': service.created_by,
|
|
'key_type': key_type
|
|
}
|
|
api_key = ApiKey(**data)
|
|
save_model_api_key(api_key)
|
|
secret = api_key.secret
|
|
|
|
token = create_jwt_token(secret=secret, client_id=client_id)
|
|
return 'Authorization', 'Bearer {}'.format(token)
|
|
|
|
|
|
def create_admin_authorization_header():
|
|
client_id = current_app.config['ADMIN_CLIENT_ID']
|
|
secret = current_app.config['INTERNAL_CLIENT_API_KEYS'][client_id][0]
|
|
token = create_jwt_token(secret=secret, client_id=client_id)
|
|
return 'Authorization', 'Bearer {}'.format(token)
|
|
|
|
|
|
def unwrap_function(fn):
|
|
"""
|
|
Given a function, returns its undecorated original.
|
|
"""
|
|
while hasattr(fn, '__wrapped__'):
|
|
fn = fn.__wrapped__
|
|
return fn
|