// ==UserScript== // @name AWS-SAML-SSO-filter // @namespace signin.aws.amazon.com // @description Adds account list filter to AWS SSO sign-in page // @include https://signin.aws.amazon.com/saml // @version 1.01 // @grant none // ==/UserScript== window.clearSearch = function () { $("#searchbox > input").val(""); $("#searchbox > input").focus(); $("#searchbox > input").keyup(); }; $("#saml_form > p").before( '<div id="searchbar">\ <div id="searchbox">\ <input type="text" placeholder="Filter accounts and roles...">\ </div>\ <div id="button_container">\ <a id="clear_button" class="css3button" href="#" onClick=window.clearSearch() style="display: inline;">Clear</a>\ </div>\ </div>\ <div id="hint">Filter is case-insensitive and ignores dashes \'-\'. Press <b>enter</b> to sign in when your filter returns only one role.</div>' ); $("#saml_form > p").hide(); $("#searchbar").css("display", "flex"); $("#button_container").css("padding", "24px 0 0 8px"); $("#searchbox").css("margin", "5px"); $("#searchbox").css("padding", "8px 32px"); $("#searchbox").css("width", "100%"); $("#searchbox > input").css("width", "100%"); $("#searchbox > input").css("padding", "8px 16px"); $("#searchbox > input").focus(); $("#hint").css("padding", "0 56px 12px"); $("#hint").css("margin-top", "-8px"); $("#hint").css("color", "lightgray"); $("#input_signin_button").before('<div id="filter-error"></div>'); $("#filter-error").css("padding", "0px 32px 32px"); $("#filter-error").css("font-size", "16px"); $(document).keypress(function (e) { if (e.which === 13) { $("form#saml_form").submit(); } }); $("#searchbox > input").keydown(function (e) { if (e.which === 13) { var visibleRoles = $( "fieldset > div.saml-account:visible > div.saml-account > div.saml-role:visible" ); event.preventDefault(); if (visibleRoles.size() === 1) { $("form#saml_form").submit(); } } }); $("#searchbox > input").keyup(function (e) { if (e.which === 40) { $( "fieldset > div.saml-account:visible > div.saml-account > div.saml-role:visible" ) .first() .children("input") .focus(); $( "fieldset > div.saml-account:visible > div.saml-account > div.saml-role:visible" ) .first() .children("input") .prop("checked", true); return; } if ($(this).val() === "") { $("fieldset > div.saml-account").show(); } else { var keyword = $(this).val().replaceAll("-", "").toLowerCase(); $("fieldset > div.saml-account").each(function () { var roles = $(this).children(".saml-account").children(".saml-role"); roles.each(function () { $(this).show(); }); $(this).show(); var accountName = $(this) .find(".saml-account-name") .text() .replaceAll("-", "") .toLowerCase(); var accountNameMatch = accountName.indexOf(keyword) !== -1; if (accountNameMatch) { return; } var roleNamesConcat = $(this) .find(".saml-role-description") .text() .replaceAll("-", "") .toLowerCase(); var searchRoles = roleNamesConcat.indexOf(keyword) !== -1; if (searchRoles) { roles.each(function () { var roleName = $(this) .find(".saml-role-description") .text() .replaceAll("-", "") .toLowerCase(); if (roleName.indexOf(keyword) !== -1) { $(this).show(); } else { $(this).hide(); } }); return; } $(this).hide(); }); } $("#signin_button").show(); var visibleAccounts = $("fieldset > div.saml-account:visible"); var visibleRoles = $( "fieldset > div.saml-account:visible > div.saml-account > div.saml-role:visible" ); if (visibleRoles.size() === 1) { checkRadio(visibleRoles[0]); } else { $("input:radio").attr("checked", false); } if (visibleAccounts.size() > 0) { document.getElementById("filter-error").innerHTML = ""; } else { document.getElementById( "filter-error" ).innerHTML = `No accounts containing <b>${$(this).val()}</b> found.`; $("#signin_button").hide(); } }); window.addEventListener( "load", () => { [].forEach.call( document.querySelectorAll("#saml_form input[name=roleIndex]"), (el) => { el.onclick = (e) => { if (e.clientX !== 0 && e.clientY !== 0) { el.form.submit(); } }; } ); }, false );