73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
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)
|