Skip to content

Instantly share code, notes, and snippets.

Created September 21, 2011 04:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/1231220 to your computer and use it in GitHub Desktop.
Save anonymous/1231220 to your computer and use it in GitHub Desktop.
#!/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' => sub {
my $self = shift;
# missing username placehold in stash
app->log->debug("calling under user: ".$self->stash('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 ':username' => sub {
my $self = shift;
$self->render(template => 'index', message => 'Editing user: '.$self->stash('username'));
};
get ':username/ip' => sub {
my $self = shift;
return $self->render(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