Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
try {
fs.accessSync(manifestPath, fs.R_OK);
} catch (err) {
return Promise.reject(`Couldn't read ${manifestPath}`);
}
let manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
return createJetpackXpi(manifest, { addonDir, destDir }).then((xpiPath) => {
fs.renameSync(xpiPath, destFile);
});
}
}
// we perform some Voodoo tricks to extract the private _addonDetails method
// (which uses the _sanitizePref method) from FirefoxProfile
function FirefoxProfileVoodoo() {}
FirefoxProfileVoodoo.prototype._addonDetails = FirefoxProfile.prototype._addonDetails;
FirefoxProfileVoodoo.prototype._sanitizePref = FirefoxProfile.prototype._sanitizePref;
// and now more Voodoo tricks to turn the (blocking) callback-based method
// into a simple synchronous method
function getLegacyAddonId(addonPath: string): string {
let addonDetails: any;
let voodoo = new FirefoxProfileVoodoo();
voodoo._addonDetails(addonPath, result => addonDetails = result);
return addonDetails.id;
}
fs.accessSync(manifestPath, fs.R_OK);
} catch (err) {
return Promise.reject(`Couldn't read ${manifestPath}`);
}
let manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
return createJetpackXpi(manifest, { addonDir, destDir }).then((xpiPath) => {
fs.renameSync(xpiPath, destFile);
});
}
}
// we perform some Voodoo tricks to extract the private _addonDetails method
// (which uses the _sanitizePref method) from FirefoxProfile
function FirefoxProfileVoodoo() {}
FirefoxProfileVoodoo.prototype._addonDetails = FirefoxProfile.prototype._addonDetails;
FirefoxProfileVoodoo.prototype._sanitizePref = FirefoxProfile.prototype._sanitizePref;
// and now more Voodoo tricks to turn the (blocking) callback-based method
// into a simple synchronous method
function getLegacyAddonId(addonPath: string): string {
let addonDetails: any;
let voodoo = new FirefoxProfileVoodoo();
voodoo._addonDetails(addonPath, result => addonDetails = result);
return addonDetails.id;
}
export async function isDefaultProfile(
profilePathOrName: string,
ProfileFinder?: typeof FirefoxProfile.Finder = FirefoxProfile.Finder,
fsStat?: typeof fs.stat = fs.stat,
): Promise {
if (DEFAULT_PROFILES_NAMES.includes(profilePathOrName)) {
return true;
}
const baseProfileDir = ProfileFinder.locateUserDirectory();
const profilesIniPath = path.join(baseProfileDir, 'profiles.ini');
try {
await fsStat(profilesIniPath);
} catch (error) {
if (isErrorWithCode('ENOENT', error)) {
log.debug(`profiles.ini not found: ${error}`);
// No profiles exist yet, default to false (the default profile name contains a
// random generated component).
profileDirectory: config.srcProfileDir,
destinationDirectory: config.profileDir
},
(err, profile) => {
if (err || !profile) {
reject(err);
} else {
profile.shouldDeleteOnExit(false);
resolve(profile);
}
});
} else {
await fs.ensureDir(config.profileDir);
let profile = new FirefoxProfile({
destinationDirectory: config.profileDir
});
profile.shouldDeleteOnExit(false);
resolve(profile);
}
});
}
return new Promise(async (resolve, reject) => {
if (config.srcProfileDir) {
FirefoxProfile.copy({
profileDirectory: config.srcProfileDir,
destinationDirectory: config.profileDir
},
(err, profile) => {
if (err || !profile) {
reject(err);
} else {
profile.shouldDeleteOnExit(false);
resolve(profile);
}
});
} else {
await fs.ensureDir(config.profileDir);
let profile = new FirefoxProfile({
const profileIsDirPath = await isDirectory(profilePath);
if (profileIsDirPath) {
log.debug(`Using profile directory "${profilePath}"`);
destinationDirectory = profilePath;
} else {
log.debug(`Assuming ${profilePath} is a named profile`);
destinationDirectory = await getProfilePath(profilePath);
if (!destinationDirectory) {
throw new UsageError(
`The request "${profilePath}" profile name ` +
'cannot be resolved to a profile path'
);
}
}
const profile = new FirefoxProfile({destinationDirectory});
return await configureThisProfile(profile, {app, customPrefs});
}
export async function createProfile(
{
app,
configureThisProfile = configureProfile,
customPrefs = {},
}: CreateProfileParams = {},
): Promise {
const profile = new FirefoxProfile();
return await configureThisProfile(profile, {app, customPrefs});
}
onPrepare (config, caps) {
this.config = config
this.caps = caps
/**
* don't do anything if no profile is specified
*/
if (!config.firefoxProfile) {
return
}
this.profile = new FirefoxProfile()
for (let preference in config.firefoxProfile) {
/**
* extensions are getting set at the end
*/
if (SPECIAL_PROPERTIES.includes(preference)) {
continue
}
this.profile.setPreference(preference, config.firefoxProfile[preference])
}
if (this.config.firefoxProfile.proxy) {
this.profile.setProxy(this.config.firefoxProfile.proxy)
}