mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 01:47:31 +09:00
203 lines
6.8 KiB
JavaScript
203 lines
6.8 KiB
JavaScript
/* 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/. */
|
|
|
|
/**
|
|
* Migrate profile (prefs and other files) from older versions of Mailnews to
|
|
* current.
|
|
* This should be run at startup. It migrates as needed: each migration
|
|
* function should be written to be a no-op when the value is already migrated
|
|
* or was never used in the old version.
|
|
*/
|
|
|
|
this.EXPORTED_SYMBOLS = [ "migrateMailnews" ];
|
|
|
|
Components.utils.import("resource:///modules/errUtils.js");
|
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
|
Components.utils.import("resource:///modules/mailServices.js");
|
|
var Ci = Components.interfaces;
|
|
var kServerPrefVersion = 1;
|
|
var kSmtpPrefVersion = 1;
|
|
var kABRemoteContentPrefVersion = 1;
|
|
var kDefaultCharsetsPrefVersion = 1;
|
|
|
|
function migrateMailnews()
|
|
{
|
|
try {
|
|
MigrateServerAuthPref();
|
|
} catch (e) { logException(e); }
|
|
|
|
try {
|
|
MigrateABRemoteContentSettings();
|
|
} catch (e) { logException(e); }
|
|
|
|
try {
|
|
MigrateDefaultCharsets();
|
|
} catch (e) { logException(e); }
|
|
}
|
|
|
|
/**
|
|
* Migrates from pref useSecAuth to pref authMethod
|
|
*/
|
|
function MigrateServerAuthPref()
|
|
{
|
|
try {
|
|
// comma-separated list of all accounts.
|
|
var accounts = Services.prefs.getCharPref("mail.accountmanager.accounts")
|
|
.split(",");
|
|
for (let i = 0; i < accounts.length; i++)
|
|
{
|
|
let accountKey = accounts[i]; // e.g. "account1"
|
|
if (!accountKey)
|
|
continue;
|
|
let serverKey = Services.prefs.getCharPref("mail.account." + accountKey +
|
|
".server");
|
|
let server = "mail.server." + serverKey + ".";
|
|
if (Services.prefs.prefHasUserValue(server + "authMethod"))
|
|
continue;
|
|
if (!Services.prefs.prefHasUserValue(server + "useSecAuth") &&
|
|
!Services.prefs.prefHasUserValue(server + "auth_login"))
|
|
continue;
|
|
if (Services.prefs.prefHasUserValue(server + "migrated"))
|
|
continue;
|
|
// auth_login = false => old-style auth
|
|
// else: useSecAuth = true => "secure auth"
|
|
// else: cleartext pw
|
|
let auth_login = true;
|
|
let useSecAuth = false; // old default, default pref now removed
|
|
try {
|
|
auth_login = Services.prefs.getBoolPref(server + "auth_login");
|
|
} catch (e) {}
|
|
try {
|
|
useSecAuth = Services.prefs.getBoolPref(server + "useSecAuth");
|
|
} catch (e) {}
|
|
|
|
Services.prefs.setIntPref(server + "authMethod",
|
|
auth_login ? (useSecAuth ?
|
|
Ci.nsMsgAuthMethod.secure :
|
|
Ci.nsMsgAuthMethod.passwordCleartext) :
|
|
Ci.nsMsgAuthMethod.old);
|
|
Services.prefs.setIntPref(server + "migrated", kServerPrefVersion);
|
|
}
|
|
|
|
// same again for SMTP servers
|
|
var smtpservers = Services.prefs.getCharPref("mail.smtpservers").split(",");
|
|
for (let i = 0; i < smtpservers.length; i++)
|
|
{
|
|
if (!smtpservers[i])
|
|
continue;
|
|
let server = "mail.smtpserver." + smtpservers[i] + ".";
|
|
if (Services.prefs.prefHasUserValue(server + "authMethod"))
|
|
continue;
|
|
if (!Services.prefs.prefHasUserValue(server + "useSecAuth") &&
|
|
!Services.prefs.prefHasUserValue(server + "auth_method"))
|
|
continue;
|
|
if (Services.prefs.prefHasUserValue(server + "migrated"))
|
|
continue;
|
|
// auth_method = 0 => no auth
|
|
// else: useSecAuth = true => "secure auth"
|
|
// else: cleartext pw
|
|
let auth_method = 1;
|
|
let useSecAuth = false;
|
|
try {
|
|
auth_method = Services.prefs.getIntPref(server + "auth_method");
|
|
} catch (e) {}
|
|
try {
|
|
useSecAuth = Services.prefs.getBoolPref(server + "useSecAuth");
|
|
} catch (e) {}
|
|
|
|
Services.prefs.setIntPref(server + "authMethod",
|
|
auth_method ? (useSecAuth ?
|
|
Ci.nsMsgAuthMethod.secure :
|
|
Ci.nsMsgAuthMethod.passwordCleartext) :
|
|
Ci.nsMsgAuthMethod.none);
|
|
Services.prefs.setIntPref(server + "migrated", kSmtpPrefVersion);
|
|
}
|
|
} catch(e) { logException(e); }
|
|
}
|
|
|
|
/**
|
|
* The address book used to contain information about wheather to allow remote
|
|
* content for a given contact. Now we use the permission manager for that.
|
|
* Do a one-time migration for it.
|
|
*/
|
|
function MigrateABRemoteContentSettings()
|
|
{
|
|
if (Services.prefs.prefHasUserValue("mail.ab_remote_content.migrated"))
|
|
return;
|
|
|
|
// Search through all of our local address books looking for a match.
|
|
let enumerator = MailServices.ab.directories;
|
|
while (enumerator.hasMoreElements())
|
|
{
|
|
let migrateAddress = function(aEmail) {
|
|
let uri = Services.io.newURI(
|
|
"chrome://messenger/content/email=" + aEmail, null, null);
|
|
Services.perms.add(uri, "image", Services.perms.ALLOW_ACTION);
|
|
}
|
|
|
|
let addrbook = enumerator.getNext()
|
|
.QueryInterface(Components.interfaces.nsIAbDirectory);
|
|
try {
|
|
// If it's a read-only book, don't try to find a card as we we could never
|
|
// have set the AllowRemoteContent property.
|
|
if (addrbook.readOnly)
|
|
continue;
|
|
|
|
let childCards = addrbook.childCards;
|
|
while (childCards.hasMoreElements())
|
|
{
|
|
let card = childCards.getNext()
|
|
.QueryInterface(Components.interfaces.nsIAbCard);
|
|
|
|
if (card.getProperty("AllowRemoteContent", false) == false)
|
|
continue; // not allowed for this contact
|
|
|
|
if (card.primaryEmail)
|
|
migrateAddress(card.primaryEmail);
|
|
|
|
if (card.getProperty("SecondEmail", ""))
|
|
migrateAddress(card.getProperty("SecondEmail", ""));
|
|
}
|
|
} catch (e) { logException(e); }
|
|
}
|
|
|
|
Services.prefs.setIntPref("mail.ab_remote_content.migrated",
|
|
kABRemoteContentPrefVersion);
|
|
}
|
|
|
|
/**
|
|
* If the default sending or viewing charset is one that is no longer available,
|
|
* change it back to the default.
|
|
*/
|
|
function MigrateDefaultCharsets()
|
|
{
|
|
if (Services.prefs.prefHasUserValue("mail.default_charsets.migrated"))
|
|
return;
|
|
|
|
let charsetConvertManager = Components.classes['@mozilla.org/charset-converter-manager;1']
|
|
.getService(Components.interfaces.nsICharsetConverterManager);
|
|
|
|
let sendCharsetStr = Services.prefs.getComplexValue(
|
|
"mailnews.send_default_charset",
|
|
Components.interfaces.nsIPrefLocalizedString).data;
|
|
|
|
try {
|
|
charsetConvertManager.getCharsetTitle(sendCharsetStr);
|
|
} catch (e) {
|
|
Services.prefs.clearUserPref("mailnews.send_default_charset");
|
|
}
|
|
|
|
let viewCharsetStr = Services.prefs.getComplexValue(
|
|
"mailnews.view_default_charset",
|
|
Components.interfaces.nsIPrefLocalizedString).data;
|
|
|
|
try {
|
|
charsetConvertManager.getCharsetTitle(viewCharsetStr);
|
|
} catch (e) {
|
|
Services.prefs.clearUserPref("mailnews.view_default_charset");
|
|
}
|
|
|
|
Services.prefs.setIntPref("mail.default_charsets.migrated",
|
|
kDefaultCharsetsPrefVersion);
|
|
}
|