<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Login - Acquire</title> <meta charset="utf-8" content="text/html" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="date=no" /> <meta name="format-detection" content="address=no" /> <link href="/css/bootstrap.min.css" rel="stylesheet" /> <link href="/css/font-awesome.min.css" rel="stylesheet" /> <link href="/css/Site.css" rel="stylesheet" /> <link href="/css/Login.css" rel="stylesheet" /> <script src="/Content/js/libs/require.js"></script> <script src="/Content/js/require-config-login.js"></script> </head> <body role="document"> <div class="container-fluid" role="main"> <div id="loginBackground"> <div class="login well"> <h2 class="loginHeader"> <img alt="Acquire Logo" src="/img/AcquireLogo.png" width="44" height="44" class="acquireLogo" /> Login to Acquire </h2> <form id="loginForm" role="form" method="POST"> <div class="form-group clearfix"> <div class="input-group"> <div class="input-group-addon"><span class="fa fa-user fa-fw"></span></div> <input class="form-control" type="text" id="User" name="User" required="required" placeholder="Username" data-bind="textInput: user" autocorrect="off" autocapitalize="off" spellcheck="false" /> </div> </div> <div class="form-group clearfix"> <div class="input-group"> <div class="input-group-addon"><span class="fa fa-key fa-fw"></span></div> <input class="form-control" type="password" id="Password" name="Password" required="required" placeholder="Password" data-bind="textInput: pass" /> </div> </div> <div class="clearfix"> <a href="#" class="pull-left bold topMargin" id="forgottenPasswordLink" data-bind="click: forgottenPassword" title="Click if you have forgotten your password">I've forgotten my password!</a> <button class="btn btn-success pull-right thirdWidth" type="submit" id="Login" data-bind="click: login, disable: !user() || !pass() || isBusy()"> Login </button> </div> </form> </div> <div class="login topMargin"> <div class="alert alert-warning"> <p> By using this website you agree to Zonal Retail Data Systems Limited’s standard terms and conditions of trade unless you have expressly agreed in writing alternative terms for the use of Acquire. </p> <p> If you require further assistance, please contact the Zonal Help Centre <a id="helpCentreNumber" class="alert-link" href="tel:+443332341210">+44(0)333 234 1210</a>. </p> </div> </div> <form> <modal-dialog id="forgottenPasswordModal" params="modalVisible: forgottenPasswordVisible, data: $data, closeCallback: cancelForgottenPassword"> <header-template> <div> <h4 class="modal-title">Reset Password</h4> </div> </header-template> <content-template> <p>Your password will be reset and a link will be emailed to your registered email address that you can use to login to Acquire (this link will expire after 3 days).</p> <p>Please check your <strong>username</strong> below then click "OK" to reset your password.</p> <div class="form-group topMargin"> <div class="input-group" aria-label="Username field"> <div class="input-group-addon"><span class="fa fa-user fa-fw"></span></div> <input class="form-control" type="text" id="ResetUser" name="ResetUser" required="required" placeholder="Username" data-bind="textInput: user" autocorrect="off" autocapitalize="off" spellcheck="false" /> </div> </div> </content-template> <footer-template> <button type="submit" class="btn btn-success quarterWidth" id="forgottenPasswordModalOkButton" data-bind="click: requestPasswordReset, enable: user() && !isBusy()" title="Click to reset your password."> OK </button> <button type="reset" class="btn btn-danger quarterWidth" id="forgottenPasswordModalCancelButton" data-bind="click: cancelForgottenPassword, enable: !isBusy()" title="Click to close this window without resetting your password."> Cancel </button> </footer-template> </modal-dialog> </form> </div> <script> require([ "knockout", "jquery", "report-error", "Components/modal-dialog/modal-dialog", "knockout.validation" ], function (ko, $, reportError) { var forgottenPasswordVisible = ko.observable(false); var viewModel = ko.validatedObservable({ user: ko.observable().extend({ required: { message: 'Please specify your username' } }), pass: ko.observable().extend({ required: { message: 'Please specify your password' } }), isBusy: ko.observable(), forgottenPasswordVisible: forgottenPasswordVisible, forgottenPassword: function () { forgottenPasswordVisible(true); }, cancelForgottenPassword: function () { forgottenPasswordVisible(false); }, requestPasswordReset: function () { var self = this; self.isBusy(true); $.ajax({ url: "/reset-password", method: "POST", contentType: "application/json", data: JSON.stringify({ user: self.user() }) }).done(function () { alert('Your password has been reset, please check your inbox for an email from Acquire.'); }).fail(function (xhr) { reportError(xhr, "Could not reset your password"); }).always(function () { forgottenPasswordVisible(false); self.isBusy(false); }); }, login: function () { var self = this; self.isBusy(true); // This is here because when a 401 is thrown from a Nancy module, the ASP pipeline takes us to the ErrorController due to UseStatusCodePagesWithReExecute. // ErrorController has an [Authorize] attribute which then causes the user to be redirected to the login page with a returnUrl of /error?code. // We don't want to follow this returnUrl as it will take the user to an error page on login. Once Nancy is removed, the conditional below can also be removed, // as all authorization will be executed within the correct ASP handler. var returnUrl = getParameterByName("returnUrl", location.search); if (!returnUrl || returnUrl.indexOf("/error") > -1 || returnUrl.indexOf("/login") > -1 || !isLocalUrl(returnUrl)) { returnUrl = "/"; } $.ajax({ url: "/login", method: "POST", data: { user: self.user(), password: self.pass() } }).done(function () { location.href = returnUrl; }).fail(function () { self.pass(""); alert("Could not log in, please check your username and password"); }).always(function () { self.isBusy(false); }); } }); ko.applyBindings(viewModel, document.body); function getParameterByName(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } function isLocalUrl(url) { return (url[0] == '/' && (url.Length == 1 || (url[1] != '/' && url[1] != '\\'))) || (url.Length > 1 && url[0] == '~' && url[1] == '/') } }); </script> </div> <script> if (typeof (Storage) !== "undefined" && localStorage.getItem("testMode") === "true") { document.body.classList.add("no-transitions"); } </script> </body> </html>
Following keywords were found. You can check the keyword optimization of this page for each keyword.
(Nice to have)