removed old dB code and continued on group and user mgmt
This commit is contained in:
@@ -101,7 +101,7 @@ def create_or_retrieve_user_from_userinfo(userinfo):
|
||||
|
||||
user = User(email=email, first_name=userinfo.get("given_name", ""),
|
||||
last_name=userinfo.get("family_name", ""), external_user=True,
|
||||
groups=userinfo.get("memberOf", []))
|
||||
groups=user_groups)
|
||||
|
||||
app.logger.info("creating new user")
|
||||
|
||||
|
||||
@@ -10,12 +10,16 @@ from flask_restplus import fields, Resource
|
||||
|
||||
from backend import db
|
||||
from backend.api import api_group
|
||||
from backend.models.user_model import User, 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.')
|
||||
})
|
||||
|
||||
|
||||
@@ -57,7 +61,7 @@ class GroupResource(Resource):
|
||||
return group
|
||||
api_group.abort(404)
|
||||
|
||||
@api_group.route('/')
|
||||
@api_group.route('')
|
||||
class GroupList(Resource):
|
||||
@jwt_required
|
||||
@api_group.doc('groups')
|
||||
@@ -70,7 +74,7 @@ class GroupList(Resource):
|
||||
return Group.get_all()
|
||||
|
||||
@jwt_required
|
||||
@api_group.doc('create_todo')
|
||||
@api_group.doc('create_group')
|
||||
@api_group.expect(group_model)
|
||||
@api_group.marshal_with(group_model, code=201)
|
||||
def post(self):
|
||||
|
||||
@@ -16,16 +16,22 @@ from backend.api import api_bp, api_user
|
||||
from backend.auth import oidc_auth
|
||||
from backend.models.user_model import User, Group
|
||||
|
||||
user = api_user.model('User', {
|
||||
|
||||
|
||||
user_model = api_user.model('User', {
|
||||
'id': fields.String(required=True, description='The user\'s identifier'),
|
||||
'first_name': fields.String(required=True, description='The user\'s first name'),
|
||||
'last_name': fields.String(required=True, description='The user\'s last name'),
|
||||
'email': fields.String(required=True, description='The user\'s email address'),
|
||||
'nickname': fields.String(required=False, description='The user\'s nick name'),
|
||||
'groups': fields.List(fields.Nested({'name': fields.String()}), required=False, description='Group memberships.'),
|
||||
})
|
||||
|
||||
|
||||
@api_user.route('/profile', methods=['GET'])
|
||||
class Profile(Resource):
|
||||
@jwt_auth.login_required
|
||||
@api_user.marshal_list_with(user)
|
||||
@api_user.marshal_list_with(user_model)
|
||||
def get(self):
|
||||
"""Get infos about logged in user."""
|
||||
current_user_id = get_jwt_identity()
|
||||
@@ -33,7 +39,7 @@ class Profile(Resource):
|
||||
return User.get_by_identifier(current_user_id)
|
||||
|
||||
|
||||
@api_user.route('/')
|
||||
@api_user.route('')
|
||||
class UserList(Resource):
|
||||
"""
|
||||
This is a test class.
|
||||
@@ -41,7 +47,7 @@ class UserList(Resource):
|
||||
#@jwt_auth.login_required
|
||||
@jwt_required
|
||||
@api_user.doc('users')
|
||||
@api_user.marshal_list_with(user)
|
||||
@api_user.marshal_list_with(user_model)
|
||||
def get(self):
|
||||
"""
|
||||
just a test!
|
||||
@@ -51,6 +57,16 @@ class UserList(Resource):
|
||||
app.logger.info(current_user)
|
||||
return User.get_all()
|
||||
|
||||
@jwt_required
|
||||
@api_user.doc('create_group')
|
||||
@api_user.expect(user_model)
|
||||
@api_user.marshal_with(user_model, code=201)
|
||||
def post(self):
|
||||
user = User(**api_user.payload)
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
return user
|
||||
|
||||
|
||||
@api_user.route('/<id>')
|
||||
@api_user.param('id', 'The user identifier')
|
||||
@@ -58,7 +74,7 @@ class UserList(Resource):
|
||||
class UserResource(Resource):
|
||||
@jwt_auth.login_required
|
||||
@api_user.doc('get_user')
|
||||
@api_user.marshal_with(user)
|
||||
@api_user.marshal_with(user_model)
|
||||
def get(self, id):
|
||||
"""Fetch a user given its identifier"""
|
||||
user = User.get_by_id(id)
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
from sqlalchemy import create_engine, MetaData
|
||||
from sqlalchemy.orm import scoped_session, sessionmaker
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
|
||||
db_session = scoped_session(sessionmaker(autocommit=False,
|
||||
autoflush=False,
|
||||
bind=engine))
|
||||
Base = declarative_base()
|
||||
Base.query = db_session.query_property()
|
||||
metadata = MetaData()
|
||||
|
||||
|
||||
def init_db():
|
||||
# import all modules here that might define models so that
|
||||
# they will be registered properly on the metadata. Otherwise
|
||||
# you will have to import them first before calling init_db()
|
||||
import backend.app.models.user
|
||||
import backend.app.models.lock
|
||||
metadata.create_all(bind=engine)
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from migrate.versioning import api
|
||||
from backend.config import SQLALCHEMY_DATABASE_URI
|
||||
from backend.config import SQLALCHEMY_MIGRATE_REPO
|
||||
from backend import db
|
||||
import os.path
|
||||
db.create_all()
|
||||
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
|
||||
api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
|
||||
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
else:
|
||||
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from migrate.versioning import api
|
||||
from backend.config import SQLALCHEMY_DATABASE_URI
|
||||
from backend.config import SQLALCHEMY_MIGRATE_REPO
|
||||
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
api.downgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, v - 1)
|
||||
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
print('Current database version: ' + str(v))
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import imp
|
||||
from migrate.versioning import api
|
||||
from backend import db
|
||||
from backend.config import SQLALCHEMY_DATABASE_URI
|
||||
from backend.config import SQLALCHEMY_MIGRATE_REPO
|
||||
|
||||
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
migration = SQLALCHEMY_MIGRATE_REPO + ('/versions/%03d_migration.py' % (v+1))
|
||||
tmp_module = imp.new_module('old_model')
|
||||
old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
exec(old_model, tmp_module.__dict__)
|
||||
extra_imports = 'import datetime\n' # your imports
|
||||
script = extra_imports + api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata)
|
||||
open(migration, "wt").write(script)
|
||||
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
print('New migration saved as ' + migration)
|
||||
print('Current database version: ' + str(v))
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from backend import db
|
||||
from backend.models import example_model, user_model, post_model
|
||||
|
||||
user = user_model.User(nickname="tobi", email="privat@t-kurze.de")
|
||||
user.set_password("abcxyz")
|
||||
db.session.add(user)
|
||||
|
||||
example_data = example_model.ExampleDataItem(name="tolles data item", mac="12:34:56:78:90:AB")
|
||||
db.session.add(example_data)
|
||||
|
||||
db.session.commit()
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from migrate.versioning import api
|
||||
from backend.config import SQLALCHEMY_DATABASE_URI
|
||||
from backend.config import SQLALCHEMY_MIGRATE_REPO
|
||||
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||
print('Current database version: ' + str(v))
|
||||
@@ -0,0 +1,6 @@
|
||||
"""
|
||||
Import all models...
|
||||
"""
|
||||
from backend.models.example_model import *
|
||||
from backend.models.user_model import *
|
||||
from backend.models.post_model import *
|
||||
|
||||
@@ -101,17 +101,10 @@ class User(UserMixin, db.Model):
|
||||
super(User, self).__init__(**kwargs)
|
||||
password = kwargs.get("password", None)
|
||||
external_user = kwargs.get("external_user", None)
|
||||
groups = kwargs.get("groups", None)
|
||||
if password is not None:
|
||||
self.password = sha256_crypt.encrypt(password)
|
||||
if external_user is not None:
|
||||
self.external_user = external_user
|
||||
if groups is not None:
|
||||
if isinstance(groups, list):
|
||||
for g in groups:
|
||||
self.groups.append(g)
|
||||
elif isinstance(groups, str):
|
||||
self.groups.append(groups)
|
||||
|
||||
@staticmethod
|
||||
@login_manager.user_loader
|
||||
@@ -417,13 +410,15 @@ class BlacklistToken(db.Model):
|
||||
|
||||
|
||||
class Group(db.Model):
|
||||
id = db.Column(db.Integer, autoincrement=True, primary_key=True)
|
||||
name = db.Column(db.Unicode(63), unique=True, nullable=False)
|
||||
description = db.Column(db.Unicode(255), unique=False, nullable=True, default="")
|
||||
users = db.relationship('User', secondary=user_group_table, back_populates='groups')
|
||||
permissions = db.relationship('Permission', secondary=group_permission_table, back_populates='groups')
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super(Group, self).__init__(**kwargs)
|
||||
|
||||
id = db.Column(db.Integer, autoincrement=True, primary_key=True)
|
||||
name = db.Column(db.Unicode(63), unique=True, nullable=False)
|
||||
users = db.relationship('User', secondary=user_group_table, back_populates='groups')
|
||||
permissions = db.relationship('Permission', secondary=group_permission_table, back_populates='groups')
|
||||
|
||||
@staticmethod
|
||||
def get_by_name(name):
|
||||
@@ -457,6 +452,6 @@ class Permission(db.Model):
|
||||
"""Table containing permissions associated with groups."""
|
||||
id = db.Column(db.Integer, autoincrement=True, primary_key=True)
|
||||
name = db.Column(db.Unicode(63), unique=True, nullable=False)
|
||||
description = db.Column(db.Unicode(255))
|
||||
description = db.Column(db.Unicode(511))
|
||||
groups = db.relationship(Group, secondary=group_permission_table,
|
||||
back_populates='permissions')
|
||||
|
||||
Reference in New Issue
Block a user