aboutsummaryrefslogtreecommitdiffstats
path: root/bin/expire-sessions
diff options
context:
space:
mode:
Diffstat (limited to 'bin/expire-sessions')
-rwxr-xr-xbin/expire-sessions17
1 files changed, 15 insertions, 2 deletions
diff --git a/bin/expire-sessions b/bin/expire-sessions
index 2ec0a09da..351c4a483 100755
--- a/bin/expire-sessions
+++ b/bin/expire-sessions
@@ -26,13 +26,19 @@ my $rs = FixMyStreet::DB->resultset("Session");
# Delete expired sessions (including from in User object)
while (my $session = $rs->search({ expires => { '<', time() } })->next) {
- if (my $user = $session->user) {
+ my $user = $session->user;
+ my $expires = $session->expires;
+ if ($user) {
my $id = $session->id_code;
my $sessions = $user->get_extra_metadata('sessions');
my @new_sessions = grep { $_ ne $id } @$sessions;
update_user_sessions($user, \@new_sessions) if @new_sessions != @$sessions;
}
$session->delete;
+ if ($user) {
+ update_user_last_active($user, $expires);
+ $user->update;
+ }
}
if ($init) {
@@ -44,11 +50,19 @@ if ($init) {
my $sessions = $user->get_extra_metadata('sessions');
my @new_sessions = uniq @$sessions, $id;
update_user_sessions($user, \@new_sessions) if @new_sessions != @$sessions;
+ $user->update;
}
}
# ---
+sub update_user_last_active {
+ my ($user, $expires) = @_;
+ return unless $expires;
+ my $t = DateTime->from_epoch(epoch => $expires)->subtract(weeks => 4);
+ $user->set_last_active($t) if !$user->last_active || $user->last_active < $t;
+}
+
sub update_user_sessions {
my ($user, $sessions) = @_;
if (@$sessions) {
@@ -56,5 +70,4 @@ sub update_user_sessions {
} else {
$user->unset_extra_metadata('sessions');
}
- $user->update;
}