Skip to content

Instantly share code, notes, and snippets.

Created January 13, 2018 12:58
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/91d14f49f19d411c1bb0e2bcfba4dc7f to your computer and use it in GitHub Desktop.
Save anonymous/91d14f49f19d411c1bb0e2bcfba4dc7f to your computer and use it in GitHub Desktop.
├── lib │   ├── MyApp │   │   ├── Controller │   │   │   └── Login.pm │   │   ├── Model │   │   │   └── Users.pm │   │   └── View │   │   └── Login.pm │   └── MyApp.pm ├── script │   └── my_app ├── t │   └── login.t
package MyApp::Controller::Login;
use Mojo::Base 'Mojolicious::Controller';
#All Mojolicious::Controller controllers are plain old Perl classes and get instantiated on demand.
#Templates are our views, and usually bound to controllers, so they need to be moved into the appropriate directories.
sub index {
my $self = shift;
my $user = $self->param('user') || '';
my $pass = $self->param('pass') || '';
return $self->render(text => $self->views->index($user)) unless $self->users->check($user, $pass);
$self->session(user => $user);
$self->flash(message => 'Thanks for logging in.');
$self->redirect_to('protected');
}
sub protected {
my $self = shift;
$self->render(text => $self->views->protected($self->session('user'),$self->flash('message'),$self->url_for('logout') ));
}
sub logged_in {
my $self = shift;
return 1 if $self->session('user');
$self->redirect_to('index');
return undef;
}
sub logout {
my $self = shift;
$self->session(expires => 1);
$self->redirect_to('index');
}
1;
├── lib
│   ├── MyApp
│   │   ├── Controller
│   │   │   └── Login.pm
│   │   ├── Model
│   │   │   └── Users.pm
│   │   └── View
│   │   └── Login.pm
│   └── MyApp.pm
├── script
│   └── my_app
├── t
│   └── login.t
package MyApp::View::Login;
sub new {
my ($class) = @_;
my $self={};
bless $self,$class;
return $self;
}
sub index {
my ($self,$user) = @_;
my $msg=($user)?'<b>Wrong name or password, please try again.</b><br>':'';
my $body=<<"____END";
<form action="/" method="post"><br>
$msg
Name:
<br>
<input name="user" type="text">
<br>
Password:
<br>
<input name="pass" type="password">
<br>
<input value="Login" type="submit">
</form>
____END
return $self->defaultLayout($body);
}
sub protected {
my ($self,$user,$message,$url) = @_;
my $msg=($message)?"<b>$message</b><br>":"";
my $body=<<"____END";
$msg
Welcome $user.<br>
<a href="$url">logout</a>
____END
return $self->defaultLayout($body);
}
sub defaultLayout {
my ($self,$content) = @_;
my $html=<<"____END";
<!DOCTYPE html>
<html>
<head><title>Login Manager</title></head>
<body>
$content
</body>
</html>
____END
return $html;
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment