aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/Catalyst/Plugin/FixMyStreet/Session/StoreSessions.pm
blob: 30149fc2b847bc962bbf92546e97e4164a31b206 (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
package Catalyst::Plugin::FixMyStreet::Session::StoreSessions;
use Moose::Role;
use namespace::autoclean;

after set_authenticated => sub {
    my $c = shift;
    my $sessions = $c->user->get_extra_metadata('sessions');
    push @$sessions, $c->sessionid;
    $c->user->set_extra_metadata('sessions', $sessions);
    $c->user->set_last_active;
    $c->user->update;
};

before logout => sub {
    my $c = shift;
    if (my $user = $c->user) {
        my $sessions = $user->get_extra_metadata('sessions');
        $sessions = [ grep { $_ ne $c->sessionid } @$sessions ];
        @$sessions ? $user->set_extra_metadata('sessions', $sessions) : $user->unset_extra_metadata('sessions');
        $user->set_last_active;
        $user->update;
    }
};

__PACKAGE__;