Ejemplo n.º 1
0
Archivo: oss.py Proyecto: 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
        })
Ejemplo n.º 2
0
Archivo: oss.py Proyecto: hh-h/ossdev
    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
        })
Ejemplo n.º 3
0
Archivo: oss.py Proyecto: hh-h/ossdev
    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
        })