/*global document, window, rJS, Rusha, btoa */ /*jslint nomen: true, indent: 2, maxerr: 3*/ (function (window, document, rJS, Rusha, btoa) { "use strict"; var gadget_klass = rJS(window), templater = gadget_klass.__template_element, llogin_tooltip_template = Handlebars.compile( templater.getElementById("login-toltip-template").innerHTML ), hashCode = new Rusha().digestFromString; gadget_klass .ready(function (g) { g.props = {}; return g.getElement() .push(function (element) { g.props.element = element; g.props.deferred = RSVP.defer(); g.props.from = {page: 'main'}; g.props.login = 'login'; }); }) .declareAcquiredMethod("redirect", "redirect") .declareAcquiredMethod('getUrlFor', 'getUrlFor') .declareAcquiredMethod("getSetting", "getSetting") .declareAcquiredMethod("setSetting", "setSetting") .declareMethod("render", function (options) { var gadget = this, tmp; if (!options.url) { tmp = document.URL.split('#'); if (tmp.length > 1) { gadget.props.url = tmp[0]; } else { gadget.props.url = ""; } } else { gadget.props.url = options.url; } gadget.props.title = options.title || 'Please sign in to Monitoring'; gadget.props.root = options.root || 'UNKNOWN'; return gadget.getSetting('redirect_after_login') .push(function (redirect_after_login) { if (redirect_after_login) { gadget.props.from = redirect_after_login; } gadget.props.element.querySelector('h3') .innerHTML = ' ' + gadget.props.title; return gadget.props.deferred.resolve(); }); }) ///////////////////////////////////////// // Form submit ///////////////////////////////////////// .declareService(function () { var gadget = this; return new RSVP.Queue() .push(function () { return gadget.props.deferred.promise; }) .push(function (redirect_after_login) { var text = 'Open Link', content = llogin_tooltip_template({ title: gadget.props.title, root_title: gadget.props.root, href: gadget.props.url, link_title: text }); return $('.tooltip').tooltipster({ animation: 'fade', delay: 200, theme: 'tooltipster-shadow', touchDevices: true, content: $(content), interactive: true, trigger: 'hover' }); }) .push(function () { return loopEventListener( gadget.props.element.querySelector('form'), 'submit', true, function () { var username = gadget.props.element.querySelector("input[name='username']").value, password = gadget.props.element.querySelector("input[name='password']").value; return gadget.getDeclaredGadget('login_gadget') .push(function (login_gadget) { var hash = btoa(username + ':' + password); return login_gadget.login(gadget.props.url, hash) .then(function(result) { if (result.status === 'OK') { return gadget.setSetting('redirect_after_login', '') .push(function () { /*var credential = { hash: hash, url: gadget.props.url }, hash_url = hashCode(gadget.props.url) + ''; return login_gadget.setUrlInfo(hash_url, credential);*/ return login_gadget.updateUrlValue( gadget.props.url, username, password); }) .push(function () { return gadget.redirect(gadget.props.from); }); } else { gadget.props.element.querySelector(".msg") .innerHtml = 'Invalid username or password.'; } }, function(error) { gadget.props.element.querySelector(".msg") .innerHTML ='Invalid username or password.'; }); }); } ); }); }); }(window, document, rJS, Rusha, btoa));