diff --git a/app/controllers/Account.scala b/app/controllers/Account.scala index b36ac14be1..dfd3328c3b 100644 --- a/app/controllers/Account.scala +++ b/app/controllers/Account.scala @@ -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") + }) } } } diff --git a/app/controllers/Auth.scala b/app/controllers/Auth.scala index 7d1a4354b1..4f38c95f59 100644 --- a/app/controllers/Auth.scala +++ b/app/controllers/Auth.scala @@ -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))) } ) } diff --git a/app/views/auth/login.scala.html b/app/views/auth/login.scala.html index a43619c382..2be8c72a7a 100644 --- a/app/views/auth/login.scala.html +++ b/app/views/auth/login.scala.html @@ -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")) {

@trans.signIn()

-
+ @globalError(form)
    @auth.formFields(form("username"), form("password"), none, register = false) diff --git a/public/javascripts/login.js b/public/javascripts/login.js new file mode 100644 index 0000000000..22804645a8 --- /dev/null +++ b/public/javascripts/login.js @@ -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; + }); +}