Add some docs using sphinx autodoc
This commit is contained in:
@ -26,55 +26,112 @@ from .models import FederatedUser
|
||||
|
||||
|
||||
class AuthUser(object):
|
||||
"""Authentication base class"""
|
||||
"""
|
||||
Authentication base class
|
||||
|
||||
:param unicode username: A username, stored in the :attr:`username` class attribute.
|
||||
"""
|
||||
|
||||
#: username used to instanciate the current object
|
||||
username = None
|
||||
|
||||
def __init__(self, username):
|
||||
self.username = username
|
||||
|
||||
def test_password(self, password):
|
||||
"""test `password` agains the user"""
|
||||
"""
|
||||
Tests ``password`` agains the user password.
|
||||
|
||||
:raises NotImplementedError: always. The method need to be implemented by subclasses
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def attributs(self):
|
||||
"""return a dict of user attributes"""
|
||||
"""
|
||||
The user attributes.
|
||||
|
||||
raises NotImplementedError: always. The method need to be implemented by subclasses
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class DummyAuthUser(AuthUser): # pragma: no cover
|
||||
"""A Dummy authentication class"""
|
||||
"""
|
||||
A Dummy authentication class. Authentication always fails
|
||||
|
||||
def __init__(self, username):
|
||||
super(DummyAuthUser, self).__init__(username)
|
||||
:param unicode username: A username, stored in the :attr:`username<AuthUser.username>`
|
||||
class attribute. There is no valid value for this attribute here.
|
||||
"""
|
||||
|
||||
def test_password(self, password):
|
||||
"""test `password` agains the user"""
|
||||
"""
|
||||
Tests ``password`` agains the user password.
|
||||
|
||||
:param unicode password: a clear text password as submited by the user.
|
||||
:return: always ``False``
|
||||
:rtype: bool
|
||||
"""
|
||||
return False
|
||||
|
||||
def attributs(self):
|
||||
"""return a dict of user attributes"""
|
||||
"""
|
||||
The user attributes.
|
||||
|
||||
:return: en empty :class:`dict`.
|
||||
:rtype: dict
|
||||
"""
|
||||
return {}
|
||||
|
||||
|
||||
class TestAuthUser(AuthUser):
|
||||
"""A test authentication class with one user test having
|
||||
alose test as password and some attributes"""
|
||||
"""
|
||||
A test authentication class only working for one unique user.
|
||||
|
||||
def __init__(self, username):
|
||||
super(TestAuthUser, self).__init__(username)
|
||||
:param unicode username: A username, stored in the :attr:`username<AuthUser.username>`
|
||||
class attribute. The uniq valid value is ``settings.CAS_TEST_USER``.
|
||||
"""
|
||||
|
||||
def test_password(self, password):
|
||||
"""test `password` agains the user"""
|
||||
"""
|
||||
Tests ``password`` agains the user password.
|
||||
|
||||
:param unicode password: a clear text password as submited by the user.
|
||||
:return: ``True`` if :attr:`username<AuthUser.username>` is valid and
|
||||
``password`` is equal to ``settings.CAS_TEST_PASSWORD``, ``False`` otherwise.
|
||||
:rtype: bool
|
||||
"""
|
||||
return self.username == settings.CAS_TEST_USER and password == settings.CAS_TEST_PASSWORD
|
||||
|
||||
def attributs(self):
|
||||
"""return a dict of user attributes"""
|
||||
return settings.CAS_TEST_ATTRIBUTES
|
||||
"""
|
||||
The user attributes.
|
||||
|
||||
:return: the ``settings.CAS_TEST_ATTRIBUTES`` :class:`dict` if
|
||||
:attr:`username<AuthUser.username>` is valid, an empty :class:`dict` otherwise.
|
||||
:rtype: dict
|
||||
"""
|
||||
if self.username == settings.CAS_TEST_USER:
|
||||
return settings.CAS_TEST_ATTRIBUTES
|
||||
else:
|
||||
return {}
|
||||
|
||||
|
||||
class MysqlAuthUser(AuthUser): # pragma: no cover
|
||||
"""A mysql auth class: authentication user agains a mysql database"""
|
||||
"""
|
||||
A mysql authentication class: authentication user agains a mysql database
|
||||
|
||||
:param unicode username: A username, stored in the :attr:`username<AuthUser.username>`
|
||||
class attribute. Valid value are fetched from the MySQL database set with
|
||||
``settings.CAS_SQL_*`` settings parameters using the query
|
||||
``settings.CAS_SQL_USER_QUERY``.
|
||||
"""
|
||||
#: Mysql user attributes as a :class:`dict` if the username is found in the database.
|
||||
user = None
|
||||
|
||||
def __init__(self, username):
|
||||
# see the connect function at
|
||||
# http://mysql-python.sourceforge.net/MySQLdb.html#functions-and-attributes
|
||||
# for possible mysql config parameters.
|
||||
mysql_config = {
|
||||
"user": settings.CAS_SQL_USERNAME,
|
||||
"passwd": settings.CAS_SQL_PASSWORD,
|
||||
@ -94,7 +151,14 @@ class MysqlAuthUser(AuthUser): # pragma: no cover
|
||||
super(MysqlAuthUser, self).__init__(username)
|
||||
|
||||
def test_password(self, password):
|
||||
"""test `password` agains the user"""
|
||||
"""
|
||||
Tests ``password`` agains the user password.
|
||||
|
||||
:param unicode password: a clear text password as submited by the user.
|
||||
:return: ``True`` if :attr:`username<AuthUser.username>` is valid and ``password`` is
|
||||
correct, ``False`` otherwise.
|
||||
:rtype: bool
|
||||
"""
|
||||
if self.user:
|
||||
return check_password(
|
||||
settings.CAS_SQL_PASSWORD_CHECK,
|
||||
@ -106,7 +170,14 @@ class MysqlAuthUser(AuthUser): # pragma: no cover
|
||||
return False
|
||||
|
||||
def attributs(self):
|
||||
"""return a dict of user attributes"""
|
||||
"""
|
||||
The user attributes.
|
||||
|
||||
:return: a :class:`dict` with the user attributes. Attributes may be :func:`unicode`
|
||||
or :class:`list` of :func:`unicode`. If the user do not exists, the returned
|
||||
:class:`dict` is empty.
|
||||
:rtype: dict
|
||||
"""
|
||||
if self.user:
|
||||
return self.user
|
||||
else:
|
||||
@ -114,7 +185,14 @@ class MysqlAuthUser(AuthUser): # pragma: no cover
|
||||
|
||||
|
||||
class DjangoAuthUser(AuthUser): # pragma: no cover
|
||||
"""A django auth class: authenticate user agains django internal users"""
|
||||
"""
|
||||
A django auth class: authenticate user agains django internal users
|
||||
|
||||
:param unicode username: A username, stored in the :attr:`username<AuthUser.username>`
|
||||
class attribute. Valid value are usernames of django internal users.
|
||||
"""
|
||||
#: a django user object if the username is found. The user model is retreived
|
||||
#: using :func:`django.contrib.auth.get_user_model`.
|
||||
user = None
|
||||
|
||||
def __init__(self, username):
|
||||
@ -126,14 +204,27 @@ class DjangoAuthUser(AuthUser): # pragma: no cover
|
||||
super(DjangoAuthUser, self).__init__(username)
|
||||
|
||||
def test_password(self, password):
|
||||
"""test `password` agains the user"""
|
||||
"""
|
||||
Tests ``password`` agains the user password.
|
||||
|
||||
:param unicode password: a clear text password as submited by the user.
|
||||
:return: ``True`` if :attr:`user` is valid and ``password`` is
|
||||
correct, ``False`` otherwise.
|
||||
:rtype: bool
|
||||
"""
|
||||
if self.user:
|
||||
return self.user.check_password(password)
|
||||
else:
|
||||
return False
|
||||
|
||||
def attributs(self):
|
||||
"""return a dict of user attributes"""
|
||||
"""
|
||||
The user attributes, defined as the fields on the :attr:`user` object.
|
||||
|
||||
:return: a :class:`dict` with the :attr:`user` object fields. Attributes may be
|
||||
If the user do not exists, the returned :class:`dict` is empty.
|
||||
:rtype: dict
|
||||
"""
|
||||
if self.user:
|
||||
attr = {}
|
||||
for field in self.user._meta.fields:
|
||||
@ -144,7 +235,16 @@ class DjangoAuthUser(AuthUser): # pragma: no cover
|
||||
|
||||
|
||||
class CASFederateAuth(AuthUser):
|
||||
"""Authentication class used then CAS_FEDERATE is True"""
|
||||
"""
|
||||
Authentication class used then CAS_FEDERATE is True
|
||||
|
||||
:param unicode username: A username, stored in the :attr:`username<AuthUser.username>`
|
||||
class attribute. Valid value are usernames of
|
||||
:class:`FederatedUser<cas_server.models.FederatedUser>` object.
|
||||
:class:`FederatedUser<cas_server.models.FederatedUser>` object are created on CAS
|
||||
backends successful ticket validation.
|
||||
"""
|
||||
#: a :class`FederatedUser<cas_server.models.FederatedUser>` object if ``username`` is found.
|
||||
user = None
|
||||
|
||||
def __init__(self, username):
|
||||
@ -157,7 +257,17 @@ class CASFederateAuth(AuthUser):
|
||||
super(CASFederateAuth, self).__init__(username)
|
||||
|
||||
def test_password(self, ticket):
|
||||
"""test `password` agains the user"""
|
||||
"""
|
||||
Tests ``password`` agains the user password.
|
||||
|
||||
:param unicode password: The CAS tickets just used to validate the user authentication
|
||||
against its CAS backend.
|
||||
:return: ``True`` if :attr:`user` is valid and ``password`` is
|
||||
a ticket validated less than ``settings.CAS_TICKET_VALIDITY`` secondes and has not
|
||||
being previously used for authenticated this
|
||||
:class:`FederatedUser<cas_server.models.FederatedUser>`. ``False`` otherwise.
|
||||
:rtype: bool
|
||||
"""
|
||||
if not self.user or not self.user.ticket:
|
||||
return False
|
||||
else:
|
||||
@ -168,7 +278,13 @@ class CASFederateAuth(AuthUser):
|
||||
)
|
||||
|
||||
def attributs(self):
|
||||
"""return a dict of user attributes"""
|
||||
"""
|
||||
The user attributes, as returned by the CAS backend.
|
||||
|
||||
:return: :obj:`FederatedUser.attributs<cas_server.models.FederatedUser.attributs>`.
|
||||
If the user do not exists, the returned :class:`dict` is empty.
|
||||
:rtype: dict
|
||||
"""
|
||||
if not self.user: # pragma: no cover (should not happen)
|
||||
return {}
|
||||
else:
|
||||
|
Reference in New Issue
Block a user