added / implemented group API
This commit is contained in:
@@ -5,36 +5,76 @@ For example: listing of available auth providers or registration of users.
|
||||
|
||||
Login through API does not start a new session, but instead returns JWT.
|
||||
"""
|
||||
import flask
|
||||
from datetime import datetime, timedelta
|
||||
import jwt
|
||||
from flask import request, jsonify, current_app, url_for
|
||||
from flask_jwt_extended import jwt_required
|
||||
from functools import wraps
|
||||
from random import randint
|
||||
from flask_restplus import fields, Resource
|
||||
|
||||
from flask_login import logout_user, login_user
|
||||
from typing import Iterable
|
||||
from werkzeug.routing import BuildError
|
||||
|
||||
from backend import db, app
|
||||
from backend.api import auth_api_bp, group_api_bp
|
||||
from backend.auth import AUTH_PROVIDERS, oidc_auth
|
||||
from backend import db
|
||||
from backend.api import api_group
|
||||
from backend.models.user_model import User, 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'),
|
||||
})
|
||||
|
||||
@group_api_bp.route('/<id>', methods=['GET'])
|
||||
@jwt_required
|
||||
def get_group():
|
||||
|
||||
user = create_or_retrieve_user_from_userinfo(flask.session['userinfo'])
|
||||
|
||||
return jsonify(user.to_dict())
|
||||
if user is None:
|
||||
return "Could not authenticate: could not find or create user.", 401
|
||||
if current_app.config.get("AUTH_RETURN_EXTERNAL_JWT", False):
|
||||
token = jwt.encode(flask.session['id_token'], current_app.config['SECRET_KEY'])
|
||||
else:
|
||||
token = create_jwt(user)
|
||||
return token
|
||||
@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_todo')
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user