-
-
Save german-bortoli/d41b5f60dd8097405b6b to your computer and use it in GitHub Desktop.
| $( document ).ready(function() { | |
| /** | |
| * Cookies management library | |
| * | |
| * @type type | |
| */ | |
| var helperCookie = { | |
| findAll: function () { | |
| var cookies = {}; | |
| _(document.cookie.split(';')) | |
| .chain() | |
| .map(function (m) { | |
| return m.replace(/^\s+/, '').replace(/\s+$/, ''); | |
| }) | |
| .each(function (c) { | |
| var arr = c.split('='), | |
| key = arr[0], | |
| value = null; | |
| var size = _.size(arr); | |
| if (size > 1) { | |
| value = arr.slice(1).join(''); | |
| } | |
| cookies[key] = value; | |
| }); | |
| return cookies; | |
| }, | |
| find: function (name) { | |
| var cookie = null, | |
| list = this.findAll(); | |
| _.each(list, function (value, key) { | |
| if (key === name) | |
| cookie = value; | |
| }); | |
| return cookie; | |
| }, | |
| create: function (name, value, time) { | |
| var today = new Date(), | |
| offset = (typeof time == 'undefined') ? (1000 * 60 * 60 * 24) : (time * 1000), | |
| expires_at = new Date(today.getTime() + offset); | |
| var cookie = _.map({ | |
| name: escape(value), | |
| expires: expires_at.toGMTString(), | |
| path: '/' | |
| }, function (value, key) { | |
| return [(key == 'name') ? name : key, value].join('='); | |
| }).join(';'); | |
| document.cookie = cookie; | |
| return this; | |
| }, | |
| destroy: function (name, cookie) { | |
| if (cookie = this.find(name)) { | |
| this.create(name, null, -1000000); | |
| } | |
| return this; | |
| } | |
| }; | |
| /** | |
| * Helper functions | |
| */ | |
| var helper = function () { | |
| /** | |
| * Get a parameter from query string URL | |
| * | |
| * @param {type} sParam | |
| * @returns {grafana_script_L1.helper.getUrlParameter.sParameterName|Boolean} | |
| */ | |
| this.getUrlParameter = function (sParam) { | |
| var sPageURL = decodeURIComponent(window.location.search.substring(1)), | |
| sURLVariables = sPageURL.split('&'), | |
| sParameterName, | |
| i; | |
| for (i = 0; i < sURLVariables.length; i++) { | |
| sParameterName = sURLVariables[i].split('='); | |
| if (sParameterName[0] === sParam) { | |
| return sParameterName[1] === undefined ? true : sParameterName[1]; | |
| } | |
| } | |
| } | |
| /** | |
| * From PHP JS | |
| * | |
| * @param {type} str | |
| * @returns {unresolved} | |
| */ | |
| this.url_decode = function (str) { | |
| return decodeURIComponent((str + '') | |
| .replace(/%(?![\da-f]{2})/gi, function () { | |
| // PHP tolerates poorly formed escape sequences | |
| return '%25'; | |
| }) | |
| .replace(/\+/g, '%20')); | |
| }; | |
| /** | |
| * From PHPJS | |
| * | |
| * @param {type} data | |
| * @returns {String} | |
| */ | |
| this.base64_decode = function (data) { | |
| var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; | |
| var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, | |
| ac = 0, | |
| dec = '', | |
| tmp_arr = []; | |
| if (!data) { | |
| return data; | |
| } | |
| data += ''; | |
| do { | |
| h1 = b64.indexOf(data.charAt(i++)); | |
| h2 = b64.indexOf(data.charAt(i++)); | |
| h3 = b64.indexOf(data.charAt(i++)); | |
| h4 = b64.indexOf(data.charAt(i++)); | |
| bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; | |
| o1 = bits >> 16 & 0xff; | |
| o2 = bits >> 8 & 0xff; | |
| o3 = bits & 0xff; | |
| if (h3 == 64) { | |
| tmp_arr[ac++] = String.fromCharCode(o1); | |
| } else if (h4 == 64) { | |
| tmp_arr[ac++] = String.fromCharCode(o1, o2); | |
| } else { | |
| tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); | |
| } | |
| } while (i < data.length); | |
| dec = tmp_arr.join(''); | |
| return dec.replace(/\0+$/, ''); | |
| } | |
| }; | |
| var oHelper = new helper(), | |
| t = oHelper.getUrlParameter('t'); | |
| if (typeof (t) == 'undefined') { | |
| return false; | |
| } | |
| if (t.length == 0) { | |
| return false; | |
| } | |
| try { | |
| var t_decoded = oHelper.base64_decode(oHelper.url_decode(t)), | |
| ojson = $.parseJSON(t_decoded); | |
| if (typeof (ojson.user) == 'undefined' || typeof (ojson.pass) == 'undefined') { | |
| throw "Undefined type"; | |
| } | |
| if (ojson.user.lenght == 0 || ojson.pass.lenght == 0) { | |
| throw "User or password empty"; | |
| } | |
| } catch (e) { | |
| return false; | |
| } | |
| if (typeof (ojson.redirect_to) != 'undefined') { | |
| helperCookie.create("redirect_to", ojson.redirect_to); | |
| } | |
| $('body').css('backgroundColor', '#FFF').hide(); | |
| setTimeout(function () { | |
| var $form = $("form.login-form"); | |
| if ($form.length > 0) { | |
| $form.find("input[name=username]").val(ojson.user).trigger("input"); | |
| $form.find("input[name=password]").val(ojson.pass).trigger("input"); | |
| $form.find("button[type=submit]").trigger('click'); | |
| } | |
| }, 500); | |
| }); |
just to clarify, the script uses a cookie passed to the page and in which there are username and password, here a comment of the author on another thread about it:
You receive an input parameter like ?t=base64 of a json with {user: USERNAME, pass: PASS, redirect_to: _URL_TO_REDIRECT }
You shall include that script into the login page.
Yes, sorry, I never mentioned the thread, this refers to this issue grafana/grafana#3752 (comment)
Dear,
Is there any implementation which includes Html codes with this js document since I cannot implement simple login form with it?
Hi May I know if this script still works on the new version of grafana. Also how to implement this.
Thanks.
Hi, The redirect_to cookie can't be set because it is httponly. Any idea how to set the redirect URL after login?
Thanks,
Yes, it would be great if you could provide some instructions on how to use it.