Lunching for groups.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.3 KiB

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""User management."""
from flask import Blueprint
from flask import jsonify
from flask import request
from luncho.helpers import ForceJSON
from luncho.server import User
from luncho.server import db
from luncho.exceptions import LunchoException
class UserDoesNotExistException(LunchoException):
"""There is no such user in the database."""
def __init__(self):
super(UserDoesNotExistException, self).__init__()
self.status = 404
self.message = 'User does not exist'
class InvalidPasswordException(LunchoException):
"""Invalid password."""
def __init__(self):
super(InvalidPasswordException, self).__init__()
self.status = 401
self.message = 'Invalid password'
token = Blueprint('token', __name__)
@token.route('', methods=['POST'])
@ForceJSON(required=['username', 'password'])
def get_token():
"""Return an access token to the user. Request must be:
{ "username": "username", "password": "hash" }"""
json = request.get_json(force=True)
user = User.query.filter_by(username=json['username']).first()
if user is None:
raise UserDoesNotExistException()
if not user.passhash == json['password']:
raise InvalidPasswordException()
return jsonify(status='OK',
token=user.get_token())