home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / linux / mozilla-installer_linux / xpi / mail.xpi / bin / components / nsLDAPPrefsService.js < prev   
Text File  |  2001-11-20  |  9KB  |  310 lines

  1. /* 
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is mozilla.org code.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 2001 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s): 
  20.  * Srilatha Moturi <srilatha@netscape.com>
  21.  */
  22.  
  23. /* components defined in this file */
  24.  
  25. const NS_LDAPPREFSSERVICE_CONTRACTID =
  26.     "@mozilla.org/ldapprefs-service;1";
  27. const NS_LDAPPREFSSERVICE_CID =
  28.     Components.ID("{5a4911e0-44cd-11d5-9074-0010a4b26cda}");
  29. const NS_LDAPPREFSSERVICE_IID = Components.interfaces.nsILDAPPrefsService;
  30.  
  31. /* interfaces used in this file */
  32. const nsISupports        = Components.interfaces.nsISupports;
  33. const nsIPrefBranch      = Components.interfaces.nsIPrefBranch;
  34. const nsILDAPURL         = Components.interfaces.nsILDAPURL;
  35. const nsILDAPService     = Components.interfaces.nsILDAPService;
  36.  
  37. /* nsLDAPPrefs service */
  38. function nsLDAPPrefsService() {
  39.   var arrayOfDirectories;
  40.   var j = 0;
  41.   try {
  42.     gPrefInt = Components.classes["@mozilla.org/preferences-service;1"];
  43.     gPrefInt = gPrefInt.getService(nsIPrefBranch);
  44.   }
  45.   catch (ex) {
  46.     dump("failed to get prefs service!\n");
  47.     return;
  48.   }
  49.   /* generate the list of directory servers from preferences */
  50.   var prefCount = {value:0};
  51.   try {
  52.     arrayOfDirectories = this.getServerList(gPrefInt, prefCount);
  53.   }
  54.   catch (ex) {
  55.     arrayOfDirectories = null;
  56.   }
  57.   if (arrayOfDirectories) {
  58.     this.availDirectories = new Array();
  59.     var position;
  60.     var description;
  61.     for (var i = 0; i < prefCount.value; i++)
  62.     {
  63.       if ((arrayOfDirectories[i] != "ldap_2.servers.pab") && 
  64.         (arrayOfDirectories[i] != "ldap_2.servers.history")) {
  65.         try{
  66.           position = gPrefInt.getIntPref(arrayOfDirectories[i]+".position");
  67.         }
  68.         catch(ex){
  69.           position = 1;
  70.         }
  71.         try{
  72.           dirType = gPrefInt.getIntPref(arrayOfDirectories[i]+".dirType");
  73.         }
  74.         catch(ex){
  75.           dirType = 1;
  76.         }
  77.         if ((position != 0) && (dirType == 1)) {
  78.           try{
  79.             description = gPrefInt.getComplexValue(arrayOfDirectories[i]+".description",
  80.                                                    Components.interfaces.nsISupportsWString).data;
  81.           }
  82.           catch(ex){
  83.             description = null;
  84.           }
  85.           if (description) {
  86.             this.availDirectories[j] = new Array(2);
  87.             this.availDirectories[j][0] = arrayOfDirectories[i];
  88.             this.availDirectories[j][1] = description;
  89.             j++;
  90.           }
  91.         }
  92.       }
  93.     }
  94.   }
  95.   this.migrate();
  96. }
  97. nsLDAPPrefsService.prototype.prefs_migrated = false;
  98. nsLDAPPrefsService.prototype.availDirectories = null;
  99.  
  100. nsLDAPPrefsService.prototype.QueryInterface =
  101. function (iid) {
  102.  
  103.     if (!iid.equals(nsISupports) &&
  104.         !iid.equals(NS_LDAPPREFSSERVICE_IID))
  105.         throw Components.results.NS_ERROR_NO_INTERFACE;
  106.  
  107.     return this;
  108. }
  109.  
  110. const prefRoot = "ldap_2.servers";
  111. const parent = "ldap_2.servers.";
  112.  
  113. nsLDAPPrefsService.prototype.getServerList = 
  114. function (prefBranch, aCount) {
  115.   var prefCount = {value:0};
  116.   
  117.   // get all the preferences with prefix ldap_2.servers
  118.   var directoriesList = prefBranch.getChildList(prefRoot, prefCount);
  119.   
  120.   var childList = new Array();
  121.   var count = 0;
  122.   if (directoriesList) {
  123.     directoriesList.sort();
  124.     var prefixLen;
  125.     // lastDirectory contains the last entry that is added to the 
  126.     // array childList.
  127.     var lastDirectory = "";
  128.  
  129.     // only add toplevel prefnames to the list,
  130.     // i.e. add ldap_2.servers.<server-name> 
  131.     // but not ldap_2.servers.<server-name>.foo
  132.     for(i=0; i<prefCount.value; i++) {
  133.       // Assign the prefix ldap_2.servers.<server-name> to directoriesList
  134.       prefixLen = directoriesList[i].indexOf(".", parent.length);
  135.       if (prefixLen != -1) {
  136.         directoriesList[i] = directoriesList[i].substr(0, prefixLen);
  137.         if (directoriesList[i] != lastDirectory) {
  138.           // add the entry to childList 
  139.           // only if it is not added yet
  140.           lastDirectory = directoriesList[i];
  141.           childList[count] = directoriesList[i];
  142.           count++;
  143.         }
  144.       }
  145.     }
  146.   }
  147.  
  148.   if (!count)
  149.   // no preferences with the prefix ldap_2.servers
  150.     throw Components.results.NS_ERROR_FAILURE;
  151.  
  152.   aCount.value = count;
  153.   return childList;
  154. }
  155.  
  156. /* migrate 4.x ldap prefs to mozilla format. 
  157.    Converts hostname, basedn, port to uri (nsLDAPURL).    
  158.  */
  159. nsLDAPPrefsService.prototype.migrate = 
  160. function () {
  161.   var pref_string;
  162.   var ldapUrl=null;
  163.   var enable = false;
  164.   if (this.prefs_migrated) return;
  165.   var gPrefInt = null;
  166.   var host;
  167.   var dn;
  168.   try {
  169.     gPrefInt = Components.classes["@mozilla.org/preferences-service;1"];
  170.     gPrefInt = gPrefInt.getService(Components.interfaces.nsIPrefBranch);
  171.   }
  172.   catch (ex) {
  173.     dump("failed to get prefs service!\n");
  174.     return;
  175.   }
  176.   var migrated = false;
  177.   try{
  178.     migrated = gPrefInt.getBoolPref("ldap_2.prefs_migrated");
  179.   }
  180.   catch(ex){}
  181.   if (migrated){
  182.     this.prefs_migrated = true;
  183.     return;
  184.   }
  185.   try{
  186.     var useDirectory = gPrefInt.getBoolPref("ldap_2.servers.useDirectory");
  187.   }
  188.   catch(ex) {}
  189.   try {
  190.     var ldapService = Components.classes[
  191.         "@mozilla.org/network/ldap-service;1"].
  192.         getService(Components.interfaces.nsILDAPService);
  193.   }
  194.   catch (ex)
  195.   { 
  196.     dump("failed to get ldap service!\n");
  197.     ldapService = null;
  198.   }
  199.   for (var i=0; i < this.availDirectories.length; i++) {
  200.     pref_string = this.availDirectories[i][0];
  201.     try{
  202.       host = gPrefInt.getCharPref(pref_string + ".serverName");
  203.     }
  204.     catch (ex) {
  205.       host = null;
  206.     }
  207.     if (host) {
  208.       try {
  209.         ldapUrl = Components.classes["@mozilla.org/network/ldap-url;1"];
  210.         ldapUrl = ldapUrl.createInstance().QueryInterface(nsILDAPURL);
  211.       }
  212.       catch (ex) {
  213.         dump("failed to get ldap url!\n");
  214.         return;
  215.       }
  216.       ldapUrl.host = host;
  217.       try{
  218.         dn = gPrefInt.getComplexValue(pref_string + ".searchBase",
  219.                                       Components.interfaces.nsISupportsWString).data;
  220.       }
  221.       catch (ex) {
  222.         dn = null;
  223.       }
  224.       if (dn && ldapService)
  225.         ldapUrl.dn = ldapService.UCS2toUTF8(dn);
  226.       try {
  227.         var port = gPrefInt.getIntPref(pref_string + ".port");
  228.       }
  229.       catch(ex) {
  230.         port = 389;
  231.       }
  232.       ldapUrl.port = port;
  233.       ldapUrl.scope = 2;
  234.       gPrefInt.setCharPref(pref_string + ".uri", ldapUrl.spec);
  235.       /* is this server selected for autocompletion? 
  236.          if yes, convert the preference to mozilla format.
  237.          Atmost one server is selected for autocompletion. 
  238.        */
  239.       if (useDirectory && !enable){
  240.         try {
  241.          enable = gPrefInt.getBoolPref(pref_string + ".autocomplete.enabled");
  242.         } 
  243.         catch(ex) {}
  244.         if (enable) {
  245.           gPrefInt.setCharPref("ldap_2.servers.directoryServer", pref_string);
  246.         }
  247.       }
  248.     }
  249.   }
  250.   try {
  251.     gPrefInt.setBoolPref("ldap_2.prefs_migrated", true);
  252.     var svc = Components.classes["@mozilla.org/preferences-service;1"]
  253.                         .getService(Components.interfaces.nsIPrefService);
  254.     svc.savePrefFile(null);
  255.   }
  256.   catch (ex) {dump ("ERROR:" + ex + "\n");}
  257.     
  258.   this.prefs_migrated = true;
  259. }
  260.  
  261. /* factory for nsLDAPPrefs service (nsLDAPPrefsService) */
  262.  
  263. var nsLDAPPrefsFactory = new Object();
  264.  
  265. nsLDAPPrefsFactory.createInstance =
  266.  
  267. function (outer, iid) {
  268.     if (outer != null)
  269.         throw Components.results.NS_ERROR_NO_AGGREGATION;
  270.  
  271.     if (!iid.equals(nsISupports))
  272.         throw Components.results.NS_ERROR_INVALID_ARG;
  273.  
  274.     return new nsLDAPPrefsService();
  275. }
  276.  
  277. var nsLDAPPrefsModule = new Object();
  278. nsLDAPPrefsModule.registerSelf =
  279. function (compMgr, fileSpec, location, type)
  280. {
  281.     compMgr.registerComponentWithType(NS_LDAPPREFSSERVICE_CID,
  282.                                       "nsLDAPPrefs Service",
  283.                                       NS_LDAPPREFSSERVICE_CONTRACTID, fileSpec,
  284.                                       location, true, true, type);
  285. }
  286.  
  287. nsLDAPPrefsModule.unregisterSelf =
  288. function(compMgr, fileSpec, location)
  289. {
  290.     compMgr.unregisterComponentSpec(NS_LDAPPREFSSERVICE_CID, fileSpec);
  291. }
  292.  
  293. nsLDAPPrefsModule.getClassObject =
  294. function (compMgr, cid, iid) {
  295.     if (cid.equals(NS_LDAPPREFSSERVICE_CID))
  296.         return nsLDAPPrefsFactory;
  297.     throw Components.results.NS_ERROR_NO_INTERFACE;  
  298. }
  299.  
  300. nsLDAPPrefsModule.canUnload =
  301. function(compMgr)
  302. {
  303.     return true;
  304. }
  305.  
  306. /* entrypoint */
  307. function NSGetModule(compMgr, fileSpec) {
  308.     return nsLDAPPrefsModule;
  309. }
  310.