Difference between revisions of "Python: Запросы к базе пользователей"

From EjudgeWiki
(privCopyUserInfo)
(privCopyUserInfo)
 
Line 88: Line 88:
  
 
Для копирования пароль дополнительно требуется полномочия EDIT_PASSWD или PRIV_EDIT_PASSWD (в зависимости от привилегированности пользователя user_id) для турниров contest_id_from и contest_id_to. Если полномочий для копирования пароля недостаточно, операция выполняется, но копируются все поля, кроме поля team_passwd.
 
Для копирования пароль дополнительно требуется полномочия EDIT_PASSWD или PRIV_EDIT_PASSWD (в зависимости от привилегированности пользователя user_id) для турниров contest_id_from и contest_id_to. Если полномочий для копирования пароля недостаточно, операция выполняется, но копируются все поля, кроме поля team_passwd.
 +
 +
Пользователь считается привилегированным, если он привилегирован хотя бы в одном турнире или в базе пользователей глобально.
  
 
Если user_id равен 0, операция выполняется для текущего пользователя.
 
Если user_id равен 0, операция выполняется для текущего пользователя.

Latest revision as of 20:58, 3 December 2007

Навигация: Главная страница/Система ejudge/Расширение/Доступ к ejudge из программ на Питоне/Python: Работа с базой пользователей/Python: Запросы к базе пользователей.

Получение информации о пользователях

privListAllUsers

Метод privListAllUsers позволяет получить список всех пользователей в базе пользователей.

str = clnt.privListAllUsers()

При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая список всех пользователей в формате XML.

privListContestUsers

Метод privListContestUsers позволяет получить список всех пользователей, зарегистрированных на заданный турнир.

str = clnt.privListContestUsers(contest_id)

При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая список всех пользователей в формате XML.

privGetContestUsers

Метод privGetContestUsers позволяет получить полную информацию о всех пользователях, зарегистрированных на заданный турнир.

str = clnt.privGetContestUsers(contest_id)

При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая информацию о пользователях в формате XML.

getUserInfo

Метод getUserInfo позволяет получить информацию о пользователе, авторизованном на данном подключении к серверу. Метод доступен непривилегированным пользователям.

str = clnt.getUserInfo(contest_id)

При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая информацию о пользователях в формате XML.

privGetUserInfo

Метод privGetUserInfo позволяет получить информацию о произвольном пользователе. Метод доступен только привилегированным пользователям.

str = clnt.privGetUserInfo(user_id, contest_id)

При ошибке выбрасывается исключение IOError. При успехе возвращается строка str, содержащая информацию о пользователях в формате XML.

При получении общей информации (contest_id равен 0) у пользователя, выполняющего запрос, должен быть установлен глобальный бит полномочий GET_USER. При получении информации о турнире (contest_id больше 0) у пользователя, выполняющего запрос, должен быть установлен бит полномочий GET_USER либо глобальный, либо для данного турнира.

Создание новых пользователей и удаление пользователей

privCreateUser

Метод privCreateUser позволяет создать нового пользователя в базе пользователей.

user_id = clnt.privCreateUser(login)

login - это регистрационное има создаваемого пользователя. Логин может быть равен пустой строке или None, в этом случае логин для создаваемого пользователя будет сгенерирован автоматически по шаблону New_login, New_login_2 ... При ошибке выбрасывается исключение IOError. При успехе возвращается идентификатор нового пользователя.

Метод доступен только привилегированным пользователям, для которых установлен глобальный бит полномочий CREATE_USER.

privDeleteUser

Метод позволяет удалить из базы пользователей указанного пользователя.

privDeleteUser(user_id)

При ошибке выбрасывается исключение IOError.

Для удаления непривилегированных пользователей необходимо полномочие DELETE_USER. Для удаления привилегированных пользователей необходимо полномочие PRIV_DELETE_USER.

Редактирование данных

privEditField

Метод privEditField позволяет изменить поля данных пользователей.

clnt.privEditField(user_id, contest_id, serial, field_str, value)

