NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Force AWS Region at Login
// @namespace https://utahcon.dev/
// @version 0.2
// @license MIT
// @description Catch when AWS tries to signin to a non-preferred region, and redirect
// @author utahcon
// @match https://*.signin.aws.amazon.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=amazonaws.com
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
function build(){
const regionSelectBar = `
.regionSelectBar {
background: #CCC;
padding: 5px;
}
`.trim()
const regionSelectBarChildren = `
.regionSelectBar>* {
padding: 5px;
}`.trim()
const regionSelectBarAlert = `
.regionSelectBarAlert {
background: #6CFF01;
border: 1px solid #173700;
display: none;
}
`.trim()
let regionSelectStyleSheet = new CSSStyleSheet();
regionSelectStyleSheet.insertRule(regionSelectBar);
regionSelectStyleSheet.insertRule(regionSelectBarChildren);
regionSelectStyleSheet.insertRule(regionSelectBarAlert);
document.adoptedStyleSheets = [...document.adoptedStyleSheets, regionSelectStyleSheet];
let _regionSelectDiv = document.createElement("div");
_regionSelectDiv.setAttribute("id", "regionSelectBar");
_regionSelectDiv.classList.add("regionSelectBar");
let _regionSelectText = document.createElement("span");
_regionSelectText.textContent = "Select your default region:";
let _regionSelectDropdown = document.createElement("select");
_regionSelectDropdown.setAttribute("id", "regionSelectDropdown");
const regionList = ["eu-north-1","ap-south-1","eu-west-3","eu-west-2","eu-west-1","ap-northeast-3","ap-northeast-2","ap-northeast-1","sa-east-1","ca-central-1","ap-southeast-1","ap-southeast-2","eu-central-1","us-east-1","us-east-2","us-west-1","us-west-2"];
regionList.forEach(regionName => {
let _regionSelectDropdownOption = document.createElement("option");
_regionSelectDropdownOption.textContent = regionName;
_regionSelectDropdownOption.setAttribute("value", regionName);
_regionSelectDropdown.appendChild(_regionSelectDropdownOption)
})
let _regionSelectSubmitButton = document.createElement("button");
_regionSelectSubmitButton.setAttribute("id", "regionSelectSubmitButton");
_regionSelectSubmitButton.innerHTML = "Go";
let _regionSelectBarAlert = document.createElement("div");
_regionSelectBarAlert.setAttribute("id", "regionSelectBarAlert");
_regionSelectBarAlert.classList.add("regionSelectBarAlert");
_regionSelectBarAlert.innerHTML = "REDIRECTING";
_regionSelectDiv.appendChild(_regionSelectText);
_regionSelectDiv.appendChild(_regionSelectDropdown);
_regionSelectDiv.appendChild(_regionSelectSubmitButton);
_regionSelectDiv.appendChild(_regionSelectBarAlert);
document.body.prepend(_regionSelectDiv);
}
(function() {
'use strict';
build();
const regionSelectSubmitButton = document.getElementById("regionSelectSubmitButton");
regionSelectSubmitButton.onclick = function(){
const newRegion = document.getElementById("regionSelectDropdown").value
GM_setValue("region", newRegion);
document.location.href = document.location.href.match(/^(https:\/\/)(\w*-\w*-\d*)(.*)/)[1] + GM_getValue('region') + document.location.href.match(/^(https:\/\/)(\w*-\w*-\d*)(.*)/)[3]
}
// check if a preference has been set
let current_region = document.location.href.match(/^https:\/\/(?<region>.*).signin.aws.amazon.com/)[1];
document.getElementById("regionSelectDropdown").value = current_region;
console.log("Current Region: "+ current_region);
console.log("Desired Region: "+ GM_getValue('region', false));
if (current_region != GM_getValue('region', false)){
// redirect
let regionSelectBarAlert = document.getElementById("regionSelectBarAlert")
regionSelectBarAlert.style.display = "block";
let matches = location.href.match(/^(https:\/\/)(\w*-\w*-\d*)(.*)/);
let newLocationHref = location.href.match(/^(https:\/\/)(\w*-\w*-\d*)(.*)/)[1] + GM_getValue('region') + location.href.match(/^(https:\/\/)(\w*-\w*-\d*)(.*)/)[3];
document.location.href = newLocationHref;
}
})();