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

From EjudgeWiki
(Операции с паролями)
(Операции с паролями)
Line 158: Line 158:
  
 
Метод позволяет установить новый регистрационный пароль для пользователя.
 
Метод позволяет установить новый регистрационный пароль для пользователя.
  clnt.privSetPassword([[Python:user_id|user_id]], [[Python:contest_id|contest_id]], [[Python:password|oldpwd]], [[Python:password|newpwd]])
+
  clnt.privSetPassword([[Python:user_id|user_id]], [[Python:password|oldpwd]], [[Python:password|newpwd]])
 
Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.
 
Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.
  
Для выполнения операции необходимо полномочие CONTROL_CONTEST для базы пользователей.
+
Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
 +
Необходимо полномочие EDIT_PASSWD для базы пользователей, если пользователь user_id непривилегированный, и полномочие PRIV_EDIT_PASSWD для базы пользователей, если пользователь user_id привилегированный.
  
FIXME: а почему???
+
Если параметр user_id равен 0, операция выполняется над текущим пользователем. При выполнении операции для текущего пользователя никаких полномочий не требуется.
 
 
FIXME: зачем contest_id???
 
  
 
==== privSetContestPassword ====
 
==== privSetContestPassword ====
Line 173: Line 172:
 
Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.
 
Для изменения пароля необходимо указание старого пароля. В базе пользователей пароль будет хранится в виде хеша SHA1. При ошибке выбрасывается исключение IOError.
  
Для выполнения операции необходимо полномочие CONTROL_CONTEST для базы пользователей.
+
Для выполнения операции соединение должно быть авторизовано с уровнем привилегий ADMIN.
 +
Если пользователь user_id непривилегированный, необходимо полномочие EDIT_PASSWD для базы пользователей или для указанного турнира. Если пользователь user_id привилегированный, необходимо полномочие PRIV_EDIT_PASSWD для базы пользователей или для указаноного турнира. Если параметр contest_id равен 0, требуется только полномочие для базы пользователей.
  
FIXME: а почему???
+
Если параметр user_id равен 0, операция выполняется для текущего пользователя. При выполнении операции для текущего пользователя никаких полномочий не требуется.
  
 
==== privGenerateRandomPassword ====
 
==== privGenerateRandomPassword ====

Revision as of 14:12, 2 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.

privDeleteField

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

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

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

privCopyUserInfo

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

clnt.privCopyUserInfo(user_id, contest_id_from, contest_id_to)

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

privCreateMember

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

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

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

privDeleteMember

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

clnt.privDeleteMember(user_id, contest_id, serial)

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

privMoveMember

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

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

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

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

privRegisterContest

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

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

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

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

privForcedRegisterContest

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

clnt.privForcedRegisterContest(user_id, contest_id)

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

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

privChangeContestReg

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

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

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

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

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

privLookupUser

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

res = clnt.privLookupUser(login, contest_id)

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

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

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

privLookupUserId

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

res = clnt.privLookupUserId(user_id, contest_id)

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

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

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

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

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 для базы пользователей или для указанного турнира.