web/lib/django_extensions/management/commands/print_user_for_session.py
changeset 3 526ebd3988b0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django_extensions/management/commands/print_user_for_session.py	Wed Jan 20 12:37:40 2010 +0100
@@ -0,0 +1,49 @@
+from django.core.management.base import BaseCommand, CommandError
+from django.contrib.auth.models import User
+from django.contrib.sessions.models import Session
+import re
+
+SESSION_RE = re.compile("^[0-9a-f]{20,40}$")
+
+class Command(BaseCommand):
+    help = ("print the user information for the provided session key. "
+            "this is very helpful when trying to track down the person who "
+            "experienced a site crash.")
+    args = "session_key"
+    label = 'session key for the user'
+
+    requires_model_validation = True
+    can_import_settings = True
+
+    def handle(self, *args, **options):
+        if len(args) > 1:
+            raise CommandError("extra arguments supplied")
+        if len(args) < 1:
+            raise CommandError("session_key argument missing")
+        key = args[0].lower()
+        if not SESSION_RE.match(key):
+            raise CommandError("malformed session key")
+        try:
+            session = Session.objects.get(pk=key)
+        except Session.DoesNotExist:
+            print "Session Key does not exist. Expired?"
+            return
+
+        data = session.get_decoded()
+        print 'Session to Expire:', session.expire_date
+        print 'Raw Data:', data
+        uid = data.get('_auth_user_id', None)
+        if uid is None:
+            print 'No user associated with session'
+            return
+        print "User id:", uid
+        try:
+            user = User.objects.get(pk=uid)
+        except User.DoesNotExist:
+            print "No user associated with that id."
+            return
+        for key in ['username', 'email', 'first_name', 'last_name']:
+            print key+': ' + getattr(user, key)
+
+
+