Spaces:
Build error
Build error
import datetime | |
from flask import request | |
from flask_restful import Resource, reqparse | |
from constants.languages import supported_language | |
from controllers.console import api | |
from controllers.console.error import AlreadyActivateError | |
from extensions.ext_database import db | |
from libs.helper import StrLen, email, extract_remote_ip, timezone | |
from models.account import AccountStatus, Tenant | |
from services.account_service import AccountService, RegisterService | |
class ActivateCheckApi(Resource): | |
def get(self): | |
parser = reqparse.RequestParser() | |
parser.add_argument("workspace_id", type=str, required=False, nullable=True, location="args") | |
parser.add_argument("email", type=email, required=False, nullable=True, location="args") | |
parser.add_argument("token", type=str, required=True, nullable=False, location="args") | |
args = parser.parse_args() | |
workspaceId = args["workspace_id"] | |
reg_email = args["email"] | |
token = args["token"] | |
invitation = RegisterService.get_invitation_if_token_valid(workspaceId, reg_email, token) | |
if invitation: | |
data = invitation.get("data", {}) | |
tenant: Tenant = invitation.get("tenant", None) | |
workspace_name = tenant.name if tenant else None | |
workspace_id = tenant.id if tenant else None | |
invitee_email = data.get("email") if data else None | |
return { | |
"is_valid": invitation is not None, | |
"data": {"workspace_name": workspace_name, "workspace_id": workspace_id, "email": invitee_email}, | |
} | |
else: | |
return {"is_valid": False} | |
class ActivateApi(Resource): | |
def post(self): | |
parser = reqparse.RequestParser() | |
parser.add_argument("workspace_id", type=str, required=False, nullable=True, location="json") | |
parser.add_argument("email", type=email, required=False, nullable=True, location="json") | |
parser.add_argument("token", type=str, required=True, nullable=False, location="json") | |
parser.add_argument("name", type=StrLen(30), required=True, nullable=False, location="json") | |
parser.add_argument( | |
"interface_language", type=supported_language, required=True, nullable=False, location="json" | |
) | |
parser.add_argument("timezone", type=timezone, required=True, nullable=False, location="json") | |
args = parser.parse_args() | |
invitation = RegisterService.get_invitation_if_token_valid(args["workspace_id"], args["email"], args["token"]) | |
if invitation is None: | |
raise AlreadyActivateError() | |
RegisterService.revoke_token(args["workspace_id"], args["email"], args["token"]) | |
account = invitation["account"] | |
account.name = args["name"] | |
account.interface_language = args["interface_language"] | |
account.timezone = args["timezone"] | |
account.interface_theme = "light" | |
account.status = AccountStatus.ACTIVE.value | |
account.initialized_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) | |
db.session.commit() | |
token_pair = AccountService.login(account, ip_address=extract_remote_ip(request)) | |
return {"result": "success", "data": token_pair.model_dump()} | |
api.add_resource(ActivateCheckApi, "/activate/check") | |
api.add_resource(ActivateApi, "/activate") | |