diff options
Diffstat (limited to 'extensions/pref/autoconfig/src/prefcalls.js')
-rw-r--r-- | extensions/pref/autoconfig/src/prefcalls.js | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/extensions/pref/autoconfig/src/prefcalls.js b/extensions/pref/autoconfig/src/prefcalls.js new file mode 100644 index 0000000000..b66e5df898 --- /dev/null +++ b/extensions/pref/autoconfig/src/prefcalls.js @@ -0,0 +1,225 @@ +/* global processLDAPValues */ +/* -*- tab-width: 4; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* globals gSandbox */ + +const LDAPSyncQueryContractID = "@mozilla.org/ldapsyncquery;1"; + +var gVersion; +var gIsUTF8; + +function getPrefBranch() { + return Services.prefs.getBranch(null); +} + +function pref(prefName, value) { + try { + var prefBranch = getPrefBranch(); + + if (typeof value == "string") { + if (gIsUTF8) { + prefBranch.setStringPref(prefName, value); + return; + } + prefBranch.setCharPref(prefName, value); + } else if (typeof value == "number") { + prefBranch.setIntPref(prefName, value); + } else if (typeof value == "boolean") { + prefBranch.setBoolPref(prefName, value); + } + } catch (e) { + displayError("pref", e); + } +} + +function defaultPref(prefName, value) { + try { + var prefBranch = Services.prefs.getDefaultBranch(null); + if (typeof value == "string") { + if (gIsUTF8) { + prefBranch.setStringPref(prefName, value); + return; + } + prefBranch.setCharPref(prefName, value); + } else if (typeof value == "number") { + prefBranch.setIntPref(prefName, value); + } else if (typeof value == "boolean") { + prefBranch.setBoolPref(prefName, value); + } + } catch (e) { + displayError("defaultPref", e); + } +} + +function lockPref(prefName, value) { + try { + var prefBranch = getPrefBranch(); + + if (prefBranch.prefIsLocked(prefName)) { + prefBranch.unlockPref(prefName); + } + + defaultPref(prefName, value); + + prefBranch.lockPref(prefName); + } catch (e) { + displayError("lockPref", e); + } +} + +function unlockPref(prefName) { + try { + var prefBranch = getPrefBranch(); + prefBranch.unlockPref(prefName); + } catch (e) { + displayError("unlockPref", e); + } +} + +function getPref(prefName) { + try { + var prefBranch = getPrefBranch(); + + switch (prefBranch.getPrefType(prefName)) { + case prefBranch.PREF_STRING: + if (gIsUTF8) { + return prefBranch.getStringPref(prefName); + } + return prefBranch.getCharPref(prefName); + + case prefBranch.PREF_INT: + return prefBranch.getIntPref(prefName); + + case prefBranch.PREF_BOOL: + return prefBranch.getBoolPref(prefName); + default: + return null; + } + } catch (e) { + displayError("getPref", e); + } + return undefined; +} + +function clearPref(prefName) { + try { + var prefBranch = getPrefBranch(); + prefBranch.clearUserPref(prefName); + } catch (e) {} +} + +function setLDAPVersion(version) { + gVersion = version; +} + +function getLDAPAttributes(host, base, filter, attribs, isSecure) { + try { + var urlSpec = + "ldap" + + (isSecure ? "s" : "") + + "://" + + host + + (isSecure ? ":636" : "") + + "/" + + base + + "?" + + attribs + + "?sub?" + + filter; + + // nsILDAP* are only defined in comm-central. + // eslint-disable-next-line mozilla/valid-ci-uses + var url = Services.io.newURI(urlSpec).QueryInterface(Ci.nsILDAPURL); + + var ldapquery = Cc[LDAPSyncQueryContractID].createInstance( + // eslint-disable-next-line mozilla/valid-ci-uses + Ci.nsILDAPSyncQuery + ); + // default to LDAP v3 + if (!gVersion) { + // eslint-disable-next-line mozilla/valid-ci-uses + gVersion = Ci.nsILDAPConnection.VERSION3; + } + // user supplied method + if ("processLDAPValues" in gSandbox) { + gSandbox.processLDAPValues(ldapquery.getQueryResults(url, gVersion)); + } else { + processLDAPValues(ldapquery.getQueryResults(url, gVersion)); + } + } catch (e) { + displayError("getLDAPAttributes", e); + } +} + +function getLDAPValue(str, key) { + try { + if (str == null || key == null) { + return null; + } + + var search_key = "\n" + key + "="; + + var start_pos = str.indexOf(search_key); + if (start_pos == -1) { + return null; + } + + start_pos += search_key.length; + + var end_pos = str.indexOf("\n", start_pos); + if (end_pos == -1) { + end_pos = str.length; + } + + return str.substring(start_pos, end_pos); + } catch (e) { + displayError("getLDAPValue", e); + } + return undefined; +} + +function displayError(funcname, message) { + try { + var bundle = Services.strings.createBundle( + "chrome://autoconfig/locale/autoconfig.properties" + ); + + var title = bundle.GetStringFromName("autoConfigTitle"); + var msg = bundle.formatStringFromName("autoConfigMsg", [funcname]); + Services.prompt.alert(null, title, msg + " " + message); + } catch (e) {} +} + +function getenv(name) { + try { + return Services.env.get(name); + } catch (e) { + displayError("getEnvironment", e); + } + return undefined; +} + +var APIs = { + pref, + defaultPref, + lockPref, + unlockPref, + getPref, + clearPref, + setLDAPVersion, + getLDAPAttributes, + getLDAPValue, + displayError, + getenv, +}; + +for (let [defineAs, func] of Object.entries(APIs)) { + Cu.exportFunction(func, gSandbox, { defineAs }); +} + +Object.defineProperty(Cu.waiveXrays(gSandbox), "gIsUTF8", { + get: Cu.exportFunction(() => gIsUTF8, gSandbox), +}); |