home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / components / nsLDAPPrefsService.js < prev    next >
Text File  |  2001-06-25  |  7KB  |  255 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 nsIPref            = Components.interfaces.nsIPref;
  34. const nsILDAPURL         = Components.interfaces.nsILDAPURL;
  35. const nsILDAPService     = Components.interfaces.nsILDAPService;
  36.  
  37. /* nsLDAPPrefs service */
  38. function nsLDAPPrefsService() {
  39.   var arrayOfDirectories = null;
  40.   var j = 0;
  41.   try {
  42.     gPrefInt = Components.classes["@mozilla.org/preferences;1"];
  43.     gPrefInt = gPrefInt.getService(nsIPref);
  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 children = gPrefInt.CreateChildList("ldap_2.servers");
  51.   if(children) {
  52.     arrayOfDirectories = children.split(';');
  53.     this.availDirectories = new Array();
  54.     var position;
  55.     var description;
  56.     for (var i=0; i<arrayOfDirectories.length; i++)
  57.     {
  58.       if ((arrayOfDirectories[i] != "ldap_2.servers.pab") && 
  59.         (arrayOfDirectories[i] != "ldap_2.servers.history")) {
  60.         try{
  61.           position = gPrefInt.GetIntPref(arrayOfDirectories[i]+".position");
  62.         }
  63.         catch(ex){
  64.           position = 1;
  65.         }
  66.         try{
  67.           dirType = gPrefInt.GetIntPref(arrayOfDirectories[i]+".dirType");
  68.         }
  69.         catch(ex){
  70.           dirType = 1;
  71.         }
  72.         if ((position != 0) && (dirType == 1)) {
  73.           try{
  74.             description = gPrefInt.CopyUnicharPref(arrayOfDirectories[i]+".description");
  75.           }
  76.           catch(ex){
  77.             description = null;
  78.           }
  79.           if (description) {
  80.             this.availDirectories[j] = new Array(2);
  81.             this.availDirectories[j][0] = arrayOfDirectories[i];
  82.             this.availDirectories[j][1] = description;
  83.             j++;
  84.           }
  85.         }
  86.       }
  87.     }
  88.   }
  89.   this.migrate();
  90. }
  91. nsLDAPPrefsService.prototype.prefs_migrated = false;
  92. nsLDAPPrefsService.prototype.availDirectories = null;
  93.  
  94. nsLDAPPrefsService.prototype.QueryInterface =
  95. function (iid) {
  96.  
  97.     if (!iid.equals(nsISupports) &&
  98.         !iid.equals(NS_LDAPPREFSSERVICE_IID))
  99.         throw Components.results.NS_ERROR_NO_INTERFACE;
  100.  
  101.     return this;
  102. }
  103.  
  104. /* migrate 4.x ldap prefs to mozilla format. 
  105.    Converts hostname, basedn, port to uri (nsLDAPURL).    
  106.  */
  107. nsLDAPPrefsService.prototype.migrate = 
  108. function () {
  109.   var pref_string;
  110.   var ldapUrl=null;
  111.   var enable = false;
  112.   if (this.prefs_migrated) return;
  113.   var gPrefInt = null;
  114.   var host;
  115.   var dn;
  116.   try {
  117.     gPrefInt = Components.classes["@mozilla.org/preferences;1"];
  118.     gPrefInt = gPrefInt.getService(Components.interfaces.nsIPref);
  119.   }
  120.   catch (ex) {
  121.     dump("failed to get prefs service!\n");
  122.     return;
  123.   }
  124.   var migrated = false;
  125.   try{
  126.     migrated = gPrefInt.GetBoolPref("ldap_2.prefs_migrated");
  127.   }
  128.   catch(ex){}
  129.   if (migrated){
  130.     this.prefs_migrated = true;
  131.     return;
  132.   }
  133.   try{
  134.     var useDirectory = gPrefInt.GetBoolPref("ldap_2.servers.useDirectory");
  135.   }
  136.   catch(ex) {}
  137.   try {
  138.     var ldapService = Components.classes[
  139.         "@mozilla.org/network/ldap-service;1"].
  140.         getService(Components.interfaces.nsILDAPService);
  141.   }
  142.   catch (ex)
  143.   { 
  144.     dump("failed to get ldap service!\n");
  145.     ldapService = null;
  146.   }
  147.   for (var i=0; i < this.availDirectories.length; i++) {
  148.     pref_string = this.availDirectories[i][0];
  149.     try{
  150.       host = gPrefInt.CopyCharPref(pref_string + ".serverName");
  151.     }
  152.     catch (ex) {
  153.       host = null;
  154.     }
  155.     if (host) {
  156.       try {
  157.         ldapUrl = Components.classes["@mozilla.org/network/ldap-url;1"];
  158.         ldapUrl = ldapUrl.createInstance().QueryInterface(nsILDAPURL);
  159.       }
  160.       catch (ex) {
  161.         dump("failed to get ldap url!\n");
  162.         return;
  163.       }
  164.       ldapUrl.host = host;
  165.       try{
  166.         dn = gPrefInt.CopyUnicharPref(pref_string + ".searchBase");
  167.       }
  168.       catch (ex) {
  169.         dn = null;
  170.       }
  171.       if (dn && ldapService)
  172.         ldapUrl.dn = ldapService.UCS2toUTF8(dn);
  173.       try {
  174.         var port = gPrefInt.GetIntPref(pref_string + ".port");
  175.       }
  176.       catch(ex) {
  177.         port = 389;
  178.       }
  179.       ldapUrl.port = port;
  180.       ldapUrl.scope = 2;
  181.       gPrefInt.SetCharPref(pref_string + ".uri", ldapUrl.spec);
  182.       /* is this server selected for autocompletion? 
  183.          if yes, convert the preference to mozilla format.
  184.          Atmost one server is selected for autocompletion. 
  185.        */
  186.       if (useDirectory && !enable){
  187.         try {
  188.          enable = gPrefInt.GetBoolPref(pref_string + ".autocomplete.enabled");
  189.         } 
  190.         catch(ex) {}
  191.         if (enable) {
  192.           gPrefInt.SetCharPref("ldap_2.servers.directoryServer", pref_string);
  193.         }
  194.       }
  195.     }
  196.   }
  197.   try {
  198.     gPrefInt.SetBoolPref("ldap_2.prefs_migrated", true);
  199.     gPrefInt.savePrefFile(null);
  200.   }
  201.   catch (ex) {dump ("ERROR:" + ex + "\n");}
  202.     
  203.   this.prefs_migrated = true;
  204. }
  205.  
  206. /* factory for nsLDAPPrefs service (nsLDAPPrefsService) */
  207.  
  208. var nsLDAPPrefsFactory = new Object();
  209.  
  210. nsLDAPPrefsFactory.createInstance =
  211.  
  212. function (outer, iid) {
  213.     if (outer != null)
  214.         throw Components.results.NS_ERROR_NO_AGGREGATION;
  215.  
  216.     if (!iid.equals(nsISupports))
  217.         throw Components.results.NS_ERROR_INVALID_ARG;
  218.  
  219.     return new nsLDAPPrefsService();
  220. }
  221.  
  222. var nsLDAPPrefsModule = new Object();
  223. nsLDAPPrefsModule.registerSelf =
  224. function (compMgr, fileSpec, location, type)
  225. {
  226.     compMgr.registerComponentWithType(NS_LDAPPREFSSERVICE_CID,
  227.                                       "nsLDAPPrefs Service",
  228.                                       NS_LDAPPREFSSERVICE_CONTRACTID, fileSpec,
  229.                                       location, true, true, type);
  230. }
  231.  
  232. nsLDAPPrefsModule.unregisterSelf =
  233. function(compMgr, fileSpec, location)
  234. {
  235.     compMgr.unregisterComponentSpec(NS_LDAPPREFSSERVICE_CID, fileSpec);
  236. }
  237.  
  238. nsLDAPPrefsModule.getClassObject =
  239. function (compMgr, cid, iid) {
  240.     if (cid.equals(NS_LDAPPREFSSERVICE_CID))
  241.         return nsLDAPPrefsFactory;
  242.     throw Components.results.NS_ERROR_NO_INTERFACE;  
  243. }
  244.  
  245. nsLDAPPrefsModule.canUnload =
  246. function(compMgr)
  247. {
  248.     return true;
  249. }
  250.  
  251. /* entrypoint */
  252. function NSGetModule(compMgr, fileSpec) {
  253.     return nsLDAPPrefsModule;
  254. }
  255.