# 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('/') @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