change the way the user is created after a cas login
authorymh <ymh.work@gmail.com>
Wed, 16 Sep 2015 21:41:11 +0200
changeset 142 8d5035e5adaf
parent 141 c83cc2499cea
child 143 f0d620be6ee2
change the way the user is created after a cas login
server/src/remie/apps.py
server/src/remie/cas.py
server/src/remie/signals.py
server/src/remieplt/__init__.py
server/src/remieplt/settings/__init__.py
--- a/server/src/remie/apps.py	Wed Sep 16 20:19:54 2015 +0200
+++ b/server/src/remie/apps.py	Wed Sep 16 21:41:11 2015 +0200
@@ -9,4 +9,4 @@
     verbose_name = 'REMIE'
 
     def ready(self):
-        pass
+        import remie.signals 
--- a/server/src/remie/cas.py	Wed Sep 16 20:19:54 2015 +0200
+++ b/server/src/remie/cas.py	Wed Sep 16 21:41:11 2015 +0200
@@ -1,5 +1,3 @@
-from django.conf import settings
-from django.contrib.auth import get_user_model
 from django.utils.six.moves import urllib_parse
 from django.utils.six.moves.urllib_request import urlopen, Request
 from django_cas_ng.cas import CASClientV2
@@ -49,30 +47,3 @@
                 return None, None, None
         finally:
             page.close()
-
-    def get_or_create_user(self, username, attributes):
-        """get or create a user
-        Return (created, user).
-        The returned user can be `None`.
-        """
-        if not username:
-            return None, False
-
-        User = get_user_model()
-
-        if attributes is None:
-            attributes = {}
-
-        try:
-            user = User.objects.get(**{User.USERNAME_FIELD: username})
-            created = False
-        except User.DoesNotExist:
-            # check if we want to create new users, if we don't fail auth
-            create = getattr(settings, 'CAS_CREATE_USER', True)
-            if not create:
-                return None, False
-            # user will have an "unusable" password
-            user = User.objects.create_user(username=username, password='', first_name=attributes.get('first_name',''), last_name=attributes.get('last_name', ''))
-            user.save()
-            created = True
-        return created, user
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/remie/signals.py	Wed Sep 16 21:41:11 2015 +0200
@@ -0,0 +1,22 @@
+from django.conf import settings
+from django.contrib.auth.models import Group
+from django.dispatch import receiver
+from django_cas_ng.signals import cas_user_authenticated
+
+@receiver(cas_user_authenticated)
+def update_created_user(sender, **kwargs):
+
+    created = kwargs.get('created', False)
+    user = kwargs.get('user', None)
+    attributes = kwargs.get('attributes', {})
+
+    if not created or not user:
+        return
+
+    user.first_name = attributes.get('first_name','')
+    user.last_name = attributes.get('last_name', '')
+    cas_user_group_name = getattr(settings, 'CAS_USER_DEFAULT_GROUP', None)
+    if cas_user_group_name and cas_user_group_name not in [g.name for g in user.groups.all()]:
+        cas_user_group, _ = Group.objects.get_or_create(name=cas_user_group_name)
+        user.groups.add(cas_user_group)
+    user.save()
--- a/server/src/remieplt/__init__.py	Wed Sep 16 20:19:54 2015 +0200
+++ b/server/src/remieplt/__init__.py	Wed Sep 16 21:41:11 2015 +0200
@@ -1,4 +1,4 @@
-VERSION = (0, 0, 19, "final", 0)
+VERSION = (0, 0, 20, "final", 0)
 
 VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION[:2])))
 
--- a/server/src/remieplt/settings/__init__.py	Wed Sep 16 20:19:54 2015 +0200
+++ b/server/src/remieplt/settings/__init__.py	Wed Sep 16 21:41:11 2015 +0200
@@ -198,6 +198,7 @@
 
 CAS_URLPARAMETER_NAME = "casticket"
 CAS_VERSION = "remie.cas.CASClientRemie"
+CAS_USER_DEFAULT_GROUP = "casuser"
 
 SOCIAL_AUTH_COMPLETE_URL_NAME  = 'complete'
 SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'associate_complete'