view static-files/js/confirm.js @ 60:be00b5be37d6

half-baked proof of concept for popup auth flow.
author Atul Varma <avarma@mozilla.com>
date Mon, 28 Jun 2010 22:31:00 -0700
parents
children
line wrap: on
line source

// -----------------------------------------------------------------------
// ConfirmServer object
// -----------------------------------------------------------------------
// 
// This sets up an in-browser "server" that can be accessed from other
// windows via a postMessage API.

(
  function(window) {
    var ConfirmServer = window.ConfirmServer = {};

    var inRequest = false;
    var config;

    var handlers = {
      requestAccess: function(options, cb, origin) {
        if (inRequest) {
          cb({error: "already in request"});
          return;
        }

        config = Config.value;
        inRequest = true;

        if (config.state != "logged-in") {
          cb({error: "not logged in"});
          return;
        }

        if (!("trustedOrigins" in config)) {
          config.trustedOrigins = [];
        }

        if (config.trustedOrigins.indexOf(origin) != -1)
          cb({granted: true});
        else {
          var origins = window.document.querySelectorAll(".origin");
          for (var i = 0; i < origins.length; i++)
            origins[i].textContent = origin;

          var no = window.document.getElementById("no");
          var yes = window.document.getElementById("yes");

          function detach() {
            no.removeEventListener("click", onDeny, false);
            yes.removeEventListener("click", onAccept, false);
          }

          function onDeny() {
            detach();
            cb({granted: false});
          }

          function onAccept() {
            detach();
            config.trustedOrigins.push(origin);
            Config.setValue(config);
            cb({granted: true});
          }

          no.addEventListener("click", onDeny, false);
          yes.addEventListener("click", onAccept, false);
        }
      }
    };

    var server = new Summit.Server(handlers);
    window.opener.postMessage("ready", "*");
  }
)(window);