def POST(self): # noqa i = web.input(username='', password='', domain='') if not i.username or not i.password or not i.domain: msg = 'Одно или несколько полей не заполнено!' return dumps({ 'status': Status.ERROR, 'msg' : msg }) username = i.username.strip().lower() password = i.password.strip() # попробуем авторизоваться в Active Directory host = ldap_settings[i.domain]['host'] status = Ldap(host).authorize(username, password, host) # если сервер AD лежит, пробуем локальную авторизацию local_auth = False if status == Status.SERVER_DOWN: print('localauth {0}, st: {1}, host: {2}, domain: {3}'.format(username, status, host, i.domain)) status = H.authorize(db, username, password) local_auth = True # если статус неуспешный, вернем ошибку if status != Status.SUCCESS: print('authorize not success {0}, st: {1}, host: {2}, domain: {3}'.format(username, status, host, i.domain)) return dumps({ 'status': status }) # если входили через AD, сохраним пароль в базе # чтобы можно было пользоваться локальной авторизацией if not local_auth: H.store_passwd(db, username, password) session.logged = True session.name = username # получим права пользователя из базы data = H.get_user_privileges(db, username) if data: # заполним сессию пользователя правами H.fill_session(session, data) log.save_action(session.name, 'auth', 'Успешная авторизация') return dumps({ 'status': Status.SUCCESS })
def GET(self): # noqa i = web.input(user='') if not i.user: msg = 'Не указан пользователь!' return dumps({ 'status': Status.ERROR, 'msg' : msg }) user = H.check_username(i.user) if not user: msg = 'Неправильный формат имени пользователя!' return dumps({ 'status': Status.ERROR, 'msg' : msg }) log.save_action(session.name, 'admin', 'Просмотр прав {0}'.format(user)) # получим права пользователя из базы data = H.get_user_privileges(db, user) return dumps({ 'status' : Status.SUCCESS, 'data' : data })
def POST(self): # noqa log.save_action(session.name, 'admin', 'Попытка копирования прав в админке') i = web.input(user='', to='') user = H.check_username(i.user) if not user: msg = 'Не с кого копировать права!' print(msg) return dumps({ 'status': Status.ERROR, 'msg' : msg }) try: to = loads(i.to) except ValueError: msg = 'Не смог преобразовать входные данные!' print(msg) return dumps({ 'status': Status.ERROR, 'msg' : msg }) if not to: msg = 'Пустые входные данные!' print(msg) return dumps({ 'status': Status.ERROR, 'msg' : msg }) # обновим права в базе данных status = H.copy_user_privileges(db, user, to) if not status: msg = 'Не смог установить новые права пользователю!' print(msg) return dumps({ 'status': Status.ERROR, 'msg' : msg }) data = H.get_user_privileges(db, user) # обновим права самому себе, чтобы не перелогиниваться if session.name in to: for rule in H.RULES: session[rule] = data[rule] regions = data['regions'].split(',') session['regions'] = map(int, regions) # обновим сессии пользователей в базе status = H.copy_user_sessions(db, store, to, data) if not status: print('Не смог обновить сессии пользователям') log.save_action(session.name, 'admin', 'Скопировал права {0} пользователям {1}'.format(user, ', '.join(to))) return dumps({ 'status' : Status.SUCCESS })