Esempio n. 1
0
    def post(self):
        """ Logins user according to JSON object data.

            Headers:
                Content-Type: application/json

            JSON Request format:
            {
                "email": email,
                "senha": senha
            }
        """

        data = sign_in_parser.parse_args()

        # Email exists/Verify password hash
        if not email_exists(data['email']) or \
        not User.verify_hash(data['senha'], get_user_hash(data['email'])):
            return {'mensagem': 'Usuário e/ou senha inválidos.'}, 401

        # Generate token
        user = get_user_by_email(data['email'])
        token = Log.generate_token(
            {
                'sub': user.uuid,
                'name': user.name,
                'exp':
                datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
            }, app.config['SECRET_KEY'])

        log = Log(user, token)

        # Registering login
        session.add(log)
        session.commit()

        # User logged in successfully
        return {
            'id': user.uuid,
            'email': user.email,
            'data_criacao': user.creation_date.isoformat(),
            'data_atualizacao': user.update_date.isoformat(),
            'ultimo_login': user_last_login(user.email).date.isoformat(),
            'token': token.decode('UTF-8')
        }, 201
Esempio n. 2
0
    def post(self):
        """ Registers user on database with JSON object data.

            Headers:
                Content-Type: application/json

            JSON Request format:
            {
                "nome": nome,
                "email": email,
                "senha": senha,
                "telefones": [
                    {
                        "numero": numero,
                        "ddd": ddd
                    },
                    ...
                ]
            }
        """

        data = sign_up_parser.parse_args()

        # Validate email
        if re.match("^[\w.]+@[\w]+\.[\w]+$", data.email) is None:
            return {
                'mensagem': '{} não é um email válido.'.format(data.email)
            }, 400

        # Email already registered
        if email_exists(data.email):
            return {
                'mensagem': '{} já foi registrado.'.format(data.email)
            }, 400

        # Validate phone numbers
        for phone in data['telefones']:
            if num.match(phone['numero']) is None or num.match(
                    phone['ddd']) is None:
                return {
                    'mensagem':
                    '{} {} não é um numero de telefone válido.'.format(
                        phone['ddd'], phone['numero'])
                }, 400

        # Create user ORM
        user = User(data['nome'], data['email'],
                    User.generate_hash(data['senha']))
        user.phones = [
            Phone(phone['numero'], phone['ddd']) for phone in data['telefones']
        ]

        # Generate token
        token = Log.generate_token(
            {
                'sub': user.uuid,
                'name': user.name,
                'exp':
                datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
            }, app.config['SECRET_KEY'])

        # Add to database
        session.add(user)
        session.add(Log(user, token))
        session.commit()

        # User registered successfully
        return {
            'id': user.uuid,
            'email': user.email,
            'data_criacao': user.creation_date.isoformat(),
            'data_atualizacao': user.update_date.isoformat(),
            'ultimo_login': user_last_login(user.email).date.isoformat(),
            'token': token.decode('UTF-8')
        }, 201