diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2018-05-14 11:53:40 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2018-05-23 18:55:09 +0100 |
commit | 910b1b8fef7e19b102459c97fc700a117d7a12aa (patch) | |
tree | 81d163980e8beb9c6dc05773ffbe52dc0ab5a36b | |
parent | 110a80eff22e852974bc5a6f90295803ef7e0de6 (diff) |
Refactor out some session functions.
-rwxr-xr-x | bin/expire-sessions | 27 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Session.pm | 21 | ||||
-rw-r--r-- | t/app/model/session.t | 14 |
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; |