aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/expire-sessions27
-rw-r--r--perllib/FixMyStreet/DB/Result/Session.pm21
-rw-r--r--t/app/model/session.t14
3 files changed, 38 insertions, 24 deletions
diff --git a/bin/expire-sessions b/bin/expire-sessions
index 8cfdd57e3..2ec0a09da 100755
--- a/bin/expire-sessions
+++ b/bin/expire-sessions
@@ -17,8 +17,6 @@ BEGIN {
use FixMyStreet::DB;
use Getopt::Long;
use List::Util qw(uniq);
-use MIME::Base64;
-use Storable;
GetOptions(
'init' => \my $init,
@@ -28,8 +26,8 @@ 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 = get_user($session)) {
- my $id = get_id($session);
+ if (my $user = $session->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;
@@ -41,8 +39,8 @@ if ($init) {
# Update sessions to make sure all present in User objects
print "Setting up sessions in user objects\n";
while (my $session = $rs->next) {
- my $user = get_user($session) or next;
- my $id = get_id($session);
+ my $user = $session->user or next;
+ my $id = $session->id_code;
my $sessions = $user->get_extra_metadata('sessions');
my @new_sessions = uniq @$sessions, $id;
update_user_sessions($user, \@new_sessions) if @new_sessions != @$sessions;
@@ -51,23 +49,6 @@ if ($init) {
# ---
-sub get_user {
- my $session = shift;
- return unless $session->session_data;
- my $data = Storable::thaw(MIME::Base64::decode($session->session_data));
- return unless $data->{__user};
- my $user = FixMyStreet::DB->resultset("User")->find($data->{__user}{id});
- return $user;
-}
-
-sub get_id {
- my $session = shift;
- my $id = $session->id;
- $id =~ s/^session://;
- $id =~ s/\s+$//;
- return $id;
-}
-
sub update_user_sessions {
my ($user, $sessions) = @_;
if (@$sessions) {
diff --git a/perllib/FixMyStreet/DB/Result/Session.pm b/perllib/FixMyStreet/DB/Result/Session.pm
index 4713c99eb..a478c5444 100644
--- a/perllib/FixMyStreet/DB/Result/Session.pm
+++ b/perllib/FixMyStreet/DB/Result/Session.pm
@@ -24,5 +24,24 @@ __PACKAGE__->set_primary_key("id");
# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:MVmCn4gLQWXTDIIaDHiVmA
-# You can replace this text with custom code or comments, and it will be preserved on regeneration
+use Storable;
+use MIME::Base64;
+
+sub id_code {
+ my $self = shift;
+ my $id = $self->id;
+ $id =~ s/^session://;
+ $id =~ s/\s+$//;
+ return $id;
+}
+
+sub user {
+ my $self = shift;
+ return unless $self->session_data;
+ my $data = Storable::thaw(MIME::Base64::decode($self->session_data));
+ return unless $data->{__user};
+ my $user = $self->result_source->schema->resultset("User")->find($data->{__user}{id});
+ return $user;
+}
+
1;
diff --git a/t/app/model/session.t b/t/app/model/session.t
new file mode 100644
index 000000000..f76533727
--- /dev/null
+++ b/t/app/model/session.t
@@ -0,0 +1,14 @@
+use FixMyStreet::TestMech;
+
+my $mech = FixMyStreet::TestMech->new;
+
+$mech->log_in_ok('test@example.com');
+
+my $session = FixMyStreet::DB->resultset("Session")->first;
+
+my $id = $session->id;
+$id =~ s/\s+$//;
+is $id, "session:" . $session->id_code;
+is $session->user->email, 'test@example.com';
+
+done_testing;