mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2024-10-31 17:17:17 +00:00
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""API access mutations"""
|
|
# pylint: disable=too-few-public-methods
|
|
import datetime
|
|
import typing
|
|
from flask import request
|
|
import strawberry
|
|
from selfprivacy_api.graphql import IsAuthenticated
|
|
from selfprivacy_api.graphql.mutations.mutation_interface import MutationReturnInterface
|
|
from selfprivacy_api.utils import parse_date
|
|
|
|
from selfprivacy_api.utils.auth import (
|
|
generate_recovery_token
|
|
)
|
|
|
|
@strawberry.type
|
|
class ApiKeyMutationReturn(MutationReturnInterface):
|
|
key: typing.Optional[str]
|
|
|
|
@strawberry.input
|
|
class RecoveryKeyLimitsInput:
|
|
"""Recovery key limits input"""
|
|
expiration_date: typing.Optional[datetime.datetime]
|
|
uses: typing.Optional[int]
|
|
|
|
@strawberry.type
|
|
class ApiMutations:
|
|
@strawberry.mutation(permission_classes=[IsAuthenticated])
|
|
def getNewRecoveryApiKey(self, limits: RecoveryKeyLimitsInput) -> ApiKeyMutationReturn:
|
|
"""Generate recovery key"""
|
|
if limits.expiration_date is not None:
|
|
if limits.expiration_date < datetime.datetime.now():
|
|
return ApiKeyMutationReturn(
|
|
success=False,
|
|
message="Expiration date must be in the future",
|
|
code=400,
|
|
key=None,
|
|
)
|
|
if limits.uses is not None:
|
|
if limits.uses < 1:
|
|
return ApiKeyMutationReturn(
|
|
success=False,
|
|
message="Uses must be greater than 0",
|
|
code=400,
|
|
key=None,
|
|
)
|
|
key = generate_recovery_token(limits.expiration_date, limits.uses)
|
|
return ApiKeyMutationReturn(
|
|
success=True,
|
|
message="Recovery key generated",
|
|
code=200,
|
|
key=key,
|
|
)
|