]> Dogcows Code - chaz/chatty/blobdiff - lib/Chatty/Controller/Root.pm
implemented session tracking and authentication
[chaz/chatty] / lib / Chatty / Controller / Root.pm
index 4d4c979715ba050274f51ccdec317023ff7d0d3a..f3e5030b2a82b34e825482da718b92d6eecc8f2a 100644 (file)
@@ -16,7 +16,7 @@ Chatty::Controller::Root - Root Controller for Chatty
 
 =head1 DESCRIPTION
 
-[enter your description here]
+Implements all actions for this simple chat application.
 
 =head1 METHODS
 
@@ -27,10 +27,49 @@ The root page (/)
 =cut
 
 sub index :Path :Args(0) {
-    my ( $self, $c ) = @_;
+       my ( $self, $c ) = @_;
+}
+
+=head2 login
+
+Allow a user to login.
+
+=cut
+
+sub login :Local :Args(0) {
+       my ($self, $c) = @_;
+       if ($c->req->method eq 'POST' && exists($c->req->params->{handle})) {
+               eval {
+                       if ($c->authenticate({
+                               username => $c->req->params->{handle},
+                               password => $c->req->params->{password}
+                       })) {
+                               $c->change_session_id;
+                               my $user = $c->user->get('username');
+                               $c->flash->{message} = "Hi, $user! You are now logged in.";
+                               $c->response->redirect($c->uri_for('/'));
+                       }
+                       else {
+                               $c->flash->{error} = "Log-in failed! Try again, I guess.";
+                               $c->response->redirect($c->uri_for('login'));
+                       }
+               }
+       }
+}
+
+=head2 logout
+
+Log the user out.
+
+=cut
 
-    # Hello World
-    $c->response->body( $c->welcome_message );
+sub logout :Local :Args(0) {
+       my ($self, $c) = @_;
+       if ($c->user_exists) {
+               $c->logout;
+               $c->flash->{message} = "Goodbye! You have been logged out.";
+       }
+       $c->response->redirect($c->uri_for('/'));
 }
 
 =head2 default
@@ -40,9 +79,9 @@ Standard 404 error page
 =cut
 
 sub default :Path {
-    my ( $self, $c ) = @_;
-    $c->response->body( 'Page not found' );
-    $c->response->status(404);
+       my ($self, $c) = @_;
+       $c->response->body('Page not found.');
+       $c->response->status(404);
 }
 
 =head2 end
This page took 0.021809 seconds and 4 git commands to generate.