diff options
-rw-r--r-- | testapp/myauthentication/README | 12 | ||||
-rw-r--r-- | testapp/myauthentication/__init__.py | 0 | ||||
-rw-r--r-- | testapp/myauthentication/backend.py | 43 | ||||
-rw-r--r-- | testapp/myauthentication/models_spoken_tutorial.py | 26 | ||||
-rw-r--r-- | testapp/myauthentication/router.py | 12 | ||||
-rw-r--r-- | testapp/myauthentication/tests.py | 5 | ||||
-rw-r--r-- | testapp/myauthentication/urls.py | 0 | ||||
-rw-r--r-- | testapp/myauthentication/views.py | 1 | ||||
-rw-r--r-- | testapp/settings.py | 15 |
9 files changed, 114 insertions, 0 deletions
diff --git a/testapp/myauthentication/README b/testapp/myauthentication/README new file mode 100644 index 0000000..4aef3c5 --- /dev/null +++ b/testapp/myauthentication/README @@ -0,0 +1,12 @@ +To use authentication from external source, follow the instructions given below: + +1. In settings.py, + Uncomment AUTHENTICATION_BACKENDS = ('myauthentication.backend.MyBackend',) + Uncomment AUTHENTICATION_BACKENDS = ('myauthentication.backend.MyBackend',) + Enter database name, username and password for the spoken tutorial database. + +2. From login.html template comment 'New User? Sign-Up' link. + This is to be done so that user will register only from external + application and their details will be stored in the external database. + +3. In urls.py comment 'register' url pattern. diff --git a/testapp/myauthentication/__init__.py b/testapp/myauthentication/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/testapp/myauthentication/__init__.py diff --git a/testapp/myauthentication/backend.py b/testapp/myauthentication/backend.py new file mode 100644 index 0000000..721fe54 --- /dev/null +++ b/testapp/myauthentication/backend.py @@ -0,0 +1,43 @@ +import hashlib +from django.contrib.auth.models import User, check_password +from models_spoken_tutorial import MoodleUser + + +class MyBackend: + supports_object_permissions = False + supports_anonymous_user = False + supports_inactive_user = False + + def authenticate(self, username=None, password=None): + ''' + Checks username and password with external User table. + If valid then adds the user details in django User table + and authenticates the user. + ''' + try: + user = MoodleUser.objects.get(username=username) + pwd = user.password + uid = user.id + firstname = user.firstname + lastname = user.lastname + email_id = user.email + p = hashlib.md5(password) + pwd_valid = (pwd == p.hexdigest()) + if user and pwd_valid: + try: + user = User.objects.get(username=username) + return user + except Exception, e: + user = User(id=uid, username=username, password=pwd, + first_name=firstname, last_name=lastname, + email=email_id) + user.save() + return user + except Exception, e: + return None + + def get_user(self, user_id): + try: + return User.objects.get(pk=user_id) + except Exception, e: + return None diff --git a/testapp/myauthentication/models_spoken_tutorial.py b/testapp/myauthentication/models_spoken_tutorial.py new file mode 100644 index 0000000..d333400 --- /dev/null +++ b/testapp/myauthentication/models_spoken_tutorial.py @@ -0,0 +1,26 @@ +# This is an auto-generated Django model module. +# You'll have to do the following manually to clean this up: +# * Rearrange models' order +# * Make sure each model has one field with primary_key=True +# Feel free to rename the models, but don't rename db_table values or field names. +# +# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]' +# into your database. + +from django.db import models + +class MoodleUser(models.Model): + id = models.BigIntegerField(primary_key=True) + username = models.CharField(unique=True, max_length=300) + password = models.CharField(max_length=96) + idnumber = models.CharField(max_length=765) + firstname = models.CharField(max_length=300) + lastname = models.CharField(max_length=300) + email = models.CharField(max_length=300) + institution = models.CharField(max_length=120) + department = models.CharField(max_length=90) + address = models.CharField(max_length=210) + city = models.CharField(max_length=360) + country = models.CharField(max_length=6) + class Meta: + db_table = u'mdl_user' diff --git a/testapp/myauthentication/router.py b/testapp/myauthentication/router.py new file mode 100644 index 0000000..3d9c330 --- /dev/null +++ b/testapp/myauthentication/router.py @@ -0,0 +1,12 @@ +class MyDatabaseRouter(object): + """ + A router to manage database operations in the myauthentication app. + """ + def db_for_read(self, model, **hints): + """ + Point all read operations on myauthentication app to spoken + database. + """ + if model._meta.app_label == 'myauthentication': + return 'spoken_tutorial' + return None diff --git a/testapp/myauthentication/tests.py b/testapp/myauthentication/tests.py new file mode 100644 index 0000000..4103038 --- /dev/null +++ b/testapp/myauthentication/tests.py @@ -0,0 +1,5 @@ +#This file demonstrates writing tests using the unittest module. These will pass +#when you run "manage.py test". + +#Write appropriate tests for the application. + diff --git a/testapp/myauthentication/urls.py b/testapp/myauthentication/urls.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/testapp/myauthentication/urls.py diff --git a/testapp/myauthentication/views.py b/testapp/myauthentication/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/testapp/myauthentication/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/testapp/settings.py b/testapp/settings.py index 6015f0c..668eca0 100644 --- a/testapp/settings.py +++ b/testapp/settings.py @@ -23,6 +23,13 @@ SERVER_TIMEOUT = 2 # host.org/foo/exam set URL_ROOT='/foo' URL_ROOT = '' +# Authentication using other database table. +# Comment the line below if you want the authentication to be done +# using django user table. +#AUTHENTICATION_BACKENDS = ('myauthentication.backend.MyBackend',) + +# Router for database +#DATABASE_ROUTERS = ['myauthentication.router.MyDatabaseRouter',] ADMINS = ( # ('Your Name', 'your_email@example.com'), @@ -41,6 +48,14 @@ DATABASES = { 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. + }, + 'spoken_tutorial' : { + 'ENGINE' : 'django.db.backends.mysql', + 'NAME' : 'YOUR DATABASE', + 'USER' : 'YOUR USERNAME', + 'PASSWORD': 'YOUR PASSWORD', + 'HOST' :'', + 'PORT' :'', } } |