# -*- coding: utf-8 -*-
import cherrypy
from lybmods.lybformauth import member_of, name_is, require
from lybmods.lybclasses import Users, Groups, Usr, Grp
import lybmods.lybtools as lybtools
import lybmods.lybhtdata as lybhtdata
class Ctl:
_cp_config = {
'auth.require': []
}
def __init__(self, root):
self.root = root
@cherrypy.expose
def index(self):
raise cherrypy.HTTPRedirect("/")
@cherrypy.expose
def user(self, name = None, err = ''):
name = True and name or cherrypy.session.get(lybtools.SESSION_KEY, None)
html = ''
usr = Usr(name)
dname = usr.dname
grps = usr.groups
if len(grps):
html += '
Пользователь "' + dname + '[' + name + ']" находится в следующих группах:
'
for grp in grps:
if member_of('admins')():
html += '
\n'
else:
html += '
' + grp.dname + '[' + grp.name + ']
\n'
else: html += '
Пользователь "' + dname + '[' + name + ']" не находится ни в каких группах
'
if member_of('admins')():
l = '\n'
lo = '\n'
lopts = ''
fg = usr.fgroups
if len(fg):
for g in usr.fgroups:
lopts += lo.format(gname = g.name, dname = g.dname)
sel = l.format(lbody = lopts)
html += '
\n\n
\n'.format(sel = sel)
if member_of('admins')() or name_is(name)():
html += '
'
return self.root.buildhtml('Панель управления[Пользователь "' + name + '"]' + err, lybhtdata.user_body.format(name = name, groups = html))
@cherrypy.expose
def setpwd(self, name = None, password = ''):
if password == '': return self.user(name = name, err = '!!!Пароль не может быть пустым!!!')
name = True and name or cherrypy.session.get(lybtools.SESSION_KEY, None)
if not member_of('admins')() and not name_is(name)(): raise cherrypy.HTTPRedirect("/denied")
usr = Usr(name)
usr.setpwd(password)
return self.user(name, '<Пароль установлен>')
@cherrypy.expose
@require(member_of('admins'))
def useredit(self, submit = None, name = None, err = ''):
if submit and name:
usr = Usr(name)
dname = usr.dname
if submit == 'Переименовать':
html = '
'
title, document = ('Панель управления[Удалить пользователя "' + name + '"]', html)
return self.root.buildhtml(title + err, document)
@cherrypy.expose
@require(member_of('admins'))
def renameuser(self, name = None, newname = '', newdname = ''):
if newname == '': return self.useredit('Переименовать', name, '!!!Имя пользователя не может быть пустым!!!')
if newdname == '': newdname = newname
name = True and name or cherrypy.session.get(lybtools.SESSION_KEY, None)
usr = Usr(name)
dname = usr.dname
if name == newname and dname == newdname: return self.useredit('Переименовать', name, '!!!Данные не изменены!!!')
if name != newname:
if not usr.setname(newname):return self.useredit('Переименовать', name, '!!!Ошибка. Возможно пользователь с таким именем уже существует!!!')
if dname != newdname:
usr.setdname(newdname)
return self.users()
@cherrypy.expose
@require(member_of('admins'))
def deleteuser(self, name = None):
if not name: return
if name_is(name)(): return self.useredit('Удалить', name, '!!!Нельзя удалить своего же пользователея!!!')
usr = Usr(name)
if 'admins' in usr.groups and len(Grp('admins').members) == 1:
return self.useredit('Удалить', name, '!!!Нельзя удалить единственного администратора!!!')
try:
usr.delete()
except:
pass
return self.users()
@cherrypy.expose
@require(member_of('admins'))
def users(self):
usrs = Users()
html = '
\n
\n'
html += '
Отображаемое имя|
|Имя пользователя
\n'
for user in usrs.list:
name = user.name
dname = user.dname
rec = '
\n'
return self.root.buildhtml('Панель управления[Группы]' + err, html)
@cherrypy.expose
@require(member_of('admins'))
def createuser(self, name = '', dname = '', password = ''):
if name == '' or password == '': return self.newuser(err = '!!!Имя пользователя или пароль не могут быть пустыми!!!')
if dname == '': dname = name
usr = Usr(name)
if usr.new(password, dname): return self.user(name)
else: return self.newuser(err = '!!!Ошибка. Возможно пользователь с таким именем уже существует!!!')
@cherrypy.expose
@require(member_of('admins'))
def creategroup(self, name = '', dname = ''):
if name == '': return self.newuser(err = '!!!Имя группы не может быть пустыми!!!')
if dname == '': dname = name
grp = Grp(name)
if grp.new(dname): return self.group(name)
else: return self.newgroup(err = '!!!Ошибка. Возможно группа с таким именем уже существует!!!')
@cherrypy.expose
@require(member_of('admins'))
def group(self, name = None, err = ''):
if not name: return
html = ''
grp = Grp(name)
dname = grp.dname
members = grp.members
if len(members):
html += '
В группе "' + dname + '[' + name + ']" находятся следующие пользователи:
'
for member in members:
html += '
\n'
else: html += '
В группе "' + dname + '[' + name + ']" нет ни одного пользователя
'
l = '\n'
lo = '\n'
lopts = ''
nm = grp.notmembers
if len(nm):
for u in nm:
lopts += lo.format(uname = u.name, udname = u.dname)
sel = l.format(lbody = lopts)
html += '
\n\n
\n'.format(sel = sel)
return self.root.buildhtml('Панель управления[Группа "' + name + '"]' + err, lybhtdata.group_body.format(name = name, groups = html))
@cherrypy.expose
@require(member_of('admins'))
def groupedit(self, submit = None, name = None, err = ''):
if submit and name:
grp = Grp(name)
dname = grp.dname
if submit == 'Переименовать':
html = '
'
title, document = ('Панель управления[Удалить группу "' + name + '"]', html)
return self.root.buildhtml(title + err, document)
@cherrypy.expose
@require(member_of('admins'))
def renamegroup(self, name = None, newname = '', newdname = ''):
if newname == '': return self.groupedit('Переименовать', name, '!!!Имя группы не может быть пустым!!!')
if not name or name =='' or name == 'admins' or name == 'editors': return
if newdname == '': newdname = newname
grp = Grp(name)
dname = grp.dname
if name == newname and dname == newdname: return self.groupedit('Переименовать', name, '!!!Данные не изменены!!!')
if name != newname:
if not grp.setname(newname): return self.groupedit('Переименовать', name, '!!!Ошибка. Возможно группа с таким именем уже существует!!!')
if dname != newdname:
grp.setdname(newdname)
return self.group()
@cherrypy.expose
@require(member_of('admins'))
def deletegroup(self, name = None):
if not name or name =='' or name == 'admins' or name == 'editors': return
grp = Grp(name)
try:
grp.delete()
except:
pass
return self.groups()
@cherrypy.expose
@require(member_of('admins'))
def grpfromusr(self, uname = '', gname = ''):
if uname == '' or gname == '': return
grp = Grp(gname)
if gname == 'admins' and len(Grp('admins').members) == 1:
return self.user(uname, '!!!Нельзя удалить единственного пользователя из группы администраторов!!!')
grp.delmember(uname)
return self.user(uname)
@cherrypy.expose
@require(member_of('admins'))
def usrfromgrp(self, uname = '', gname = ''):
if uname == '' or gname == '': return
grp = Grp(gname)
if gname == 'admins' and len(Grp('admins').members) == 1:
return self.group(gname, '!!!Нельзя удалить единственного пользователя из группы администраторов!!!')
grp.delmember(uname)
return self.group(gname)
@cherrypy.expose
@require(member_of('admins'))
def grptousr(self, uname ='', gname = ''):
if uname == '' or gname == '': return
grp = Grp(gname)
if not grp.addmember(uname): return self.user(uname, '!!!Пользователь уже в группе "' + grp.dname + '[' + gname + ']"!!!')
return self.user(uname)
@cherrypy.expose
@require(member_of('admins'))
def usrtogrp(self, uname ='', gname = ''):
if uname == '' or gname == '': return
grp = Grp(gname)
if not grp.addmember(uname): return self.group(gname, '!!!Пользователь "' + Usr(uname).dname + '[' + uname + ']"уже в этой группе!!!')
return self.group(uname)