def logar(params):
    usuario = params.get('usuario')
    email = params.get('email')
    senha = params.get('senha')
    if senha and (usuario or email):
        hash = SHA256.new()
        hash.update(senha)
        query = {'senha': hash.hexdigest()}
        if usuario:
            query['username'] = usuario
        elif email:
            query['email'] = email
        else:
            abort(403)
        u_dict = Usuario.collection().find_one(query)
        u = Usuario()
        u = Usuario.make_usuario_from_dict(u, u_dict)
        if u:
            token_dict = Token.collection().find_one({'usuario': u.get_id(), 'expired': False})
            if token_dict:
                t = Token().make_from_dict(token_dict)
                return t.token
            else:
                t = Token()
                t.token = Token.generate_token()
                t.usuario = u.get_id()
                t.expired = False
                Token.collection().insert(t.make_dict())
                return t.token
        else:
            abort(403)
    else:
        abort(500)
    def test_validate_token_expired(self, mock_from_json):
        token = Token()
        token.expired = True

        mock_from_json.return_value = token
        validate_func = mock.Mock()

        self.assertFalse(validate_token(token, "GET", None, validate_func)[0])
    def test_token_expires_is_not_expired(self):
        token = Token()
        token.expired = False

        self.assertFalse(_is_expired_token(token))
    def test_token_expires_is_expired(self):
        token = Token()
        token.expired = True

        self.assertTrue(_is_expired_token(token))