# -*- 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 += '
' + grp.dname + '[' + grp.name + ']
\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{sel}\n\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 = '
\nНовое имя пользователя\n\nНовое отображаемое имя
← Обратно к списку пользователей
' title, document = ('Панель управления[Переименовать пользователя "' + name + '"]', html) elif submit == 'Удалить': html = '
Действительно удалить пользователея "' + name + '"?
← Обратно к списку пользователей
' 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' html += '\n{rec}\n\n\n\n' html += '
Отображаемое имя||Имя пользователя' + dname + '[' + name + ']
\n
\n' html += '
\n
\n\n
\n
\n' return self.root.buildhtml('Панель управления[Пользователи]', html) @cherrypy.expose @require(member_of('admins')) def groups(self): grps = Groups() html = '
\n\n' html += '\n' for grp in grps.list: name = grp.name dname = grp.dname rec = '\n' if name == 'admins' or name == 'editors': html += '%s' % rec else: html += '\n{rec}\n\n\n\n' html += '
Отображаемое имя||Имя группы' + dname + '[' + name + ']
\n
\n' html += '
\n
\n\n
\n
\n' return self.root.buildhtml('Панель управления[Группы]', html) @cherrypy.expose @require(member_of('admins')) def newuser(self, err = ''): html = '
\n\n' html += '\n\n\n\n\n\n' html += '
Имя пользователяОтображаемое имяПароль
\n
\n' html += '
\n← Обратно в список пользователей\n\n
\n' return self.root.buildhtml('Панель управления[Пользователи]' + err, html) @cherrypy.expose @require(member_of('admins')) def newgroup(self, err = ''): html = '
\n\n' html += '\n\n\n\n\n' html += '
Имя группыОтображаемое имя
\n
\n' html += '
\n← Обратно в список групп\n\n
\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 += '
' + member.dname + '[' + member.name + ']
\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{sel}\n\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 = '
\nНовое имя группы\n\nНовое отображаемое имя
← Обратно к списку групп
' title, document = ('Панель управления[Переименовать группу "' + name + '"]' + err, html) elif submit == 'Удалить': html = '
Действительно удалить группу "' + name + '"?
← Обратно к списку групп
' 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)