85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
# Copyright (c) 2019. Tobias Kurze
|
|
"""
|
|
This module provides functions related to authentication through the API.
|
|
For example: listing of available auth providers or registration of users.
|
|
|
|
Login through API does not start a new session, but instead returns JWT.
|
|
"""
|
|
from flask_jwt_extended import jwt_required
|
|
from flask_restplus import fields, Resource
|
|
|
|
from backend import db
|
|
from backend.api import api_group
|
|
from backend.models.user_model import Group
|
|
|
|
|
|
group_model = api_group.model('Group', {
|
|
'id': fields.String(required=False, description='The group\'s identifier'),
|
|
'name': fields.String(required=True, description='The group\'s name'),
|
|
'description': fields.String(required=False, description='The group\'s description'),
|
|
'users': fields.List(fields.Nested(
|
|
{'id': fields.Integer(), 'first_name': fields.String(), 'last_name': fields.String()}),
|
|
required=False, description='Group members.')
|
|
})
|
|
|
|
|
|
@api_group.route('/<int:id>')
|
|
@api_group.response(404, 'Group not found')
|
|
@api_group.param('id', 'The group identifier')
|
|
class GroupResource(Resource):
|
|
@jwt_required
|
|
@api_group.doc('get_group')
|
|
@api_group.marshal_with(group_model)
|
|
def get(self, id):
|
|
"""Fetch a user given its identifier"""
|
|
group = Group.get_by_id(id)
|
|
if group is not None:
|
|
return group
|
|
api_group.abort(404)
|
|
|
|
@jwt_required
|
|
@api_group.doc('delete_todo')
|
|
@api_group.response(204, 'Todo deleted')
|
|
def delete(self, id):
|
|
'''Delete a task given its identifier'''
|
|
group = Group.get_by_id(id)
|
|
if group is not None:
|
|
group.delete()
|
|
return '', 204
|
|
api_group.abort(404)
|
|
|
|
@jwt_required
|
|
@api_group.doc('update_group')
|
|
@api_group.expect(group_model)
|
|
@api_group.marshal_with(group_model)
|
|
def put(self, id):
|
|
'''Update a task given its identifier'''
|
|
group = Group.get_by_id(id)
|
|
if group is not None:
|
|
group.name = api_group["name"]
|
|
db.session.commit()
|
|
return group
|
|
api_group.abort(404)
|
|
|
|
@api_group.route('')
|
|
class GroupList(Resource):
|
|
@jwt_required
|
|
@api_group.doc('groups')
|
|
@api_group.marshal_list_with(group_model)
|
|
def get(self):
|
|
"""
|
|
List all groups
|
|
:return: groups
|
|
"""
|
|
return Group.get_all()
|
|
|
|
@jwt_required
|
|
@api_group.doc('create_group')
|
|
@api_group.expect(group_model)
|
|
@api_group.marshal_with(group_model, code=201)
|
|
def post(self):
|
|
group = Group(**api_group.payload)
|
|
db.session.add(group)
|
|
db.session.commit()
|
|
return group
|