Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var _mify_rest = "/m/shop/id/"; //including last slash
- var _mify_debug = false;
- var _login_with_post = false;
- /*var bridgesocket = false; // This is used by ajax() function to determine if this is a call to BRIDGESOCKET.
- // Replace the standard window.alert with one that handles BRIDGESOCKET errors.
- var default_alert = window.alert;
- window.alert = function(message) {
- if (bridgesocket) {
- console.error("BRIDGESOCKET: " + message);
- var i, j, k;
- // ...
- // j acquires some interesting value
- // Who called foo when j took this interesting value?
- //
- var e = new Error('dummy');
- var stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '')
- .replace(/^\s+at\s+/gm, '')
- .replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@');
- if (!stack.includes("setup.js")) {
- default_alert("BRIDGESOCKET does not appear to be installed.\n\nPlease follow the instructions on setup.html");
- }
- } else {
- default_alert(message);
- }
- };
- */
- var MIFY = function(loginResource, debug, loginWithPost) {
- //"use strict";
- var USER_KEY = "MIFY_USER";
- var USER_TOKEN_KEY = "MIFY_U_TOKEN";
- var PWD_TOKEN_KEY = "MIFY_P_TOKEN";
- var LVS_INFO_KEY = "X-LVS-Information";
- var TOKEN_KEY = "X-LVS-HSToken";
- var LVS_MAC_ADDRESS_HEADER_KEY = "X-LVS-MacAddress";
- var SHOP_ACCOUNT_ID = "X-LVS-AccountID";
- var LANGUAGE_KEY = "MIFY_LANG";
- var LANGUAGE_HEADER_KEY = "Accept-Language";
- var LINE_ID = Masagi.CountryConfig.get('lineId');
- var ORIGIN_ID = Masagi.CountryConfig.get('originId');
- var CURRENCY_ID = Masagi.CountryConfig.get('currency')['id'];
- var loginHandler = null;
- var logoutHandler = null;
- var pendingRequest = null;
- var privateToken = null;
- var messages = {
- provideValidUser2: "Please enter your username.",
- provideValidPass2: "Please enter your password.",
- provideValidUserPass: "Please enter your username and password.",
- validating: "Validating",
- UUIDNotFound: "Error retrieving your UUID. Please try logging in again.",
- loggedIn: "Logged in",
- serverNotResponding: "The server is not responding or is not reachable.",
- newPasswordMatch: "The new passwords must match.",
- registerTerminal: "To continue, please register this terminal.",
- login: "Log in"
- }
- var setLanguage = function(languageisoCode) {
- localStorage.setItem(LANGUAGE_KEY, languageisoCode);
- };
- var getLanguage = function() {
- var lang = localStorage.getItem(LANGUAGE_KEY);
- // make sure that ringfence is in the correct locale
- if (typeof(java) !== "undefined") {
- try {
- java.setLocale(lang); // 'magic'
- } catch (e) {
- // statements to handle any exceptions
- console.log(e); // pass exception object to error handler
- }
- }
- return lang;
- };
- var hideLogin = function() {
- if (document.getElementById("login_box") == undefined) return;
- document.getElementById("username").value = "";
- document.getElementById("password").value = "";
- document.getElementById("login_box").style.display = "none";
- };
- //fill default username
- var lsUser = localStorage.getItem(USER_KEY);
- if (lsUser != undefined && lsUser != null) {
- var usernameBox = document.getElementById("username");
- if (usernameBox) {
- usernameBox.value = lsUser;
- }
- }
- //assign login action
- var loginSubmitButton = document.getElementById("login-submit");
- if (loginSubmitButton) {
- loginSubmitButton.onclick = function(e) {
- var submitButton = this;
- if (submitButton.hasAttribute("disabled")) return;
- var $username = document.getElementById("username");
- var $password = document.getElementById("password");
- var username = $username.value.trim();
- var password = $password.value.trim();
- if (username === "" && password === "") {
- document.getElementById("login-msg").innerHTML = messages.provideValidUserPass;
- $username.focus();
- return false;
- } else if (username === "") {
- document.getElementById("login-msg").innerHTML = messages.provideValidUser2;
- $username.focus();
- return false;
- } else if (password === "") {
- document.getElementById("login-msg").innerHTML = messages.provideValidPass2;
- $password.focus();
- return false;
- }
- submitButton.setAttribute("disabled", "disabled");
- submitButton.innerHTML = '<img src="img/loader.gif" />' + messages.validating;
- var bridgesocket = /^https:\/\/bridgesocket.lvs.co.uk/.test(url);
- var uuid;
- if (bridgesocket === false) {
- uuid = BRIDGESOCKET.uuid(null, null);//MSW.bridgeSocketFound, MSW.noBridgeSocket);
- }
- if (uuid === 'N/A') {
- displayLogin(messages.UUIDNotFound);
- return false;
- }
- var method = "GET";
- var url = loginResource + username + "?password=" + password;
- var body = null;
- if (loginWithPost) {
- method = "POST";
- url = loginResource + username;
- body = JSON.stringify({
- "password" : password,
- "lineId" : MIFY.LINE_ID,
- "originId" : MIFY.ORIGIN_ID
- });
- }
- ajax(method, url, body, function(data, textStatus, xhr ) {
- localStorage.setItem(USER_KEY, username);
- localStorage.setItem(SHOP_ACCOUNT_ID, data['shop']['accountId']);
- localStorage.setItem("SHOP_DETAILS", JSON.stringify(data['shop']));
- localStorage.setItem("TILL_DETAILS", JSON.stringify(data['till']));
- submitButton.innerHTML = '<img src="img/accept.png" />' + messages.loggedIn;
- document.getElementById("username").value = lsUser;
- if (loginHandler != null) {
- loginHandler();
- }
- document.getElementById("login-msg").innerHTML = "";
- document.getElementById("login-loader").style.display = "block";
- if (pendingRequest != null) {
- ajax(pendingRequest.method,
- pendingRequest.url,
- pendingRequest.data,
- pendingRequest.successCallback,
- pendingRequest.errorCallback,
- pendingRequest.additionalHeaders
- );
- pendingRequest = null;
- }
- //Initialise the Other Transactions fields at login time.
- Masagi.Other.initFields();
- Masagi.Cashier.load();
- }, function(xhr) {
- var response = {}
- try {
- var response = JSON.parse(xhr.response);
- }
- catch (e) {
- response = {
- 'errors' : [xhr.response]
- }
- }
- console.log(response);
- console.log(response.errors);
- var errors = response.errors || [];
- var loginErrorMsg = '';
- // new format for 403 errors are response = {message:'error message'}
- if (xhr.status === 403 && errors.length === 0){
- errors.push(response);
- }
- if (xhr.status == 0) {
- loginErrorMsg = messages.serverNotResponding;
- } else if (errors.length !== 0) {
- for (var i = errors.length - 1; i >= 0; i--) {
- if(errors[i].message) {
- loginErrorMsg += errors[i].message + '\n';
- }
- };
- } else {
- loginErrorMsg = (xhr.statusText != "")? xhr.responseText : xhr.response;
- }
- displayLogin(loginErrorMsg);
- }, null, true);
- e.preventDefault();
- return false;
- }
- }
- var changePasswordOKButton = document.getElementById("change_password_ok");
- if (changePasswordOKButton) {
- changePasswordOKButton.onclick = function(e) {
- var oldPassword = document.getElementById("old_password").value;
- var newPassword1 = document.getElementById("new_password1").value;
- var newPassword2 = document.getElementById("new_password2").value;
- if (newPassword1 !== newPassword2) {
- MIFY.displayChangePassword(messages.newPasswordMatch);
- } else {
- var data = {
- oldPassword : oldPassword,
- password : newPassword1
- };
- ajax("PUT", "/m/acc/pwd?token=" + localStorage.getItem(PWD_TOKEN_KEY), JSON.stringify(data), function(data, textStatus, xhr ) {
- document.getElementById("login-msg").innerHTML = "";
- document.getElementById("change_password_box").style.display = "none";
- console.log(data);
- }, function(xhr) {
- MIFY.displayChangePassword(xhr.response);
- console.error(xhr);
- }, null, true);
- }
- e.preventDefault();
- return false;
- }
- }
- var changePasswordCancelButton = document.getElementById("change_password_cancel");
- if (changePasswordCancelButton) {
- changePasswordCancelButton.onclick = function(e) {
- document.getElementById("change_password_box").style.display = "none";
- e.preventDefault();
- return false;
- }
- }
- var translateMessages = function(translations) {
- var locale = getLanguage().substr(0,2);
- if(locale !== 'en-GB' || locale !== 'dev') {
- for(prop in messages) {
- messages[prop] = translations[prop];
- }
- }
- };
- var log = function(obj) {
- if (!debug) return;
- console.log(obj);
- };
- var error = function(obj) {
- if (!debug) return;
- console.log(obj);
- };
- var logout = function(reason) {
- localStorage.removeItem(USER_TOKEN_KEY);
- // BRIDGESOCKET.resetuuid();
- if (logoutHandler != null) {
- logoutHandler(reason);
- }
- pendingRequest = null;
- displayLogin(reason);
- };
- var displayLogin = function(msg) {
- var loginBoxElement = document.getElementById("login_box");
- var submitButton = document.getElementById("login-submit");
- if (submitButton) {
- submitButton.removeAttribute("disabled");
- submitButton.innerHTML = messages.login;
- }
- else {
- return false;
- } //exit function when in shop registration page (/setup2.html)
- if(!msg && $(submitButton).is(':visible')){
- return false;
- }
- document.getElementById("login-loader").style.display = "none";
- //fill default username
- var userbox = document.getElementById("username");
- var passbox = document.getElementById("password");
- passbox.value = "";
- if (msg != undefined) {
- // console.log('--> (typeof msg)');
- // console.log((typeof msg));
- // if ((typeof msg) === "object") {
- // msg = msg.message;
- // }
- try{
- msg = JSON.parse(msg);
- msg = msg.message;
- }
- catch(e){
- //catch and just suppress error
- }
- if (msg.toUpperCase().substr(0,3) === 'MAC') {
- alert (msg + "\n\n" + messages.registerTerminal);
- window.location.href='/setup2.html';
- } else {
- document.getElementById("login-msg").innerHTML = msg;
- }
- } else {
- var lsUser = localStorage.getItem(USER_KEY);
- if (lsUser != undefined && lsUser != null) {
- userbox.value = lsUser;
- passbox.focus();
- } else {
- userbox.value = "";
- userbox.focus();
- }
- }
- loginBoxElement.style.display = "block";
- };
- var hasQueryString = function(url) {
- if(!url) return false
- var pattern = new RegExp(/.*?\?/);
- return pattern.test(url);
- }
- var isQueryStringInUrl = function(url, queryString) {
- if(url.indexOf('?'+queryString) > -1 || url.indexOf('&'+queryString) > -1) {
- return true;
- } else {
- return false;
- }
- }
- var insertQueryStringInUrl = function(url, queryString, value) {
- if(hasQueryString(url)) {
- url = url + '&';
- } else {
- url = url + '?'
- }
- return url + queryString + '=' + value;
- }
- var displayChangePassword = function(msg) {
- var loginBoxElement = document.getElementById("change_password_box");
- var okButton = document.getElementById("change_password_ok");
- var cancelButtin = document.getElementById("change_password_cancel");
- okButton.removeAttribute("disabled");
- document.getElementById("login-loader").style.display = "none";
- if (msg != undefined) {
- document.getElementById("change_password_msg").innerHTML = msg;
- } else {
- var old_password = document.getElementById("old_password").value = "";
- document.getElementById("new_password1").value = "";
- document.getElementById("new_password2").value = "";
- }
- loginBoxElement.style.display = "block";
- }
- var ajax = function(method, url, data, successCallback, errorCallback, additionalHeaders, skipToken) {
- //inserts lineId to url if it does not have one yet
- if(method === 'GET' && !isQueryStringInUrl(url, 'lineId')) {
- url = insertQueryStringInUrl(url, 'lineId', LINE_ID);
- }
- if(method === 'GET' && !isQueryStringInUrl(url, 'originId')) {
- url = insertQueryStringInUrl(url, 'originId', ORIGIN_ID);
- }
- if (typeof data === "function") {
- // The caller has not sent us a data parameter, so we shift everything along...
- errorCallback = successCallback;
- successCallback = data;
- data = null;
- }
- // To mimic how JQuery works, the signatures for success() and error() are as follows:
- // success( PlainObject data, String textStatus, jqXHR jqXHR )
- // error( jqXHR jqXHR, String textStatus, String errorThrown )
- var start = new Date().getTime();
- var token = null;
- if (privateToken) {
- token = privateToken;
- } else {
- token = localStorage.getItem(USER_TOKEN_KEY);
- }
- if (token === null && skipToken === undefined) {
- pendingRequest = {
- method: method,
- url: url,
- data: data,
- successCallback: successCallback,
- errorCallback: errorCallback,
- additionalHeaders: additionalHeaders
- };
- displayLogin();
- if (errorCallback) {
- errorCallback(xhr, status, "Not logged in");
- } else {
- log("Call postponed as not logged in: " + method + " " + url);
- }
- return;
- }
- var xhr = new XMLHttpRequest();
- if ("withCredentials" in xhr) {
- // XHR for Chrome/Firefox/Opera/Safari.
- xhr.open(method, url, true); // the 3rd parameter is Async
- } else if (typeof XDomainRequest != "undefined") {
- // XDomainRequest for IE.
- xhr = new XDomainRequest();
- xhr.open(method, url);
- } else {
- errorCallback(xhr, "error", "CORS is not suppported");
- return;
- }
- xhr.timeout = 40000;
- xhr.setRequestHeader("Content-type", "application/json; charset=UTF-8");
- if (token !== undefined && token) {//} && skipToken === undefined) {
- xhr.setRequestHeader(TOKEN_KEY, token);
- }
- if (additionalHeaders != null && additionalHeaders != undefined) {
- for (var header in additionalHeaders) {
- xhr.setRequestHeader(header, additionalHeaders[header]);
- }
- }
- var bridgesocket = /^https:\/\/bridgesocket.lvs.co.uk/.test(url);
- if (bridgesocket === false) {
- xhr.setRequestHeader(LVS_MAC_ADDRESS_HEADER_KEY, BRIDGESOCKET.uuid(null, null/*MSW.bridgeSocketFound, MSW.noBridgeSocket*/));
- }
- var language = MIFY.getLanguage();
- if(language) {
- console.log(language);
- xhr.setRequestHeader(LANGUAGE_HEADER_KEY, language);
- }
- xhr.onload = function(e) {
- var responseReceived = new Date().getTime();
- var token = xhr.getResponseHeader(TOKEN_KEY);
- if (token) {
- localStorage.setItem(USER_TOKEN_KEY, token);
- }
- var rc = parseInt(xhr.status.toString()[0]); // Get the first character.
- if (rc >= 4) {
- error("-------------------");
- error(method + " " + url + "[" + (responseReceived - start) + "ms]");
- error(xhr);
- var errorMsg = xhr.responseText;
- var info = xhr.getResponseHeader(LVS_INFO_KEY);
- if (info != undefined && info != null && info != "") {
- errorMsg = info;
- }
- error(errorMsg);
- if (xhr.status === 401) {
- if (errorMsg === "Password expired.") {
- localStorage.removeItem(USER_TOKEN_KEY);
- localStorage.setItem(PWD_TOKEN_KEY, token);
- displayChangePassword(errorMsg);
- } else {
- logout(errorMsg);
- }
- } else {
- pendingRequest = {
- method: method,
- url: url,
- data: data,
- successCallback: successCallback,
- errorCallback: errorCallback,
- additionalHeaders: additionalHeaders
- };
- }
- if (errorCallback) {
- errorCallback(xhr, "error", errorMsg);
- }
- var responseHandled = new Date().getTime();
- error("Handled in " + (responseHandled - responseReceived) + "ms");
- error("-------------------\n");
- } else {
- log("-------------------");
- log(method + " " + url + " [" + (responseReceived - start) + "ms]");
- log(xhr);
- var responseText = "";
- if (xhr.responseText != undefined && xhr.responseText != "") {
- var type = xhr.getResponseHeader("Content-Type");
- if (type && type.indexOf("application/json") === 0) {
- responseText = JSON.parse(xhr.responseText);
- } else {
- responseText = xhr.response;
- }
- }
- if (successCallback) {
- successCallback(responseText, xhr.status, xhr);
- }
- var responseHandled = new Date().getTime();
- log("Handled in " + (responseHandled - responseReceived) + "ms");
- log("-------------------\n");
- }
- };
- xhr.onerror = function(e) {
- var responseReceived = new Date().getTime();
- error("-------------------");
- error(method + " " + url + " [" + (responseReceived - start) + "ms]");
- error(xhr);
- var errorMsg = xhr.responseText;
- var info = xhr.getResponseHeader(LVS_INFO_KEY);
- if (info != undefined && info != null && info != "") {
- errorMsg += "(" + info + ")";
- }
- error(errorMsg);
- if (xhr.status === 401) {
- logout(info);
- } else if (xhr.status === 0) {
- errorMsg = messages.serverNotResponding;
- }
- if (errorCallback) {
- errorCallback(xhr, "error", errorMsg);
- }
- var responseHandled = new Date().getTime();
- error("Handled in " + (responseHandled - responseReceived) + "ms");
- error("-------------------\n");
- if (xhr.status !== 0) {
- logout(errorMsg);
- }
- };
- xhr.ontimeout = function(e) {
- var responseReceived = new Date().getTime();
- error("-------------------");
- error(method + " " + url + " [" + (responseReceived - start) + "ms]");
- error(xhr);
- if (errorCallback) {
- errorCallback(xhr, "timeout", xhr.responseText);
- }
- var responseHandled = new Date().getTime();
- error("Handled in " + (responseHandled - responseReceived) + "ms");
- error("-------------------\n");
- };
- if (data) {
- xhr.send(data);
- } else {
- xhr.send();
- }
- return xhr;
- };
- return {
- getLanguage: getLanguage,
- setLanguage: setLanguage,
- logout: logout,
- displayLogin: displayLogin,
- translateMessages: translateMessages,
- displayChangePassword : function(msg) {
- displayChangePassword(msg);
- },
- hideLogin: hideLogin,
- isLoggedIn : function() {
- if (localStorage.getItem(USER_TOKEN_KEY)) {
- return true;
- } else {
- return false;
- };
- },
- getShopId : function() {
- return localStorage.getItem(SHOP_ACCOUNT_ID);
- },
- setLoginHandler : function(handler) {
- loginHandler = handler;
- },
- setLogoutHandler : function(handler) {
- logoutHandler = handler;
- },
- setPrivateToken : function(token) {
- privateToken = token;
- },
- get : function(url, data, success, error, additionalHeaders) {
- return ajax('GET', url, data, success, error, additionalHeaders);
- },
- get_no_token : function(url, data, success, error, additionalHeaders) {
- return ajax('GET', url, data, success, error, additionalHeaders, true);
- },
- post : function(url, data, success, error, additionalHeaders) {
- return ajax('POST', url, data, success, error, additionalHeaders);
- },
- post_no_token : function(url, data, success, error, additionalHeaders) {
- return ajax('POST', url, data, success, error, additionalHeaders, true);
- },
- put : function(url, data, success, error, additionalHeaders) {
- return ajax('PUT', url, data, success, error, additionalHeaders);
- },
- getToken : function(url) {
- return localStorage.getItem(USER_TOKEN_KEY);
- },
- // delete is quoted as it's a keyword that is causing issue with the JS minifier
- "delete" : function(url, data, success, error, additionalHeaders) {
- return ajax('DELETE', url, data, success, error, additionalHeaders);
- }
- };
- }(_mify_rest, _mify_debug, _login_with_post);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement