import traceback import account.models from .api_utils import * from .models import * from django.core.exceptions import * def _reqire_access_token(params): token = api_get_param_str(params, "access_token") return UserToken.get_user_by_token(token) def account_auth(params): login = api_get_param_str(params, "login") password = api_get_param_str(params, "password") user = UserToken.auth(login, password) token = UserToken.create_token(user) return api_make_response({"access_token": token.access_token}) def account_register(params): name = api_get_param_str(params, "name") surname = api_get_param_str(params, "surname") phone = api_get_param_str(params, "phone") email = api_get_param_str(params, "email") password = api_get_param_str(params, "password") user = account.models.SiteUser( name=name, surname=surname, phone=phone, email=email, password=password ) try: user.full_clean() user.save() try: token = UserToken.create_token(user) return api_make_response({"access_token": token.access_token}) except Exception as ex: # если вдруг токен нельзя создать user.delete() raise ex except ValidationError as e: traceback.print_exc() raise Exception(API_ERROR_USER_REGISTER, e.message_dict) def account_get(params): user = _reqire_access_token(params) return api_make_response({"name": user.name, "surname": user.surname, "email": user.email, "phone": user.phone}) def __make_argument_doc(name, arg_type, description, required=True): return { "name": name, "type": arg_type, "description": description, "required": required } def __make_argument_access_token(): return __make_argument_doc("access_token", "string", "Токен, выданный методом account.auth") __doc_type_string = "string" api_methods = { "account.auth": { "func": account_auth, "doc": "Аутентификация пользователя", "params": [ __make_argument_doc("login", __doc_type_string, "Логин пользователя"), __make_argument_doc("password", __doc_type_string, "Пароль пользователя"), ], "returns": "В случае правильных логина и пароля access_token. В противном случае объект ошибки." }, "account.register": { "func": account_register, "doc": "Регистрация нового пользователя", "params": [ ], "returns": "Поля пользователя (name, surname, email, phone)." }, "account.get": { "func": account_get, "doc": "Получение информации о пользователе", "params": [ __make_argument_access_token() ], "returns": "Поля пользователя (name, surname, email, phone)." }, }