michael@0: /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: const nsILDAPURL = Components.interfaces.nsILDAPURL; michael@0: const LDAPURLContractID = "@mozilla.org/network/ldap-url;1"; michael@0: const nsILDAPSyncQuery = Components.interfaces.nsILDAPSyncQuery; michael@0: const LDAPSyncQueryContractID = "@mozilla.org/ldapsyncquery;1"; michael@0: const nsIPrefService = Components.interfaces.nsIPrefService; michael@0: const PrefServiceContractID = "@mozilla.org/preferences-service;1"; michael@0: michael@0: // set on a platform specific basis in platform.js michael@0: platform = { value: "" }; michael@0: michael@0: var gVersion; michael@0: michael@0: function getPrefBranch() { michael@0: michael@0: var prefService = Components.classes[PrefServiceContractID] michael@0: .getService(nsIPrefService); michael@0: return prefService.getBranch(null); michael@0: } michael@0: michael@0: function pref(prefName, value) { michael@0: michael@0: try { michael@0: var prefBranch = getPrefBranch(); michael@0: michael@0: if (typeof value == "string") { michael@0: prefBranch.setCharPref(prefName, value); michael@0: } michael@0: else if (typeof value == "number") { michael@0: prefBranch.setIntPref(prefName, value); michael@0: } michael@0: else if (typeof value == "boolean") { michael@0: prefBranch.setBoolPref(prefName, value); michael@0: } michael@0: } michael@0: catch(e) { michael@0: displayError("pref", e); michael@0: } michael@0: } michael@0: michael@0: function defaultPref(prefName, value) { michael@0: michael@0: try { michael@0: var prefService = Components.classes[PrefServiceContractID] michael@0: .getService(nsIPrefService); michael@0: var prefBranch = prefService.getDefaultBranch(null); michael@0: if (typeof value == "string") { michael@0: prefBranch.setCharPref(prefName, value); michael@0: } michael@0: else if (typeof value == "number") { michael@0: prefBranch.setIntPref(prefName, value); michael@0: } michael@0: else if (typeof value == "boolean") { michael@0: prefBranch.setBoolPref(prefName, value); michael@0: } michael@0: } michael@0: catch(e) { michael@0: displayError("defaultPref", e); michael@0: } michael@0: } michael@0: michael@0: function lockPref(prefName, value) { michael@0: michael@0: try { michael@0: var prefBranch = getPrefBranch(); michael@0: michael@0: if (prefBranch.prefIsLocked(prefName)) michael@0: prefBranch.unlockPref(prefName); michael@0: michael@0: defaultPref(prefName, value); michael@0: michael@0: prefBranch.lockPref(prefName); michael@0: } michael@0: catch(e) { michael@0: displayError("lockPref", e); michael@0: } michael@0: } michael@0: michael@0: function unlockPref(prefName) { michael@0: michael@0: try { michael@0: michael@0: var prefBranch = getPrefBranch(); michael@0: prefBranch.unlockPref(prefName); michael@0: } michael@0: catch(e) { michael@0: displayError("unlockPref", e); michael@0: } michael@0: } michael@0: michael@0: function getPref(prefName) { michael@0: michael@0: try { michael@0: var prefBranch = getPrefBranch(); michael@0: michael@0: switch (prefBranch.getPrefType(prefName)) { michael@0: michael@0: case prefBranch.PREF_STRING: michael@0: return prefBranch.getCharPref(prefName); michael@0: michael@0: case prefBranch.PREF_INT: michael@0: return prefBranch.getIntPref(prefName); michael@0: michael@0: case prefBranch.PREF_BOOL: michael@0: return prefBranch.getBoolPref(prefName); michael@0: default: michael@0: return null; michael@0: } michael@0: } michael@0: catch(e) { michael@0: displayError("getPref", e); michael@0: } michael@0: } michael@0: michael@0: function clearPref(prefName) { michael@0: michael@0: try { michael@0: var prefBranch = getPrefBranch(); michael@0: prefBranch.clearUserPref(prefName); michael@0: } michael@0: catch(e) { michael@0: } michael@0: michael@0: } michael@0: michael@0: function setLDAPVersion(version) { michael@0: gVersion = version; michael@0: } michael@0: michael@0: michael@0: function getLDAPAttributes(host, base, filter, attribs) { michael@0: michael@0: try { michael@0: var urlSpec = "ldap://" + host + "/" + base + "?" + attribs + "?sub?" + michael@0: filter; michael@0: michael@0: var url = Components.classes["@mozilla.org/network/io-service;1"] michael@0: .getService(Components.interfaces.nsIIOService) michael@0: .newURI(urlSpec, null, null) michael@0: .QueryInterface(Components.interfaces.nsILDAPURL); michael@0: michael@0: var ldapquery = Components.classes[LDAPSyncQueryContractID] michael@0: .createInstance(nsILDAPSyncQuery); michael@0: // default to LDAP v3 michael@0: if (!gVersion) michael@0: gVersion = Components.interfaces.nsILDAPConnection.VERSION3 michael@0: // user supplied method michael@0: processLDAPValues(ldapquery.getQueryResults(url, gVersion)); michael@0: } michael@0: catch(e) { michael@0: displayError("getLDAPAttibutes", e); michael@0: } michael@0: } michael@0: michael@0: function getLDAPValue(str, key) { michael@0: michael@0: try { michael@0: if (str == null || key == null) michael@0: return null; michael@0: michael@0: var search_key = "\n" + key + "="; michael@0: michael@0: var start_pos = str.indexOf(search_key); michael@0: if (start_pos == -1) michael@0: return null; michael@0: michael@0: start_pos += search_key.length; michael@0: michael@0: var end_pos = str.indexOf("\n", start_pos); michael@0: if (end_pos == -1) michael@0: end_pos = str.length; michael@0: michael@0: return str.substring(start_pos, end_pos); michael@0: } michael@0: catch(e) { michael@0: displayError("getLDAPValue", e); michael@0: } michael@0: } michael@0: michael@0: function displayError(funcname, message) { michael@0: michael@0: try { michael@0: var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] michael@0: .getService(Components.interfaces.nsIPromptService); michael@0: var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"] michael@0: .getService(Components.interfaces.nsIStringBundleService) michael@0: .createBundle("chrome://autoconfig/locale/autoconfig.properties"); michael@0: michael@0: var title = bundle.GetStringFromName("autoConfigTitle"); michael@0: var msg = bundle.formatStringFromName("autoConfigMsg", [funcname], 1); michael@0: promptService.alert(null, title, msg + " " + message); michael@0: } michael@0: catch(e) { } michael@0: } michael@0: michael@0: function getenv(name) { michael@0: try { michael@0: var environment = Components.classes["@mozilla.org/process/environment;1"]. michael@0: getService(Components.interfaces.nsIEnvironment); michael@0: return environment.get(name); michael@0: } michael@0: catch(e) { michael@0: displayError("getEnvironment", e); michael@0: } michael@0: } michael@0: