XHR login form

pull/4336/head
Thibault Duplessis 2018-05-06 17:56:50 +02:00
parent 1e7211def1
commit 10faba2025
4 changed files with 38 additions and 10 deletions

View File

@ -147,9 +147,9 @@ object Account extends LilaController {
def emailConfirm(token: String) = Open { implicit ctx =>
Env.security.emailChange.confirm(token) flatMap {
_ ?? { user =>
controllers.Auth.authenticateUser(user, result = Redirect {
s"${routes.Account.email}?ok=1"
}.fuccess.some)
controllers.Auth.authenticateUser(user, result = Some { _ =>
Redirect(s"${routes.Account.email}?ok=1")
})
}
}
}

View File

@ -37,17 +37,18 @@ object Auth extends LilaController {
}
}
def authenticateUser(u: UserModel, result: Option[Fu[Result]] = None)(implicit ctx: Context): Fu[Result] = {
def authenticateUser(u: UserModel, result: Option[String => Result] = None)(implicit ctx: Context): Fu[Result] = {
implicit val req = ctx.req
u.ipBan.fold(
fuccess(Redirect(routes.Lobby.home)),
api.saveAuthentication(u.id, ctx.mobileApiVersion) flatMap { sessionId =>
negotiate(
html = result | Redirect {
get("referrer").filter(goodReferrer) orElse
html = fuccess {
val redirectTo = get("referrer").filter(goodReferrer) orElse
req.session.get(api.AccessUri) getOrElse
routes.Lobby.home.url
}.fuccess,
result.fold(Redirect(redirectTo))(_(redirectTo))
},
api = _ => mobileUserOk(u)
) map authenticateCookie(sessionId)
} recoverWith authRecovery
@ -94,7 +95,7 @@ object Auth extends LilaController {
UserRepo.email(u.id) foreach {
_ foreach { garbageCollect(u, _) }
}
authenticateUser(u)
authenticateUser(u, Some(redirectTo => Ok(redirectTo)))
}
)
}

View File

@ -1,10 +1,12 @@
@(form: Form[_], referrer: Option[String])(implicit ctx: Context)
@auth.layout(title = trans.signIn.txt()) {
@auth.layout(
title = trans.signIn.txt(),
moreJs = jsTag("login.js")) {
<div class="content_box login">
<div class="signup_box">
<h1 class="lichess_title">@trans.signIn()</h1>
<form action="@routes.Auth.authenticate@referrer.map { ref =>?referrer=@{java.net.URLEncoder.encode(ref, "US-ASCII")}}" method="POST">
<form class="login" action="@routes.Auth.authenticate@referrer.map { ref =>?referrer=@{java.net.URLEncoder.encode(ref, "US-ASCII")}}" method="POST">
@globalError(form)
<ul>
@auth.formFields(form("username"), form("password"), none, register = false)

View File

@ -0,0 +1,25 @@
$(function() {
load($('form.login'));
});
function load($f) {
$f.submit(function() {
$f.find('.submit').attr('disabled', true).attr('data-icon', null).html(lichess.spinnerHtml);
$.ajax({
url: $f.attr('action'),
method: $f.attr('method'),
data: {
username: $f.find('.username input').val(),
password: $f.find('.password input').val()
},
success: function(res) {
return lichess.redirect(res.substr(3));
},
error: function(err) {
$f.replaceWith($(err.responseText).find('form.login'));
load($('form.login'));
}
});
return false;
});
}