diff --git a/simple_sso/sso_server/migrations/0001_initial.py b/simple_sso/sso_server/migrations/0001_initial.py index f42586c..86d0aa3 100644 --- a/simple_sso/sso_server/migrations/0001_initial.py +++ b/simple_sso/sso_server/migrations/0001_initial.py @@ -19,16 +19,16 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(unique=True, max_length=100)), - ('private_key', models.CharField(default=simple_sso.sso_server.models.SecretKeyGenerator(b'private_key'), unique=True, max_length=64)), - ('public_key', models.CharField(default=simple_sso.sso_server.models.SecretKeyGenerator(b'public_key'), unique=True, max_length=64)), + ('private_key', models.CharField(default=simple_sso.sso_server.models.ConsumerSecretKeyGenerator(b'private_key'), unique=True, max_length=64)), + ('public_key', models.CharField(default=simple_sso.sso_server.models.ConsumerSecretKeyGenerator(b'public_key'), unique=True, max_length=64)), ], ), migrations.CreateModel( name='Token', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('request_token', models.CharField(default=simple_sso.sso_server.models.SecretKeyGenerator(b'request_token'), unique=True, max_length=64)), - ('access_token', models.CharField(default=simple_sso.sso_server.models.SecretKeyGenerator(b'access_token'), unique=True, max_length=64)), + ('request_token', models.CharField(default=simple_sso.sso_server.models.TokenSecretKeyGenerator(b'request_token'), unique=True, max_length=64)), + ('access_token', models.CharField(default=simple_sso.sso_server.models.TokenSecretKeyGenerator(b'access_token'), unique=True, max_length=64)), ('timestamp', models.DateTimeField(default=datetime.datetime.now)), ('redirect_to', models.CharField(max_length=255)), ('consumer', models.ForeignKey(related_name='tokens', to='sso_server.Consumer')), diff --git a/simple_sso/sso_server/models.py b/simple_sso/sso_server/models.py index 01fc062..4d91659 100644 --- a/simple_sso/sso_server/models.py +++ b/simple_sso/sso_server/models.py @@ -8,6 +8,7 @@ from ..utils import gen_secret_key +@deconstructible class SecretKeyGenerator(object): """ Helper to give default values to Client.secret and Client.key @@ -22,17 +23,12 @@ def __call__(self): key = gen_secret_key(64) return key - def __eq__(self, other): - return self.field == other.field - -@deconstructible class ConsumerSecretKeyGenerator(SecretKeyGenerator): def get_model(self): return Consumer -@deconstructible class TokenSecretKeyGenerator(SecretKeyGenerator): def get_model(self): return Token diff --git a/simple_sso/sso_server/server.py b/simple_sso/sso_server/server.py index d8df519..aa56827 100644 --- a/simple_sso/sso_server/server.py +++ b/simple_sso/sso_server/server.py @@ -5,6 +5,7 @@ from django.contrib.admin.options import ModelAdmin from django.core.urlresolvers import reverse from django.http import (HttpResponseForbidden, HttpResponseBadRequest, HttpResponseRedirect, QueryDict) +from django.utils import timezone from django.views.generic.base import View from itsdangerous import URLSafeTimedSerializer from simple_sso.sso_server.models import Token, Consumer @@ -39,10 +40,10 @@ class AuthorizeView(View): """ The client get's redirected to this view with the `request_token` obtained by the Request Token Request by the client application beforehand. - + This view checks if the user is logged in on the server application and if that user has the necessary rights. - + If the user is not logged in, the user is prompted to log in. """ server = None @@ -73,7 +74,7 @@ def token_timeout(self): return HttpResponseForbidden('Token timed out') def check_token_timeout(self): - delta = datetime.datetime.now() - self.token.timestamp + delta = timezone.now() - self.token.timestamp if delta > self.server.token_timeout: self.token.delete() return False