Support credentials label and last_used_from fields

This commit is contained in:
allegroai 2022-03-15 16:29:37 +02:00
parent da8a45072f
commit c04e2e498b
7 changed files with 19 additions and 5 deletions

View File

@ -81,6 +81,7 @@ class Credentials(Base):
class CredentialsResponse(Credentials): class CredentialsResponse(Credentials):
secret_key = StringField() secret_key = StringField()
last_used = DateTimeField(default=None) last_used = DateTimeField(default=None)
last_used_from = StringField()
class CreateCredentialsRequest(Base): class CreateCredentialsRequest(Base):

View File

@ -162,7 +162,7 @@ class AuthBLL:
access_key=get_client_id(), secret_key=get_secret_key(), label=label access_key=get_client_id(), secret_key=get_secret_key(), label=label
) )
user.credentials.append( user.credentials.append(
Credentials(key=cred.access_key, secret=cred.secret_key) Credentials(key=cred.access_key, secret=cred.secret_key, label=label)
) )
user.save() user.save()

View File

@ -50,6 +50,7 @@ class Credentials(EmbeddedDocument):
secret = StringField(required=True) secret = StringField(required=True)
label = StringField() label = StringField()
last_used = DateTimeField() last_used = DateTimeField()
last_used_from = StringField()
class User(DbModelMixin, AuthDocument): class User(DbModelMixin, AuthDocument):

View File

@ -24,6 +24,10 @@ _definitions {
description: "" description: ""
format: "date-time" format: "date-time"
} }
last_used_from {
type: string
description: ""
}
} }
} }
role { role {

View File

@ -51,7 +51,7 @@ def authorize_token(jwt_token, *_, **__):
) )
def authorize_credentials(auth_data, service, action, call_data_items): def authorize_credentials(auth_data, service, action, call):
"""Validate credentials against service/action and request data (dicts). """Validate credentials against service/action and request data (dicts).
Returns a new basic object (auth payload) Returns a new basic object (auth payload)
""" """
@ -100,7 +100,12 @@ def authorize_credentials(auth_data, service, action, call_data_items):
if not fixed_user: if not fixed_user:
# In case these are proper credentials, update last used time # In case these are proper credentials, update last used time
User.objects(id=user.id, credentials__key=access_key).update( User.objects(id=user.id, credentials__key=access_key).update(
**{"set__credentials__$__last_used": datetime.utcnow()} **{
"set__credentials__$__last_used": datetime.utcnow(),
"set__credentials__$__last_used_from": call.get_worker(
default=call.real_ip
),
}
) )
with TimingContext("mongo", "company_by_id"): with TimingContext("mongo", "company_by_id"):

View File

@ -69,7 +69,7 @@ def validate_auth(endpoint, call):
auth = call.authorization or "" auth = call.authorization or ""
auth_type, _, auth_data = auth.partition(" ") auth_type, _, auth_data = auth.partition(" ")
authorize_func = get_auth_func(auth_type) authorize_func = get_auth_func(auth_type)
call.auth = authorize_func(auth_data, service, action, call.batched_data) call.auth = authorize_func(auth_data, service, action, call)
except Exception: except Exception:
if endpoint.authorize: if endpoint.authorize:
# if endpoint requires authorization, re-raise exception # if endpoint requires authorization, re-raise exception

View File

@ -161,7 +161,10 @@ def get_credentials(call: APICall, _, __):
call.result.data_model = GetCredentialsResponse( call.result.data_model = GetCredentialsResponse(
credentials=[ credentials=[
CredentialsResponse( CredentialsResponse(
access_key=c.key, last_used=c.last_used, label=c.label access_key=c.key,
last_used=c.last_used,
label=c.label,
last_used_from=c.last_used_from,
) )
for c in user.credentials for c in user.credentials
] ]