95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
|
# ⁻*- coding: utf-8 -*-
|
||
|
from django.conf import settings
|
||
|
from django.contrib.auth.models import User
|
||
|
try:
|
||
|
import MySQLdb
|
||
|
import MySQLdb.cursors
|
||
|
import crypt
|
||
|
except ImportError:
|
||
|
MySQLdb = None
|
||
|
class DummyAuthUser(object):
|
||
|
def __init__(self, username):
|
||
|
self.username = username
|
||
|
|
||
|
def test_password(self, password):
|
||
|
return False
|
||
|
|
||
|
def attributs(self):
|
||
|
return {}
|
||
|
|
||
|
|
||
|
class TestAuthUser(DummyAuthUser):
|
||
|
def __init__(self, username):
|
||
|
self.username = username
|
||
|
|
||
|
def test_password(self, password):
|
||
|
return self.username == "test" and password == "test"
|
||
|
|
||
|
def attributs(self):
|
||
|
return {'nom':'Nymous', 'prenom':'Ano', 'email':'anonymous@example.net'}
|
||
|
|
||
|
|
||
|
class MysqlAuthUser(DummyAuthUser):
|
||
|
user = None
|
||
|
def __init__(self, username):
|
||
|
mysql_config = {
|
||
|
"user": settings.CAS_SQL_USERNAME,
|
||
|
"passwd": settings.CAS_SQL_PASSWORD,
|
||
|
"db": settings.CAS_SQL_DBNAME,
|
||
|
"host": settings.CAS_SQL_HOST,
|
||
|
"charset":settings.CAS_SQL_DBCHARSET,
|
||
|
"cursorclass":MySQLdb.cursors.DictCursor
|
||
|
}
|
||
|
if not MySQLdb:
|
||
|
raise RuntimeError("Please install MySQLdb before using the MysqlAuthUser backend")
|
||
|
conn = MySQLdb.connect(**mysql_config)
|
||
|
curs = conn.cursor()
|
||
|
if curs.execute(settings.CAS_SQL_USER_QUERY, (username,)) == 1:
|
||
|
self.user = curs.fetchone()
|
||
|
super(MysqlAuthUser, self).__init__(username)
|
||
|
|
||
|
def test_password(self, password):
|
||
|
if not self.user:
|
||
|
return False
|
||
|
else:
|
||
|
if settings.CAS_SQL_PASSWORD_CHECK == "plain":
|
||
|
return password == self.user["password"]
|
||
|
elif settings.CAS_SQL_PASSWORD_CHECK == "crypt":
|
||
|
if self.user["password"].startswith('$'):
|
||
|
salt = '$'.join(self.user["password"].split('$', 3)[:-1])
|
||
|
return crypt.crypt(password, salt) == self.user["password"]
|
||
|
else:
|
||
|
return crypt.crypt(password, self.user["password"][:2]) == self.user["password"]
|
||
|
|
||
|
def attributs(self):
|
||
|
if not self.user:
|
||
|
return {}
|
||
|
else:
|
||
|
return self.user
|
||
|
|
||
|
|
||
|
class DjangoAuthUser(DummyAuthUser):
|
||
|
user = None
|
||
|
def __init__(self, username):
|
||
|
try:
|
||
|
self.user = User.objects.get(username=username)
|
||
|
except User.DoesNotExist:
|
||
|
pass
|
||
|
super(DjangoAuthUser, self).__init__(username)
|
||
|
|
||
|
|
||
|
def test_password(self, password):
|
||
|
if not self.user:
|
||
|
return False
|
||
|
else:
|
||
|
return self.user.check_password(password)
|
||
|
|
||
|
def attributs(self):
|
||
|
if not self.user:
|
||
|
return {}
|
||
|
else:
|
||
|
attr = {}
|
||
|
for field in self.user._meta.fields:
|
||
|
attr[field.attname]=getattr(self.user, field.attname)
|
||
|
return attr
|