-#!perl\r
-\r
-use strict;\r
-use warnings;\r
-use DBI;\r
-use File::Path;\r
-use FindBin;\r
-use Test::More;\r
-use lib "$FindBin::Bin/lib";\r
-\r
-BEGIN {\r
- eval { require DBD::SQLite }\r
- or plan skip_all =>\r
- "DBD::SQLite is required for this test";\r
-\r
- eval { require DBIx::Class }\r
- or plan skip_all =>\r
- "DBIx::Class is required for this test";\r
-\r
- plan tests => 14;\r
-\r
- $ENV{TESTAPP_DB_FILE} = "$FindBin::Bin/auth.db" unless exists($ENV{TESTAPP_DB_FILE});\r
-\r
- $ENV{TESTAPP_CONFIG} = {\r
- name => 'TestApp',\r
- authentication => {\r
- default_realm => "users",\r
- realms => {\r
- users => {\r
- credential => {\r
- 'class' => "Password",\r
- 'password_field' => 'password',\r
- 'password_type' => 'clear'\r
- },\r
- store => {\r
- 'class' => 'DBIx::Class',\r
- 'user_class' => 'TestApp::User',\r
- },\r
- },\r
- },\r
- },\r
- };\r
-\r
- $ENV{TESTAPP_PLUGINS} = [\r
- qw/Authentication/\r
- ];\r
-}\r
-\r
-use SetupDB;\r
-\r
-use Catalyst::Test 'TestApp';\r
-\r
-# log a user in\r
-{\r
- ok( my $res = request('http://localhost/user_login?username=joeuser&password=hackme'), 'request ok' );\r
- is( $res->content, 'joeuser logged in', 'user logged in ok' );\r
-}\r
-\r
-# invalid user\r
-{\r
- ok( my $res = request('http://localhost/user_login?username=foo&password=bar'), 'request ok' );\r
- is( $res->content, 'not logged in', 'user not logged in ok' );\r
-}\r
-\r
-# disabled user - no disable check\r
-{\r
- ok( my $res = request('http://localhost/user_login?username=spammer&password=broken'), 'request ok' );\r
- is( $res->content, 'spammer logged in', 'status check - disabled user logged in ok' );\r
-}\r
-\r
-# disabled user - should fail login\r
-{\r
- ok( my $res = request('http://localhost/notdisabled_login?username=spammer&password=broken'), 'request ok' );\r
- is( $res->content, 'not logged in', 'status check - disabled user not logged in ok' );\r
-}\r
-\r
-# log the user out\r
-{\r
- ok( my $res = request('http://localhost/user_logout'), 'request ok' );\r
- is( $res->content, 'logged out', 'user logged out ok' );\r
-}\r
-\r
-# searchargs test\r
-{\r
- ok( my $res = request('http://localhost/searchargs_login?email=nada%40mucho.net&password=much'), 'request ok' );\r
- is( $res->content, 'nuffin logged in', 'searchargs based login ok' );\r
-}\r
-\r
-# resultset test\r
-# searchargs test\r
-{\r
- ok( my $res = request('http://localhost/resultset_login?email=j%40cpants.org&password=letmein'), 'request ok' );\r
- is( $res->content, 'jayk logged in', 'resultset based login ok' );\r
-}\r
-\r
-\r
-# clean up\r
-unlink $ENV{TESTAPP_DB_FILE};\r
+#!perl
+
+use strict;
+use warnings;
+use DBI;
+use File::Path;
+use FindBin;
+use Test::More;
+use lib "$FindBin::Bin/lib";
+
+BEGIN {
+ eval { require DBD::SQLite }
+ or plan skip_all =>
+ "DBD::SQLite is required for this test";
+
+ eval { require DBIx::Class }
+ or plan skip_all =>
+ "DBIx::Class is required for this test";
+
+ plan tests => 15;
+
+ $ENV{TESTAPP_DB_FILE} = "$FindBin::Bin/auth.db" unless exists($ENV{TESTAPP_DB_FILE});
+
+ $ENV{TESTAPP_CONFIG} = {
+ name => 'TestApp',
+ authentication => {
+ default_realm => "users",
+ realms => {
+ users => {
+ credential => {
+ 'class' => "Password",
+ 'password_field' => 'password',
+ 'password_type' => 'clear'
+ },
+ store => {
+ 'class' => 'DBIx::Class',
+ 'user_class' => 'TestApp::User',
+ },
+ },
+ },
+ },
+ };
+
+ $ENV{TESTAPP_PLUGINS} = [
+ qw/Authentication/
+ ];
+}
+
+use SetupDB;
+
+use Catalyst::Test 'TestApp';
+
+# log a user in
+{
+ ok( my $res = request('http://localhost/user_login?username=joeuser&password=hackme'), 'request ok' );
+ is( $res->content, 'joeuser logged in', 'user logged in ok' );
+}
+
+# invalid user
+{
+ ok( my $res = request('http://localhost/user_login?username=foo&password=bar'), 'request ok' );
+ is( $res->content, 'not logged in', 'user not logged in ok' );
+}
+
+# disabled user - no disable check
+{
+ ok( my $res = request('http://localhost/user_login?username=spammer&password=broken'), 'request ok' );
+ is( $res->content, 'spammer logged in', 'status check - disabled user logged in ok' );
+}
+
+# disabled user - should fail login
+{
+ ok( my $res = request('http://localhost/notdisabled_login?username=spammer&password=broken'), 'request ok' );
+ is( $res->content, 'not logged in', 'status check - disabled user not logged in ok' );
+}
+
+# log the user out
+{
+ ok( my $res = request('http://localhost/user_logout'), 'request ok' );
+ is( $res->content, 'logged out', 'user logged out ok' );
+}
+
+# searchargs test
+{
+ ok( my $res = request('http://localhost/searchargs_login?email=nada%40mucho.net&password=much'), 'request ok' );
+ is( $res->content, 'nuffin logged in', 'searchargs based login ok' );
+}
+
+# resultset test
+# searchargs test
+{
+ ok( my $res = request('http://localhost/resultset_login?email=j%40cpants.org&password=letmein'), 'request ok' );
+ is( $res->content, 'jayk logged in', 'resultset based login ok' );
+}
+
+{
+ $ENV{TESTAPP_CONFIG}->{authentication}->{realms}->{users}->{store}->{user_class} = 'Nonexistent::Class';
+ my $res = request('http://localhost/user_login?username=joeuser&password=hackme');
+ like( $res->content, qr/\$\Qc->model('Nonexistent::Class') did not return a resultset. Did you set user_class correctly?/, 'test for wrong user_class' );
+}
+
+
+
+
+# clean up
+unlink $ENV{TESTAPP_DB_FILE};
-package TestApp;\r
-\r
-use strict;\r
-use Catalyst;\r
-use Data::Dumper;\r
-\r
-TestApp->config( $ENV{TESTAPP_CONFIG} );\r
-\r
-TestApp->setup( @{$ENV{TESTAPP_PLUGINS}} );\r
-\r
-sub user_login : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- ## this allows anyone to login regardless of status.\r
- $c->authenticate({ username => $c->request->params->{'username'},\r
- password => $c->request->params->{'password'}\r
- });\r
-\r
- if ( $c->user_exists ) {\r
- if ( $c->req->params->{detach} ) {\r
- $c->detach( $c->req->params->{detach} );\r
- }\r
- $c->res->body( $c->user->get('username') . ' logged in' );\r
- }\r
- else {\r
- $c->res->body( 'not logged in' );\r
- }\r
-}\r
-\r
-sub notdisabled_login : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- $c->authenticate({ username => $c->request->params->{'username'},\r
- password => $c->request->params->{'password'},\r
- status => [ 'active', 'registered' ]\r
- });\r
-\r
- if ( $c->user_exists ) {\r
- if ( $c->req->params->{detach} ) {\r
- $c->detach( $c->req->params->{detach} );\r
- }\r
- $c->res->body( $c->user->get('username') . ' logged in' );\r
- }\r
- else {\r
- $c->res->body( 'not logged in' );\r
- }\r
-}\r
-\r
-sub searchargs_login : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- my $username = $c->request->params->{'username'} || '';\r
- my $email = $c->request->params->{'email'} || '';\r
- \r
- $c->authenticate({ \r
- password => $c->request->params->{'password'},\r
- dbix_class => {\r
- searchargs => [ { "-or" => [ username => $username,\r
- email => $email ]}, \r
- { prefetch => qw/ map_user_role /}\r
- ]\r
- }\r
- });\r
-\r
- if ( $c->user_exists ) {\r
- if ( $c->req->params->{detach} ) {\r
- $c->detach( $c->req->params->{detach} );\r
- }\r
- $c->res->body( $c->user->get('username') . ' logged in' );\r
- }\r
- else {\r
- $c->res->body( 'not logged in' );\r
- }\r
-}\r
-\r
-sub resultset_login : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- my $username = $c->request->params->{'username'} || '';\r
- my $email = $c->request->params->{'email'} || '';\r
- \r
- \r
- my $rs = $c->model('TestApp::User')->search({ "-or" => [ username => $username,\r
- email => $email ]});\r
- \r
- $c->authenticate({ \r
- password => $c->request->params->{'password'},\r
- dbix_class => { resultset => $rs }\r
- });\r
- \r
- if ( $c->user_exists ) {\r
- if ( $c->req->params->{detach} ) {\r
- $c->detach( $c->req->params->{detach} );\r
- }\r
- $c->res->body( $c->user->get('username') . ' logged in' );\r
- }\r
- else {\r
- $c->res->body( 'not logged in' );\r
- }\r
-}\r
-\r
-## need to add a resultset login test and a search args login test\r
-\r
-sub user_logout : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- $c->logout;\r
-\r
- if ( ! $c->user ) {\r
- $c->res->body( 'logged out' );\r
- }\r
- else {\r
- $c->res->body( 'not logged ok' );\r
- }\r
-}\r
-\r
-sub get_session_user : Global {\r
- my ( $self, $c ) = @_;\r
- \r
- if ( $c->user_exists ) {\r
- $c->res->body($c->user->get('username')); # . " " . Dumper($c->user->get_columns()) );\r
- }\r
-}\r
-\r
-sub is_admin : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- eval {\r
- if ( $c->assert_user_roles( qw/admin/ ) ) {\r
- $c->res->body( 'ok' );\r
- }\r
- };\r
- if ($@) {\r
- $c->res->body( 'failed' );\r
- }\r
-}\r
-\r
-sub is_admin_user : Global {\r
- my ( $self, $c ) = @_;\r
-\r
- eval {\r
- if ( $c->assert_user_roles( qw/admin user/ ) ) {\r
- $c->res->body( 'ok' );\r
- }\r
- };\r
- if ($@) {\r
- $c->res->body( 'failed' );\r
- }\r
-}\r
-\r
-sub set_usersession : Global {\r
- my ( $self, $c, $value ) = @_;\r
- $c->user_session->{foo} = $value;\r
- $c->res->body( 'ok' );\r
-}\r
-\r
-sub get_usersession : Global {\r
- my ( $self, $c ) = @_;\r
- $c->res->body( $c->user_session->{foo} || '' );\r
-}\r
-\r
-\r
-1;\r
+package TestApp;
+
+use strict;
+use Catalyst;
+use Data::Dumper;
+
+TestApp->config( $ENV{TESTAPP_CONFIG} );
+
+TestApp->setup( @{$ENV{TESTAPP_PLUGINS}} );
+
+sub user_login : Global {
+ my ( $self, $c ) = @_;
+
+ ## this allows anyone to login regardless of status.
+ eval {
+ $c->authenticate({ username => $c->request->params->{'username'},
+ password => $c->request->params->{'password'}
+ });
+ 1;
+ } or do {
+ return $c->res->body($@);
+ };
+
+ if ( $c->user_exists ) {
+ if ( $c->req->params->{detach} ) {
+ $c->detach( $c->req->params->{detach} );
+ }
+ $c->res->body( $c->user->get('username') . ' logged in' );
+ }
+ else {
+ $c->res->body( 'not logged in' );
+ }
+}
+
+
+sub notdisabled_login : Global {
+ my ( $self, $c ) = @_;
+
+ $c->authenticate({ username => $c->request->params->{'username'},
+ password => $c->request->params->{'password'},
+ status => [ 'active', 'registered' ]
+ });
+
+ if ( $c->user_exists ) {
+ if ( $c->req->params->{detach} ) {
+ $c->detach( $c->req->params->{detach} );
+ }
+ $c->res->body( $c->user->get('username') . ' logged in' );
+ }
+ else {
+ $c->res->body( 'not logged in' );
+ }
+}
+
+sub searchargs_login : Global {
+ my ( $self, $c ) = @_;
+
+ my $username = $c->request->params->{'username'} || '';
+ my $email = $c->request->params->{'email'} || '';
+
+ $c->authenticate({
+ password => $c->request->params->{'password'},
+ dbix_class => {
+ searchargs => [ { "-or" => [ username => $username,
+ email => $email ]},
+ { prefetch => qw/ map_user_role /}
+ ]
+ }
+ });
+
+ if ( $c->user_exists ) {
+ if ( $c->req->params->{detach} ) {
+ $c->detach( $c->req->params->{detach} );
+ }
+ $c->res->body( $c->user->get('username') . ' logged in' );
+ }
+ else {
+ $c->res->body( 'not logged in' );
+ }
+}
+
+sub resultset_login : Global {
+ my ( $self, $c ) = @_;
+
+ my $username = $c->request->params->{'username'} || '';
+ my $email = $c->request->params->{'email'} || '';
+
+
+ my $rs = $c->model('TestApp::User')->search({ "-or" => [ username => $username,
+ email => $email ]});
+
+ $c->authenticate({
+ password => $c->request->params->{'password'},
+ dbix_class => { resultset => $rs }
+ });
+
+ if ( $c->user_exists ) {
+ if ( $c->req->params->{detach} ) {
+ $c->detach( $c->req->params->{detach} );
+ }
+ $c->res->body( $c->user->get('username') . ' logged in' );
+ }
+ else {
+ $c->res->body( 'not logged in' );
+ }
+}
+
+## need to add a resultset login test and a search args login test
+
+sub user_logout : Global {
+ my ( $self, $c ) = @_;
+
+ $c->logout;
+
+ if ( ! $c->user ) {
+ $c->res->body( 'logged out' );
+ }
+ else {
+ $c->res->body( 'not logged ok' );
+ }
+}
+
+sub get_session_user : Global {
+ my ( $self, $c ) = @_;
+
+ if ( $c->user_exists ) {
+ $c->res->body($c->user->get('username')); # . " " . Dumper($c->user->get_columns()) );
+ }
+}
+
+sub is_admin : Global {
+ my ( $self, $c ) = @_;
+
+ eval {
+ if ( $c->assert_user_roles( qw/admin/ ) ) {
+ $c->res->body( 'ok' );
+ }
+ };
+ if ($@) {
+ $c->res->body( 'failed' );
+ }
+}
+
+sub is_admin_user : Global {
+ my ( $self, $c ) = @_;
+
+ eval {
+ if ( $c->assert_user_roles( qw/admin user/ ) ) {
+ $c->res->body( 'ok' );
+ }
+ };
+ if ($@) {
+ $c->res->body( 'failed' );
+ }
+}
+
+sub set_usersession : Global {
+ my ( $self, $c, $value ) = @_;
+ $c->user_session->{foo} = $value;
+ $c->res->body( 'ok' );
+}
+
+sub get_usersession : Global {
+ my ( $self, $c ) = @_;
+ $c->res->body( $c->user_session->{foo} || '' );
+}
+
+
+1;