from functools import wraps
from flask import g, request
from flask_restplus import Resource, fields
from legislei.app import current_user, rest_api_v1
from legislei.controllers.dto import users_dto
from legislei.exceptions import UsersModuleError
from legislei.services.usuarios import Usuario
_access_token_dto = rest_api_v1.model("AccessToken", {
'username': fields.String(description="Nome de usuário", required=True),
'senha': fields.String(description="Senha do usuário", required=True)
})
[documentos]@rest_api_v1.route("/usuarios/token_acesso")
class User(Resource):
[documentos] @rest_api_v1.doc(
description="Retorna um token de acesso do usuário para uso da API",
responses={
200: 'Sucesso',
400: 'Faltam parâmetros',
401: 'Login falhou'
}
)
@rest_api_v1.expect(_access_token_dto, validate=True)
def post(self):
username = request.json['username']
password = request.json['senha']
if Usuario().login(username, password, False):
token = Usuario().generate_auth_token(current_user)
g.login_via_header = True
return {'token': token.decode('ascii')}
return {'message': 'Login falhou'}, 401
[documentos]@rest_api_v1.route("/usuarios")
class UserList(Resource):
[documentos] @rest_api_v1.doc(
description="Cria uma nova conta de usuário",
responses={
201: 'Usuário criado',
400: 'Parâmetros inválidos ou incompletos'
}
)
@rest_api_v1.expect(users_dto, validate=True)
def post(self):
try:
Usuario().registrar(
nome=request.json['username'].lower(),
senha=request.json['senha'],
senha_confirmada=request.json['senha_confirmada'],
email=request.json['email']
)
return {'message': 'Criado'}, 201
except UsersModuleError as e:
return {'message': e.message}, 400