summaryrefslogtreecommitdiff
path: root/postgresqleu/util/management/commands/sessioninfo.py
blob: bb81f609f66996d558039d92d874e57c3b978342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Dump interesting information out of django sessions
#
# (This is particarly interesting when digging through old stack trace emails..)
#
# Copyright (C) 2017, PostgreSQL Europe
from django.core.management.base import BaseCommand, CommandError
from django.contrib.sessions.models import Session
from django.contrib.auth.models import User


class Command(BaseCommand):
    help = 'Dump interesting information about a session'

    def add_arguments(self, parser):
        parser.add_argument('sessionid')

    def handle(self, *args, **options):
        try:
            session = Session.objects.get(session_key=options['sessionid']).get_decoded()
            uid = session.get('_auth_user_id')
            user = User.objects.get(pk=uid)

            print("Session {0}".format(options['sessionid']))
            print(" -- Logged in user --")
            print("Userid:   {0}".format(uid))
            print("Username: {0}".format(user.username))
            print("Name:     {0}".format(user.get_full_name()))
            print("Email:    {0}".format(user.email))
            # Remove known keys
            for k in ('_auth_user_id', '_auth_user_hash', '_auth_user_backend'):
                session.pop(k, None)
            if session:
                print(" -- Other session values --")
                for k, v in list(session.items()):
                    print("{0:20} {1}".format(k, v))

        except Session.DoesNotExist:
            raise CommandError('Session not found')
        except User.DoesNotExist:
            raise CommandError('Associated user not found')