Exemple de scripts de déploiement
Le déploiement peut se découper en plusieurs étapes :
- l'installation de l'application;
- l'installation du plugin Outlook (optionnelle);
- la création des comptes.
WARNING
Les variables d'environnement varient entre les versions 32 et 64 bits de Windows.
Installation de l'application :
# Nécessaire lors d'une exécution avec les droits administrateur.
cd %~dp0
# Installation de Seald sur le poste de manière silencieuse
.\Seald-Setup-2.3.0.exe /allusers /S
# Création du répertoire de configuration de Seald.
mkdir %APPDATA%\Seald\
# Ajout de la configuration essentielle suite à une installation programatique.
echo {"autoUpdate": "disable", "windowsRegistry": "READ_ONLY"} > %APPDATA%\Seald\config.json
Installation du plugin Outlook :
TIP
Il faut remplacer la variable d'environnement %CommonProgramFiles%
par %CommonProgramFiles(X86)%
si la version d'Outlook est en 64 bits.
# Nécessaire lors d'une exécution avec les droits administrateur.
cd %~dp0
# Ajout du certificat de signature de Seald
certutil -addstore TRUSTEDPUBLISHER "plugin-cert.cer"
# Installation des prérequis du plugin
.\vstor_redist.exe Setup /q /norestart #Installing VSTO redistributable
.\NDP472-KB4054530-x86-x64-AllOS-ENU.exe Setup /q /norestart # Installing .NET 4.7
# Installation du plugin
# %CommonProgramFiles% si Outlook 32 bits. %CommonProgramFiles(X86)% si Outlook 64 bits
"%CommonProgramFiles%\Microsoft Shared\VSTO\10.0\VSTOInstaller.exe" /s /I https://api.seald.io/outlook-v2/SealdOutlookPlugin.vsto # commande d'installation silencieuse du plugin outlook
Déploiement des règles du Smart Assistant
Il est possible de déployer un fichier de règles personnalisé du smart assistant à l'aide de la commande suivante :
copy new-rules.js %APPDATA%\Seald\rules.js
TIP
Pour plus d'information sur l'écriture et le déploiement du fichier de règle, référez vous à cette page.
TIP
Pour forcer l'activation des règles, référez vous à la configuration du plugin.
Création d'un compte et lancement:
TIP
Il faut remplacer la variable d'environnement %ProgramFiles%
par %ProgramFilesX86%
si la version de Windows est en 64 bits.
# Création de compte.
cd %ProgramFiles%\Seald
seald-cli create-account -d "Tim" -e tim@seald.io --email-validation 5f32fdb5-cb1d-4b1b-b981-d35f75e9376c:1b4e5537890f92cce85d86df22eergerg4 --accept-licence --force --accept-backup-keys
# Lance l'application. Le premier argument (string vide) permet à l'application de ne pas être stoppée à la fin du présent script
start "" "%ProgramFiles%\Seald\Seald.exe"
Exemple de script de génération de scripts de création de compte
Cet exemple de script a été écrit pour Node.js 14 LTS, et s'appuie sur le paquet csv@5.3.2
en plus de la bibliothèque standard. Des ajustements sont certainement nécessaires en fonction de l'environnement cible :
const csv = require('csv')
const fs = require('fs')
const { promisify } = require('util')
const crypto = require('crypto')
const path = require('path')
const csvPath = './mails.csv' // CSV with the "Display name" in the first colum, and the "Email address" in the second column, separated with ";"
const domainValidationKeyId = process.env.DOMAIN_ID
const domainValidationKey = process.env.DOMAIN_KEY
const outputDir = './out'
try {
fs.rmdirSync(outputDir, { recursive: true })
} catch (err) {
console.warn(err)
console.warn('directory outputDir does not exist')
} finally {
fs.mkdirSync(outputDir, { recursive: true })
}
const random = (size = 1000) => crypto.randomBytes(size)
const scrypt = (buff, salt) => new Promise((resolve, reject) => {
crypto.scrypt(
buff,
salt,
64, // 64 bytes for a 256 bits key (there is also a signing key for HMAC)
{ N: 16384, r: 8, p: 1 },
(err, key) => {
if (err) reject(err)
else resolve(key)
}
)
})
const generate = async (email, domainValidationKeyId, domainValidationKey) => {
const nonce = random(32).toString('hex')
const token = (await scrypt(
Buffer.from(`${email}-${domainValidationKey}`, 'utf8'),
Buffer.from(nonce, 'utf8')
)).toString('hex')
}
const makeScript = (displayName, emailAddress) =>
`"%LOCALAPPDATA%\\Programs\\Seald\\Seald.exe" --headless create-account -d "${displayName.replace('"', '\\"')}" -e "${emailAddress.replace('"', '\\"')}" --email-validation ${generate(emailAddress, domainValidationKeyId, domainValidationKey)} --accept-backup-keys --accept-licence --force
start "" "%LOCALAPPDATA%\\Programs\\Seald\\Seald.exe"`
const main = async () => {
const result = await promisify(csv.parse)(fs.readFileSync(csvPath), { delimiter: ';' })
result.shift() // remove header
for (const [displayName, emailAddress] of result) {
// Writes indiviual script for each user to be executed on each machine
fs.writeFileSync(path.join(outputDir, emailAddress + '.bat'), makeScript(displayName, emailAddress).replace('\n', '\r\n'))
}
}
main()