forked from lix-project/hydra
Make sign in a modal dialog box rather than a separate page
This commit is contained in:
parent
299ac07cbc
commit
bd927eba66
4 changed files with 48 additions and 65 deletions
|
@ -18,39 +18,19 @@ __PACKAGE__->config->{namespace} = '';
|
||||||
|
|
||||||
sub login :Local :Args(0) :ActionClass('REST::ForBrowsers') { }
|
sub login :Local :Args(0) :ActionClass('REST::ForBrowsers') { }
|
||||||
|
|
||||||
sub login_GET {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
|
|
||||||
my $baseurl = $c->uri_for('/');
|
|
||||||
my $referer = $c->request->referer;
|
|
||||||
$c->session->{referer} = $referer if defined $referer && $referer =~ m/^($baseurl)/;
|
|
||||||
|
|
||||||
$c->stash->{template} = 'login.tt';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub login_POST {
|
sub login_POST {
|
||||||
my ($self, $c) = @_;
|
my ($self, $c) = @_;
|
||||||
|
|
||||||
my $username;
|
my $username = $c->stash->{params}->{username} // "";
|
||||||
my $password;
|
my $password = $c->stash->{params}->{password} // "";
|
||||||
|
|
||||||
$username = $c->stash->{params}->{username};
|
error($c, "You must specify a user name.") if $username eq "";
|
||||||
$password = $c->stash->{params}->{password};
|
error($c, "You must specify a password.") if $password eq "";
|
||||||
|
|
||||||
if ($username && $password) {
|
accessDenied($c, "Bad username or password.")
|
||||||
if ($c->authenticate({username => $username, password => $password})) {
|
if !$c->authenticate({username => $username, password => $password});
|
||||||
if ($c->request->looks_like_browser) {
|
|
||||||
backToReferer($c);
|
$self->status_ok($c, entity => { });
|
||||||
} else {
|
|
||||||
currentUser_GET($self, $c);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$self->status_forbidden($c, message => "Bad username or password.");
|
|
||||||
if ($c->request->looks_like_browser) {
|
|
||||||
login_GET($self, $c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -146,6 +146,45 @@
|
||||||
</script>
|
</script>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
|
[% IF !c.user_exists %]
|
||||||
|
<div id="hydra-signin" class="modal hide fade" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label">User name</label>
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" class="span3" name="username" value=""/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label">Password</label>
|
||||||
|
<div class="controls">
|
||||||
|
<input type="password" class="span3" name="password" value=""/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button id="do-signin" class="btn btn-primary">Sign in</button>
|
||||||
|
<button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$("#do-signin").click(function() {
|
||||||
|
requestJSON({
|
||||||
|
url: "[% c.uri_for('/login') %]",
|
||||||
|
data: $(this).parents("form").serialize(),
|
||||||
|
type: 'POST',
|
||||||
|
success: function(data) {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
[% END %]
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
[% WRAPPER layout.tt title="Sign in" %]
|
|
||||||
[% PROCESS common.tt %]
|
|
||||||
|
|
||||||
[% IF c.user_exists %]
|
|
||||||
<p class="alert alert-info">
|
|
||||||
You are already signed in as <tt>[% HTML.escape(c.user.username) %]</tt>.
|
|
||||||
</p>
|
|
||||||
[% ELSE %]
|
|
||||||
|
|
||||||
<form class="form-horizontal" method="post" action="[% c.uri_for('/login') %]">
|
|
||||||
|
|
||||||
<fieldset>
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">User name</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="username" value=""/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">Password</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="password" class="span3" name="password" value=""/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-actions">
|
|
||||||
<input type="submit" name="login" value="Sign in" class="btn btn-primary" />
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
[% END %]
|
|
||||||
|
|
||||||
[% END %]
|
|
|
@ -128,7 +128,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li>
|
<li>
|
||||||
<a href="[% c.uri_for('/login') %]">Sign in with a Hydra account</a>
|
<a href="#hydra-signin" data-toggle="modal">Sign in with a Hydra account</a>
|
||||||
</li>
|
</li>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
Loading…
Reference in a new issue