def post(self, provider): """ Attempt login """ backend = self.get_backend(provider)() parser = reqparse.RequestParser() for f in backend.loginFields: parser.add_argument(f[0], type=f[1]) args = parser.parse_args() user = backend.getUser(**args) if not user: abort(403, message='Login failed') else: # session['user_id'] = user.id data = {'user': user, 'token': generate_user_token(user)} ret_fields = { 'token': fields.String, 'user': fields.Nested({ 'id': fields.Integer, 'email': fields.String, 'display_name': fields.String }) } return marshal(data, ret_fields), 200
def post(self): """ Create new user """ parser = reqparse.RequestParser() parser.add_argument('email', type=str) parser.add_argument('display_name', type=str) args = parser.parse_args() if args.email is None or not args.email: abort(400, message="An e-mail address must be provided") if args.display_name is None or not args.display_name: abort(400, message="An display name must be provided") user = User_model() user.email = args.email user.display_name = args.display_name try: crud.add(user) except IntegrityError: abort(400, message="User %s already exists" % args.email) data = dict() data['user'] = user data['token'] = generate_user_token(user) ret_fields = { 'token': fields.String, 'user': fields.Nested({ 'id': fields.Integer, 'email': fields.String, 'display_name': fields.String }) } return marshal(data, ret_fields), 201
def test_login_required(self): h = HTTPAuth() h.get_verify_token_callback = verify_token self.assertEqual(h.login_required(lambda x: x)(1).status_code, 401) token = generate_user_token(self.u) with app.test_request_context('/', headers={'authorization': 'Bearer %s' % (token)}) as c: self.assertEqual(h.login_required(lambda x: x)(1),1)
def get(self): """ Return a token for logged in users """ if not g.user: abort(403, message='Not valid login found') data = { 'token': generate_user_token(g.user), 'user': g.user } ret_fields = { 'token': fields.String, 'user': fields.Nested({ 'id': fields.Integer, 'email': fields.String, 'display_name': fields.String }) } return marshal(data, ret_fields), 200
def test_token(self): token = generate_user_token(self.u) self.assertIsNotNone(token) self.assertEqual(verify_user_token(token), self.u)