示例#1
0
文件: oss.py 项目: hh-h/ossdev
    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
        })