-
-
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); | |
| }); |
Yes, it would be great if you could provide some instructions on how to use it.
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,
Hi!
Can you tell me how to use the script ?
I try to auto login to Grafana from a kiosk configured RPi with chromium.
No idea how to use your script..... Would be a great solution for me !