При ошибке выбрасывается исключение IOError. По результатам выполнения операции может измениться значение флага Incomplete регистрации участника на турнир.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для измененмя поля "NN_PASSWD" необходимо полномочие EDIT_PASSWD для обычных и PRIV_EDIT_PASSWD для привилегированных пользователей уровня доступа к базе пользователей. Для изменения остальных полей "NN_*" необходимо полномочие EDIT_USER для обычных и PRIV_EDIT_USER для привилегированных пользователей уровня доступа к базе пользователей. Для изменения поля "NC_TEAM_PASSWD" необходимо полномочие EDIT_PASSWD для обычных и PRIV_EDIT_PASSWD для привилегированных пользователей уровня доступа к базе пользователей или указанному турниру. Для измененмя остальных полей "NC_*" и "NM_*" необходимо полномочие EDIT_USER для обычных и PRIV_EDIT_USER для привилегированных пользователей уровня доступа к базе пользователей или указанному турниру.

Если параметр user_id равен 0, операция выполняется над текущим пользователем. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privDeleteField

Метод privDeleteField позволяет очистить значение указанного поля.

clnt.privDeleteField(user_id, contest_id, serial, field_str)

При ошибке выбрасывается исключение IOError. По результатам выполнения операции может измениться значение флага Incomplete регистрации участника на турнир.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для очистки поля "NN_PASSWD" необходимо полномочие EDIT_PASSWD для обычных и PRIV_EDIT_PASSWD для привилегированных пользователей уровня доступа к базе пользователей. Для очистки остальных полей "NN_*" необходимо полномочие EDIT_USER для обычных и PRIV_EDIT_USER для привилегированных пользователей уровня доступа к базе пользователей. Для очистки поля "NC_TEAM_PASSWD" необходимо полномочие EDIT_PASSWD для обычных и PRIV_EDIT_PASSWD для привилегированных пользователей уровня доступа к базе пользователей или указанному турниру. Для очистки остальных полей "NC_*" и "NM_*" необходимо полномочие EDIT_USER для обычных и PRIV_EDIT_USER для привилегированных пользователей уровня доступа к базе пользователей или указанному турниру.

Если параметр user_id равен 0, операция выполняется над текущим пользователем. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privCopyUserInfo

Метод privCopyUserInfo позволяет скопировать регистрационные данные пользователя из одного турнира в другой.

clnt.privCopyUserInfo(user_id, contest_id_from, contest_id_to)

При ошибке выбрасывается исключение IOError. По результатам выполнения операции может измениться значение флага Incomplete регистрации участника на турнир.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для выполнения операции необходимы следующие полномочия:

  • GET_USER для турнира contest_id_from
  • EDIT_USER или PRIV_EDIT_USER для турнира contest_id_to в зависимости от того, является ли пользователь user_id привилегированным или нет

Для копирования пароль дополнительно требуется полномочия EDIT_PASSWD или PRIV_EDIT_PASSWD (в зависимости от привилегированности пользователя user_id) для турниров contest_id_from и contest_id_to. Если полномочий для копирования пароля недостаточно, операция выполняется, но копируются все поля, кроме поля team_passwd.

Пользователь считается привилегированным, если он привилегирован хотя бы в одном турнире или в базе пользователей глобально.

Если user_id равен 0, операция выполняется для текущего пользователя.

privCreateMember

Метод privCreateMember позволяет создать члена команды.

serial = clnt.privCreateMember(user_id, contest_id, role)

При ошибке выбрасывается исключение IOError. При успешном завершении возвращается идентификатор нового члена команды. По результатам выполнения операции может измениться значение флага Incomplete регистрации участника на турнир.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для выполнения операции над непривилегированным пользователем необходимо полномочие EDIT_USER для данного турнира. Для выполнения операции над привилегированными пользователями необходимо полномочие PRIV_EDIT_USER для данного турнира.

Если user_id равен 0, операция выполняется для текущего пользователя. Если номер турнира не равен 0, то для выполнения операции над текущим пользователем не требуется никаких полномочий.

privDeleteMember

Метод privDeleteMember позволяет удалить члена команды.

clnt.privDeleteMember(user_id, contest_id, serial)

При ошибке выбрасывается исключение IOError. По результатам выполнения операции может измениться значение флага Incomplete регистрации участника на турнир.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для выполнения операции над непривилегированным пользователем необходимо полномочие EDIT_USER для данного турнира. Для выполнения операции над привилегированными пользователями необходимо полномочие PRIV_EDIT_USER для данного турнира.

