Created
September 21, 2011 04:44
-
-
Save anonymous/1231271 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
use Mojolicious::Lite; | |
helper send_basic_auth => sub { | |
my $self = shift; | |
$self->res->code(401); | |
$self->res->headers->www_authenticate("Basic realm=testing"); | |
$self->rendered; | |
return; | |
}; | |
helper my_user => sub { | |
my $self = shift; | |
$self->stash( user => shift ) | |
if @_; | |
return $self->stash('user'); | |
}; | |
helper auth_app => sub { | |
my $self = shift; | |
my $userinfo = $self->req->url->to_abs->userinfo | |
or return $self->send_basic_auth; | |
my ($user, $pass) = split /:/, $userinfo; | |
# if we have a valid user and password then use the my_user helper to store it | |
# and return a true value | |
if ( | |
( $user eq 'foo' && $pass eq 'bar' ) || | |
( $user eq 'super' && $pass eq 'man' ) | |
) { | |
return $self->my_user( $user ); | |
} | |
return $self->send_basic_auth; | |
}; | |
under sub { shift->auth_app; }; | |
get '/' => sub { | |
my $self = shift; | |
$self->render(template => 'index'); | |
}; | |
get '/user' => sub { | |
my $self = shift; | |
$self->render(template => 'index', message => 'Viewing user: '.$self->my_user); | |
}; | |
under '/user/:username' => sub { | |
my $self = shift; | |
# missing username placehold in stash | |
app->log->debug("calling under user: ".$self->param('username')); | |
return unless $self->auth_app; | |
my $user = $self->stash('username') | |
or return; | |
return 1 if ( $user eq $self->my_user || $self->my_user eq 'super' ); | |
$self->render(text => 'You do not have access to that user', status => 403); | |
$self->rendered; | |
return; | |
}; | |
get sub { | |
my $self = shift; | |
$self->render(template => 'index', message => 'Editing user: '.$self->stash('username')); | |
}; | |
get 'ip' => sub { | |
my $self = shift; | |
return $self->render(template => 'index', message => 'Here is '.$self->stash('username').' ip set'); | |
}; | |
app->secret(time)->start; | |
__DATA__ | |
@@ index.html.ep | |
% layout 'default'; | |
% title 'Welcome'; | |
<%= stash 'message' %> | |
@@ layouts/default.html.ep | |
<!doctype html><html> | |
<head><title><%= title %></title></head> | |
<body><%= content %></body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment