from app.utils.priv_required import priv_required from flask_wtf import FlaskForm from wtforms import SubmitField from app.models.users import Member, Group, GroupPrivilege from app.models.privs import SpecialPrivilege from app.utils.render import render from app import app, db import yaml import os @app.route('/admin/groups', methods=['GET', 'POST']) @priv_required('access-admin-panel') def adm_groups(): class GroupRegenerationForm(FlaskForm): submit = SubmitField( 'Régénérer les groupes, privilèges, et comptes communs') form = GroupRegenerationForm() if form.validate_on_submit(): # Clean up groups for g in Group.query.all(): g.delete() # Create base groups groups = [] with open(os.path.join(app.root_path, "data", "groups.yaml")) as fp: groups = yaml.load(fp.read()) for g in groups: g["obj"] = Group(g["name"], g["css"], g["descr"]) db.session.add(g["obj"]) db.session.commit() for g in groups: for priv in g.get("privs", "").split(): db.session.add(GroupPrivilege(g["obj"], priv)) db.session.commit() # Clean up test members for name in "PlanèteCasio GLaDOS".split(): m = Member.query.filter_by(name=name).first() if m is not None: m.delete() # Create template members def addgroup(member, group): g = Group.query.filter_by(name=group).first() if g is not None: member.groups.append(g) m = Member('PlanèteCasio', 'contact@planet-casio.com', 'v5-forever') addgroup(m, "Compte communautaire") db.session.add(m) m = Member('GLaDOS', 'glados@aperture.science', 'v5-forever') m.xp = 1337 addgroup(m, "Robot") db.session.add(m) db.session.commit() db.session.add(SpecialPrivilege(m, "edit-posts")) db.session.add(SpecialPrivilege(m, "shoutbox-ban")) db.session.commit() users = Member.query.all() groups = Group.query.all() return render('admin/groups_privileges.html', users=users, groups=groups, form=form)