Если user_id равен 0, операция выполняется для текущего пользователя. Если номер турнира не равен 0, то для выполнения операции над текущим пользователем не требуется никаких полномочий.

privMoveMember

Метод privMoveMember позволяет изменить роль у указанного члена команды.

clnt.privMoveMember(user_id, contest_id, serial, new_role)

При ошибке выбрасывается исключение IOError. По результатам выполнения операции может измениться значение флага Incomplete регистрации пользователя на турнир.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для выполнения операции над непривилегированным пользователем необходимо полномочие EDIT_USER для данного турнира. Для выполнения операции над привилегированными пользователями необходимо полномочие PRIV_EDIT_USER для данного турнира.

Если user_id равен 0, операция выполняется для текущего пользователя. Если номер турнира не равен 0, то для выполнения операции над текущим пользователем не требуется никаких полномочий.

Регистрация на турниры

privRegisterContest

Метод позволяет зарегистрировать указанного пользователя на указанный турнир.

clnt.privRegisterContest(user_id, contest_id, ip_str, ssl_flag)

При выполнении запроса проверются ограничения на IP-адрес и сроки регистрации. При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для регистрации непривилегированных пользователей необходимо полномочие CREATE_REG для данного турнира. Для регистрации привилегированных пользователей необходимо полномочие PRIV_CREATE_REG для данного турнира.

Если user_id равен 0, операция выполняется для текущего пользователя. В этом случае он должен обладать полномочием PRIV_EDIT_REG.

privForcedRegisterContest

Метод позволяет зарегистрировать указанного пользователя на указанный турнир.

clnt.privForcedRegisterContest(user_id, contest_id)

При выполнении запроса не проверются ограничения на IP-адрес и сроки регистрации. При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для регистрации непривилегированных пользователей необходимо полномочие CREATE_REG для данного турнира. Для регистрации привилегированных пользователей необходимо полномочие PRIV_CREATE_REG для данного турнира.

Если user_id равен 0, операция выполняется для текущего пользователя. В этом случае он должен обладать полномочием PRIV_EDIT_REG.

privChangeContestReg

Метод позволяет изменить флаги регистрации на турнир для указанного пользователя.

clnt.privChangeContestReg(user_id, contest_id, status_str, cmd_str, regflags)

Если status_str равен None, то статус регистрации не изменяется. Если cmd_str равен None, то флаги регистрации не изменяются. При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Для удаления регистрации (параметр status_str равен "REMOVE") необходимо полномочие DELETE_REG в данном турнире для обычного пользователя и PRIV_DELETE_REG для привилегированного пользователя. Для выполнения прочих операций необходимо полномочие EDIT_REG для указанного турнира. Если user_id - привилегированный пользователь, необходимо полномочие PRIV_EDIT_REG.

Если user_id равен 0, операция выполняется для текущего пользователя. В этом случае он должен обладать полномочием PRIV_EDIT_REG.

Проверка пользователей

privLookupUser

Метод privLookupUser позволяет определить существование заданного пользователя.

res = clnt.privLookupUser(login, contest_id)

При ошибке выбрасывается исключение IOError. Если пользователь с указанным регистрационным именем не существует, возвращается значение None. Если пользователь существует, возвращается словарь:

{'user_id':user_id, 'name':name}

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Необходимо полномочие LIST_USERS для базы пользователей или указанного турнира. Если contest_id равен 0, требуется полномочие только для базы пользователей.

privLookupUserId

Метод privLookupUserId позволяет определить существование заданного пользователя.

res = clnt.privLookupUserId(user_id, contest_id)

При ошибке выбрасывается исключение IOError. Если пользователь с указанным идентификатором не существует, возвращается значение None. Если пользователь существует, возвращается словарь:

{'login':login, 'name':name}

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий не ниже JUDGE. Необходимо полномочие LIST_USERS для базы пользователей или указанного турнира. Если contest_id равен 0, требуется полномочие только для базы пользователей.

Если параметр user_id равен 0, операция выполняется над текущим пользователем. При выполнении операции для текущего пользователя никаких полномочий не требуется.

Операции с паролями

privSetPassword

Метод позволяет установить новый регистрационный пароль для пользователя.

