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 })