UiO og HiO - Fronter (Blyant) - Autologin

By Zuo Last update Apr 14, 2010 — Installed 233 times.

There are 2 previous versions of this script.

// ==UserScript==
// @name           UiO og HiO - Fronter (Blyant) - Autologin
// @namespace      ...
// @description    Automatic login for University of Oslo (Universitetet i Oslo) and Oslo University College (Høyskolen i Oslo). Do ONLY use on private machine as username and password are stored in plain text!
// @include        *://blyant.uio.no/*
// @include        *://fronter.com/hio/*
// ==/UserScript==

// Login information (["user", "pass", "lang"])
var login = ["usernamehere", 'passhere', "no"];

/* Possible values for "lang":
  +--------------+------------------+
  | Value        | Result           |
  +--------------+------------------+
  | default_lang | Default language |
  | no           | Norsk Bokmål     |
  | no-nn        | Norsk Nynorsk    |
  | en           | English          |
  | fr           | Français         |
  | de           | Deutsch          |
  | es           | Español          |
  +--------------+------------------+*/

////////////////////////////////////////////////////
// DO NOT MODIFY BELOW UNLESS SOMETHING IS BROKEN //
////////////////////////////////////////////////////

var doDisable = 1; // disable form while working?

var languages = [];
languages["default_lang"] = "Default language";
languages["no"] = "Norsk Bokmål";
languages["no-nn"] = "Norsk Nynorsk";
languages["en"] = "English";
languages["fr"] = "Français";
languages["de"] = "Deutsch";
languages["es"] = "Español";

var messages = [];
messages["-3"] = "Error: Login language is invalid, refer to line 12 in the Greasemonkey script for help.";
messages["-2"] = "Error: The login data array is not 3 in size!";
messages["-1"] = "Error: The login data contains a syntax error, probably where username and password is stored.";
messages["0"] = "Error: The login data appears to be blank.";

var urls = [
  "https://blyant.uio.no/",            // referrer login for UiO
  "https://fronter.com/hio/",          // referrer login for HiO
  "https://blyant.uio.no/index.phtml", // special referrer login for UiO
];

function shouldSkip() {
  try {
    var ref = unsafeWindow.document.referrer + "";
    if(ref.match(/\?logout=1/))
      return true;
    if(ref.match(/\/index\.phtml$/))
      return true;
    if(ref == urls[0] || ref == urls[1])
      return true;
  } catch(e) {}
  return false;
}

function isFronter() {
  var form;
  try {
    var forms = unsafeWindow.document.getElementsByTagName("form");
    for(var i=0; i<forms.length; i++) {
      form = forms[i];
      if(form.action == urls[2] || form.name == "loginform" && form.action.match(/index\.phtml/)) { // the page contains the login form
        var hasFound = 0;
        var retInputs = [];
        var inputs = form.getElementsByTagName("input");
        for(var j=0; j<inputs.length; j++) { // check that the input fields we need exist
          var input = inputs[j];
          if(input.name == "fronter_request_token")
            hasFound++;
          if(input.name == "username") {
            retInputs["user"] = input;
            hasFound++;
          }
          if(input.name == "password") {
            retInputs["pass"] = input;
            hasFound++;
          }
          if(input.value == "Login" || input.id == "login_button") {
            retInputs["submit"] = input;
            hasFound++;
          }
        }
        var selects = form.getElementsByTagName("select");
        if(selects)
          for(var j=0; j<selects.length; j++) {
            var select = selects[j];
            var selinputs = select.getElementsByTagName("option");
            if(selinputs)
              for(var k=0; k<selinputs.length; k++) {
                var selinput = selinputs[k];
                if(selinput.value == login[2]) {
                  select.selectedIndex = k;
                  retInputs["lang"] = select;
                }
              }
          }
        if(hasFound >= 3) { // this has to be fronter login page, return true! (fronter_request_token is kind of optional, thus 3 or 4 is accepted)
          retInputs["form"] = form;
          return [true, retInputs];
        }
      }
    }
  } catch(e) {}
  return [false, null];
}

function validLogin() {
  try {
    if(login.length != 3)
      return -2;
    try {
      if(languages[login[2]].length < 1)
        return -3;
    } catch(e2) {return -3;}
    if(login[0].length > 1 && login[1].length > 1)
      return 1;
  } catch(e) {return -1;}
  return 0;
}

function doLogin(array) {
  // fill out and submit (language filled out when isFronter was called)
  array[1]["user"].value = login[0];
  array[1]["pass"].value = login[1];
  array[1]["form"].submit();
  if(doDisable) {
    array[1]["user"].disabled = "disabled";
    array[1]["pass"].disabled = "disabled";
    array[1]["lang"].disabled = "disabled";
    array[1]["submit"].disabled = "disabled";
  }
}

(function() {
  if(shouldSkip())
    return; // do not try to login if already has (or if signed out)
  var form = isFronter();
  if(form[0] == true) {
    var state = validLogin();
    if(state < 1)
      alert(messages[""+state]);
    else
      doLogin(form);
  }
})();