Resolve conflicts -- Jason, please check that the authentication logic is still good.
authorMike Taylor <mike@indexdata.com>
Thu, 21 Aug 2014 18:57:04 +0000 (19:57 +0100)
committerMike Taylor <mike@indexdata.com>
Thu, 21 Aug 2014 18:57:04 +0000 (19:57 +0100)
1  2 
src/mkws-core.js

diff --combined src/mkws-core.js
@@@ -14,7 -14,6 +14,7 @@@
  window.mkws = {
    $: $, // Our own local copy of the jQuery object
    authenticated: false,
 +  authenticating: false,
    active: false,
    log_level: 1, // Will be overridden from mkws.config, but
                  // initial value allows jQuery popup to use logging.
@@@ -168,7 -167,12 +168,12 @@@ mkws.setMkwsConfig = function(overrides
    var config_default = {
      use_service_proxy: true,
      pazpar2_url:        "//mkws.indexdata.com/service-proxy/",
-     service_proxy_auth: "//mkws.indexdata.com/service-proxy-auth",
+     service_proxy_auth: undefined, // generally rolled from the next three properties
+     // Was: //mkws.indexdata.com/service-proxy-auth
+     pp2_hostname: "mkws.indexdata.com",
+     sp_path: "service-proxy-auth",
+     sp_auth_query: undefined, // Will be: "command=auth&action=perconfig",
+     sp_auth_credentials: undefined,
      lang: "",
      sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]],
      perpage_options: [10, 20, 30, 50],
@@@ -446,7 -450,6 +451,7 @@@ mkws.pagerNext = function(tname) 
     * for the site.
     */
    function authenticateSession(auth_url, auth_domain, pp2_url) {
 +    mkws.authenticating = true;
      log("service proxy authentication on URL: " + auth_url);
  
      if (!auth_domain) {
      }, auth_domain);
  
      request.get(null, function(data) {
 +      mkws.authenticating = false;
        if (!$.isXMLDoc(data)) {
          alert("Service Proxy authentication response is not a valid XML document");
          return;
    }
  
  
 -  // This function should have no side effects if run again on an operating session, even if 
 -  // the element/selector passed causes existing widgets to be reparsed: 
 +  // The second "rootsel" parameter is passed to jQuery and is a DOM node
 +  // or a selector string you would like to constrain the search for widgets to.
 +  //
 +  // This function has no side effects if run again on an operating session,
 +  // even if the element/selector passed causes existing widgets to be reparsed: 
 +  //
 +  // (TODO: that last bit isn't true and we currently have to avoid reinitialising
 +  // widgets, MKWS-261)
    //
    // * configuration is not regenerated
    // * authentication is not performed again
    // * autosearches are not re-run
    mkws.init = function(message, rootsel) {
 -    if (message) mkws.log(message);
 +    var greet = "MKWS initialised";
 +    if (rootsel) greet += " (limited to " + rootsel + ")"
 +    if (message) greet += " :: " + message; 
 +    mkws.log(greet);
  
      // TODO: Let's remove this soon
      // Backwards compatibility: set new magic class names on any
      var then = $.now();
      // If we've made no widgets, return without starting an SP session
      // or marking MKWS active.
 -    if (makeWidgetsWithin(1, rootsel) === false) return false;
 +    if (makeWidgetsWithin(1, rootsel ? $(rootsel) : undefined) === false) {
 +      return false;
 +    }
      var now = $.now();
  
      log("walking MKWS nodes took " + (now-then) + " ms");
        }
      */
  
+     function sp_auth_url(config) {
+       if (config.service_proxy_auth) {
+       mkws.log("using pre-baked sp_auth_url '" + config.service_proxy_auth + "'");
+       return config.service_proxy_auth;
+       } else {
+       var s = '//';
+       s += config.auth_hostname ? config.auth_hostname : config.pp2_hostname;
+       s += '/' + config.sp_path;
+         var q = config.sp_auth_query;
+         if (q) {
+           s += '?' + q;
+         }
+       var c = config.sp_auth_credentials;
+       if (c) {
+         s += ('&username=' + c.substr(0, c.indexOf('/')) +
+               '&password=' + c.substr(c.indexOf('/')+1));
+       }
+       mkws.log("generated sp_auth_url '" + s + "'");
+       return s;
+       }
+     }
 -    if (mkws.config.use_service_proxy) {
 -      if (!mkws.authenticated) {
 -        authenticateSession(sp_auth_url(mkws.config),
 -                            mkws.config.service_proxy_auth_domain,
 -                            mkws.config.pazpar2_url);
 -      }
 -    } else {
 -      // raw pp2
 +    if (mkws.config.use_service_proxy && !mkws.authenticated && !mkws.authenticating) {
-       authenticateSession(mkws.config.service_proxy_auth,
++      authenticateSession(sp_auth_url(mkws.config),
 +                          mkws.config.service_proxy_auth_domain,
 +                          mkws.config.pazpar2_url);
 +    } else if (!mkws.authenticating) {
 +      // raw pp2 or we have a session already open
        runAutoSearches();
      }
      
    };
  
    $(document).ready(function() {
 -    mkws.init();
 +    if (!window.mkws_noready && !mkws.authenticating && !mkws.active) {
 +       mkws.init();
 +    }
    });
  
  })(mkws.$);