clnt.privSetPassword(user_id, oldpwd, newpwd)

Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие EDIT_PASSWD для базы пользователей, если пользователь user_id непривилегированный, и полномочие PRIV_EDIT_PASSWD для базы пользователей, если пользователь user_id привилегированный.

Если параметр user_id равен 0, операция выполняется над текущим пользователем. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privSetContestPassword

Метод позволяет установить новый турнирный пароль для пользователя.

clnt.privSetContestPassword(user_id, contest_id, oldpwd, newpwd)

Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Если пользователь user_id непривилегированный, необходимо полномочие EDIT_PASSWD для базы пользователей или для указанного турнира. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_PASSWD для базы пользователей или для указаноного турнира. Если параметр contest_id равен 0, требуется только полномочие для базы пользователей.

Если параметр user_id равен 0, операция выполняется для текущего пользователя. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privGenerateRandomPassword

Метод позволяет сгенерировать новый случайный регистрационный пароль. Длина случайного пароля - 8 символов.

clnt.privGenerateRandomPassword(user_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие EDIT_PASSWD для базы пользователей, если пользователь user_id непривилегированный, и полномочие PRIV_EDIT_PASSWD для базы пользователей, если пользователь user_id привилегированный.

Если параметр user_id равен 0, операция выполняется над текущим пользователем. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privGenerateRandomContestPassword

Метод позволяет сгенерировать новый случайный турнирный пароль. Длина случайного пароля - 8 символов.

clnt.privGenerateRandomContestPassword(user_id, contest_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Если пользователь user_id непривилегированный, необходимо полномочие EDIT_PASSWD для базы пользователей или для указанного турнира. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_PASSWD для базы пользователей или для указаноного турнира. Если параметр contest_id равен 0, требуется только полномочие для базы пользователей.

Если параметр user_id равен 0, операция выполняется для текущего пользователя. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privCopyContestPasswordToPassword

Метод позволяет скопировать турнирный пароль в регистрационный пароль.

clnt.privCopyContestPasswordToPassword(user_id, contest_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие GET_USER для базы пользователей или для указанного турнира. Если пользователь user_id непривилегированный, необходимо полномочие EDIT_PASSWD для базы пользователей. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_PASSWD для базы пользователей. Если параметр contest_id равен 0, требуются только привилегии для базы пользователей.

Если параметр user_id равен 0, операция выполняется для текущего пользователя. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privCopyPasswordToContestPassword

Метод позволяет скопировать турнирный пароль в регистрационный пароль.

clnt.privCopyPasswordToContestPassword(user_id, contest_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие GET_USER для базы пользователей или для указанного турнира. Если пользователь user_id непривилегированный, необходимо полномочие EDIT_PASSWD для базы пользователей или для указанного турнира. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_PASSWD для базы пользователей или для указанного турнира. Если параметр contest_id равен 0, требуются только полномочия базы пользователей.

Если параметр user_id равен 0, операция выполняется для текущего пользователя. При выполнении операции для текущего пользователя никаких полномочий не требуется.

privClearContestPasswords

Метод позволяет очистить турнирные пароли в указанном турнире. Сбрасываются только турнирные пароли непривилегированных пользователей у которых не установлены никакие флаги режимов регистрации.

clnt.privClearContestPasswords(contest_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие EDIT_PASSWD для базы пользователей или для указанного турнира и полномочие LIST_USERS для базы пользователей или указанного турнира.

privGenerateRandomContestPasswords

Метод позволяет сгенерировать случайные турнирные пароли. Генерируются только турнирные пароли непривилегированных пользователей у которых не установлены никакие флаги режимов регистрации.

clnt.privGenerateRandomContestPasswords(contest_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие EDIT_PASSWD для базы пользователей или для указанного турнира и полномочие LIST_USERS для базы пользователей или указанного турнира.

privGenerateRandomPasswords

Метод позволяет сгенерировать случайные регистрационные пароли. Генерируются только регистрационные пароли непривилегированных пользователей у которых не установлены никакие флаги режимов регистрации.

clnt.privGenerateRandomPasswords(contest_id)

При ошибке выбрасывается исключение IOError.

Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN. Необходимо полномочие EDIT_PASSWD для базы пользователей и полномочие LIST_USERS для базы пользователей или для указанного турнира.