|
|
(24 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Расширение]]/[[Доступ к ejudge из программ на Питоне]]/[[Python: Работа с базой пользователей]]/[[Python: Запросы к базе пользователей]].
| + | [[Category:Deleted]] |
− | | |
− | === Получение информации о пользователях ===
| |
− | | |
− | ==== privListAllUsers ====
| |
− | | |
− | Метод privListAllUsers позволяет получить список всех пользователей в базе пользователей.
| |
− | str = clnt.privListAllUsers()
| |
− | При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая список всех пользователей в формате XML.
| |
− | | |
− | ==== privListContestUsers ====
| |
− | | |
− | Метод privListContestUsers позволяет получить список всех пользователей, зарегистрированных на заданный турнир.
| |
− | str = clnt.privListContestUsers([[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая список всех пользователей в формате XML.
| |
− | | |
− | ==== privGetContestUsers ====
| |
− | | |
− | Метод privGetContestUsers позволяет получить полную информацию о всех пользователях, зарегистрированных на заданный турнир.
| |
− | str = clnt.privGetContestUsers([[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая информацию о пользователях в формате XML.
| |
− | | |
− | ==== getUserInfo ====
| |
− | | |
− | Метод getUserInfo позволяет получить информацию о пользователе, авторизованном на данном подключении к серверу. Метод доступен непривилегированным пользователям.
| |
− | str = clnt.getUserInfo([[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая информацию о пользователях в формате XML.
| |
− | | |
− | ==== privGetUserInfo ====
| |
− | | |
− | Метод privGetUserInfo позволяет получить информацию о произвольном пользователе. Метод доступен только привилегированным пользователям.
| |
− | str = clnt.privGetUserInfo([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая информацию о пользователях в формате XML.
| |
− | | |
− | При получении общей информации (contest_id равен 0) у пользователя, выполняющего запрос, должен быть установлен глобальный бит полномочий GET_USER. При получении информации о турнире (contest_id больше 0) у пользователя, выполняющего запрос, должен быть установлен бит полномочий GET_USER либо глобальный, либо для данного турнира.
| |
− | | |
− | === Создание новых пользователей и удаление пользователей ===
| |
− | | |
− | ==== privCreateUser ====
| |
− | | |
− | Метод privCreateUser позволяет создать нового пользователя в базе пользователей.
| |
− | [[Python:user_id|user_id]] = clnt.privCreateUser([[Python:login|login]])
| |
− | login - это регистрационное има создаваемого пользователя. Логин может быть равен пустой строке или None, в этом случае логин для создаваемого пользователя будет сгенерирован автоматически по шаблону New_login, New_login_2 ...
| |
− | При ошибке выбрасывается исключение IOError. При успехе возвращается идентификатор нового пользователя.
| |
− | | |
− | Метод доступен только привилегированным пользователям, для которых установлен глобальный бит полномочий CREATE_USER.
| |
− | | |
− | ==== privDeleteUser ====
| |
− | | |
− | Метод позволяет удалить из базы пользователей указанного пользователя.
| |
− | privDeleteUser([[Python:user_id|user_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для удаления непривилегированных пользователей необходимо полномочие DELETE_USER. Для удаления привилегированных пользователей необходимо полномочие PRIV_DELETE_USER.
| |
− | | |
− | === Редактирование данных ===
| |
− | | |
− | ==== privEditField ====
| |
− | | |
− | Метод privEditField позволяет изменить поля данных пользователей.
| |
− | clnt.privEditField([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:serial|serial]], [[Python:field_str|field_str]], [[Python:value|value]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | ==== privDeleteField ====
| |
− | | |
− | Метод privDeleteField позволяет сбросить значение указанного поля.
| |
− | clnt.privDeleteField([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:serial|serial]], [[Python:field_str|field_str]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | ==== privCopyUserInfo ====
| |
− | | |
− | Метод privCopyUserInfo позволяет скопировать регистрационные данные пользователя из одного турнира в другой.
| |
− | clnt.privCopyUserInfo([[Python:user_id|user_id]], [[Python:contest_id|contest_id_from]], [[Python:contest_id|contest_id_to]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | ==== privCreateMember ====
| |
− | | |
− | Метод privCreateMember позволяет создать члена команды.
| |
− | [[Python:serial|serial]] = clnt.privCreateMember([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:role|role]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | При успешном завершении возвращается идентификатор нового члена команды.
| |
− | | |
− | ==== privDeleteMember ====
| |
− | | |
− | Метод privDeleteMember позволяет удалить члена команды.
| |
− | clnt.privDeleteMember([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:serial|serial]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | ==== privMoveMember ====
| |
− | | |
− | Метод privMoveMember позволяет изменить роль у указанного члена команды.
| |
− | clnt.privMoveMember([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:serial|serial]], [[Python:role|new_role]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | === Регистрация на турниры ===
| |
− | | |
− | ==== privRegisterContest ====
| |
− | | |
− | Метод позволяет зарегистрировать указанного пользователя на указанный турнир.
| |
− | clnt.privRegisterContest([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]])
| |
− | При выполнении запроса проверются ограничения на IP-адрес и сроки
| |
− | регистрации.
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для регистрации непривилегированных пользователей необходимо полномочие CREATE_REG. Для регистрации привилегированных пользователей необходимо полномочие PRIV_CREATE_REG.
| |
− | | |
− | ==== privForcedRegisterContest ====
| |
− | | |
− | Метод позволяет зарегистрировать указанного пользователя на указанный турнир.
| |
− | clnt.privForcedRegisterContest([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При выполнении запроса не проверются ограничения на IP-адрес и сроки
| |
− | регистрации.
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для регистрации непривилегированных пользователей необходимо полномочие CREATE_REG. Для регистрации привилегированных пользователей необходимо полномочие PRIV_CREATE_REG.
| |
− | | |
− | ==== privChangeContestReg ====
| |
− | | |
− | Метод позволяет изменить флаги регистрации на турнир для указанного
| |
− | пользователя.
| |
− | clnt.privChangeContestReg([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:status_str|status_str]], [[Python:cmd_str|cmd_str]], [[Python:regflags|regflags]])
| |
− | Если status_str равен None, то статус регистрации не изменяется.
| |
− | Если cmd_str равен None, то флаги регистрации не изменяются.
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции необходимо полномочие EDIT_REG для указанного турнира.
| |
− | Если user_id - привилегированный пользователь, необходимо полномочие PRIV_EDIT_REG.
| |
− | | |
− | === Проверка пользователей ===
| |
− | | |
− | ==== privLookupUser ====
| |
− | | |
− | Метод privLookupUser позволяет определить существование заданного пользователя.
| |
− | res = clnt.privLookupUser([[Python:login|login]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | Если пользователь с указанным регистрационным именем не существует,
| |
− | возвращается значение None.
| |
− | Если пользователь существует, возвращается словарь:
| |
− | {'user_id':[[Python:user_id|user_id]], 'name':[[Python:name|name]]}
| |
− | | |
− | Для выполнения операции необходимо полномочие LIST_ALL_USERS базы пользователей или LIST_CONTEST_USERS для указанного турнира.
| |
− | | |
− | ==== privLookupUserId ====
| |
− | | |
− | Метод privLookupUserId позволяет определить существование заданного пользователя.
| |
− | res = clnt.privLookupUserId([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | Если пользователь с указанным идентификатором не существует,
| |
− | возвращается значение None.
| |
− | Если пользователь существует, возвращается словарь:
| |
− | {'login':[[Python:login|login]], 'name':[[Python:name|name]]}
| |
− | | |
− | Для выполнения операции необходимо полномочие LIST_ALL_USERS базы пользователей или LIST_CONTEST_USERS для указанного турнира.
| |
− | | |
− | === Операции с паролями ===
| |
− | | |
− | ==== privSetPassword ====
| |
− | | |
− | Метод позволяет установить новый регистрационный пароль для пользователя.
| |
− | clnt.privSetPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:password|oldpwd]], [[Python:password|newpwd]])
| |
− | Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции необходимо полномочие CONTROL_CONTEST для базы пользователей.
| |
− | | |
− | FIXME: а почему???
| |
− | | |
− | FIXME: зачем contest_id???
| |
− | | |
− | ==== privSetContestPassword ====
| |
− | | |
− | Метод позволяет установить новый турнирный пароль для пользователя.
| |
− | clnt.privSetContestPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:password|oldpwd]], [[Python:password|newpwd]])
| |
− | Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции необходимо полномочие CONTROL_CONTEST для базы пользователей.
| |
− | | |
− | FIXME: а почему???
| |
− | | |
− | ==== privGenerateRandomPassword ====
| |
− | | |
− | Метод позволяет сгенерировать новый случайный регистрационный пароль.
| |
− | Длина случайного пароля - 8 символов.
| |
− | clnt.privGenerateRandomPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Необходимо полномочие EDIT_USER для базы пользователей, если пользователь user_id непривилегированный, и полномочие PRIV_EDIT_USER для базы пользователей, если пользователь user_id привилегированный.
| |
− | | |
− | FIXME: contest_id не нужен?
| |
− | | |
− | FIXME: реализовать проверку прав как описано.
| |
− | | |
− | ==== privGenerateRandomContestPassword ====
| |
− | | |
− | Метод позволяет сгенерировать новый случайный турнирный пароль.
| |
− | Длина случайного пароля - 8 символов.
| |
− | clnt.privGenerateRandomContestPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Если пользователь user_id непривилегированный, необходимо полномочие EDIT_USER для базы пользователей или для указанного турнира. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_USER для базы пользователей или для указаноного турнира.
| |
− | | |
− | FIXME: реализовать проверку прав как описано.
| |
− | | |
− | ==== privCopyContestPasswordToPassword ====
| |
− | | |
− | Метод позволяет скопировать турнирный пароль в регистрационный пароль.
| |
− | clnt.privCopyContestPasswordToPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Необходимо полномочие GET_USER для базы пользователей или для указанного турнира.
| |
− | Если пользователь user_id непривилегированный, необходимо полномочие EDIT_USER для базы пользователей. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_USER для базы пользователей.
| |
− | | |
− | FIXME: реализовать проверку прав как описано.
| |
− | | |
− | ==== privCopyPasswordToContestPassword ====
| |
− | | |
− | Метод позволяет скопировать турнирный пароль в регистрационный пароль.
| |
− | clnt.privCopyPasswordToContestPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Необходимо полномочие GET_USER для базы пользователей или для указанного турнира.
| |
− | Если пользователь user_id непривилегированный, необходимо полномочие EDIT_USER для базы пользователей или для указанного турнира. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_USER для базы пользователей или для указанного турнира.
| |
− | | |
− | FIXME: реализовать проверку прав как описано.
| |
− | | |
− | ==== privClearContestPasswords ====
| |
− | | |
− | Метод позволяет очистить турнирные пароли в указанном турнире. Сбрасываются только турнирные пароли непривилегированных пользователей у которых не установлены никакие флаги режимов регистрации.
| |
− | clnt.privClearContestPasswords([[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Необходимо полномочие EDIT_USER для базы пользователей или для указанного турнира.
| |
− | | |
− | FIXME: реализовать проверку прав как описано.
| |
− | | |
− | ==== privGenerateRandomContestPasswords ====
| |
− | | |
− | Метод позволяет сгенерировать случайные турнирные пароли. Генерируются только турнирные пароли непривилегированных пользователей у которых не установлены никакие флаги режимов регистрации.
| |
− | clnt.privGenerateRandomContestPasswords([[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Необходимо полномочие EDIT_USER для базы пользователей или для указанного турнира и полномочие LIST_USERS для базы пользователей или указанного турнира.
| |
− | | |
− | ==== privGenerateRandomPasswords ====
| |
− | | |
− | Метод позволяет сгенерировать случайные регистрационные пароли. Генерируются только регистрационные пароли непривилегированных пользователей у которых не установлены никакие флаги режимов регистрации.
| |
− | clnt.privGenerateRandomPasswords([[Python:contest_id|contest_id]])
| |
− | При ошибке выбрасывается исключение IOError.
| |
− | | |
− | Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
| |
− | Необходимо полномочие EDIT_USER для базы пользователей и полномочие LIST_USERS для базы пользователей или для указанного турнира.
| |