import traceback
import account.models
from .api_utils import *
from .models import *
from django.core.exceptions import ValidationError
def _reqire_access_token(params):
token = api_get_param_str(params, "access_token")
return UserToken.get_user_by_token(token)
def make_response(response):
return {"response": response}
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 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 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.messages)
def account_get(params):
user = _reqire_access_token(params)
return 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)."
},
}