I. Introduction▲
Dans cet article, nous allons apprendre à chiffrer vos documents locaux, vos feuilles de calcul et vos présentations avec un simple module complémentaire de chiffrement symétrique.
II. Outils▲
Nous utiliserons ONLYOFFICE Desktop Editors, une suite bureautique open source pour Linux, Windows et macOS. Ce logiciel est distribué sous la licence AGPLv3 et dispose d'une API accessible au public.
L'application prend en charge les modules complémentaires que nous utiliserons pour ajouter une couche supplémentaire de sécurité. Les modules complémentaires apportent de nouvelles fonctionnalités, ce qui est utile en matière de sécurité. Vous ne devez pas vous fier aux outils prêts à l'emploi fournis par les développeurs. Vous pouvez travailler par vous-même.
III. À propos des modules complémentaires▲
Chaque module complémentaire présente un dossier avec trois fichiers :
- HTML – pour l'interface du module complémentaire ;
- JS – pour le code du module complémentaire ;
- JSON – pour la configuration du module complémentaire.
La structure des modules est décrite ici. Des exemples de plugins sont disponibles sur ONLYOFFICE GitHub. Il suffit de taper Plugin dans le champ « Find a repository ».
IV. Deux modules pour chiffrer tous les documents▲
Pour automatiser et faciliter le chiffrement des documents, nous allons créer deux modules complémentaires :
- module de chiffrement pour les éditeurs ;
- module de l’UI pour l’application.
Pourquoi avons-nous besoin des deux ? Habituellement, un module complémentaire ONLYOFFICE ne fonctionne qu'avec un document là où il est exécuté (dans un onglet de l'application). Dans notre cas, nous voulons travailler avec tous les documents ouverts ou créés dans différents onglets sur l’application de bureau ONLYOFFICE. C'est pourquoi nous avons besoin d'un deuxième module pour l'application.
Veuillez noter que les modules complémentaires décrits ci-dessous sont des exemples que vous pouvez utiliser pour créer les vôtres.
IV-A. Module complémentaire de chiffrement pour les éditeurs▲
Nous allons créer un module complémentaire de chiffrement simple.
Voyons la configuration du module :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
{
"name"
:
"crypto"
,
"guid"
:
"asc.{22222222-2222-2222-2222-222222222222}"
,
"variations"
:
[
{
"url"
:
"index.html"
,
"icons"
:
[],
"isViewer"
:
true,
"EditorsSupport"
:
[
"word"
,
"cell"
,
"slide"
],
"isVisual"
:
false,
"isModal"
:
false,
"isInsideMode"
:
false,
"initDataType"
:
"desktop"
,
// this should be the value for this type of plugin
"initData"
:
"encryption"
,
// this should be the value for this type of plugin
"cryptoMode"
:
"2"
,
// plugin ID as it’s possible to create several encryption plugins
"cryptoDisabledForInternalCloud"
:
"true"
,
// disables encryption for ONLYOFFICE clouds
"cryptoDisabledForExternalCloud"
:
"true"
// disables encryption for 3rd party clouds
}
]
}
Vous pouvez facilement trouver les premières lignes dans la documentation. Les cinq dernières valeurs sont nouvelles, donc la documentation sera bientôt disponible.
Le code du module est assez simple.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
(
function(
window
,
undefined){
const global_password =
"{ my-super-long-password }"
;
window
.
Asc.
plugin
.
init =
function(
obj)
{
if (!
obj)
return;
switch (
obj.
type)
{
case "generatePassword"
:
{
// password generation request
this.executeMethod
(
"OnEncryption"
,
[{
type
:
"generatePassword"
,
password
:
global_password }]
);
break;
}
case "getPasswordByFile"
:
{
// file password request
this.executeMethod
(
"OnEncryption"
,
[{
type
:
"getPasswordByFile"
,
password
:
global_password }]
);
break;
}
case "setPasswordByFile"
:
{
this.executeMethod
(
"StartAction"
,
[
"Info"
,
"Save"
]
);
// saving password and file information
this.executeMethod
(
"EndAction"
,
[
"Info"
,
"Save"
]
);
break;
}
case "encryptData"
:
{
// changes encryption - not relevant for local files
this.executeMethod
(
"OnEncryption"
,
[{
type
:
"encryptData"
,
data
:
obj.
data,
check
:
true }]
);
break;
}
case "decryptData"
:
{
// changes decryption - not relevant for local files
this.executeMethod
(
"OnEncryption"
,
[{
type
:
"decryptData"
,
data
:
obj.
data,
check
:
true }]
);
break;
}
default:
break;
}
};
}
)(
window
,
undefined);
Nous voyons que dans le code ci-dessus, tous les fichiers seront cryptés avec un seul mot de passe - {my-super-long-password}. Pour plus d'informations sur la méthode de chiffrement, lisez la documentation officielle de l'API.
Ce module de chiffrement n'a pas d'interface et n'est pas exécuté par défaut. Mais l'éditeur saura quand l'utiliser à l’aide du module de l’interface utilisateur pour l'ensemble de l'application.
IV-B. Module complémentaire de l’UI pour l’application▲
Ce module n'a pas accès aux fonctions d'édition, mais possède presque la même configuration :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
{
"name"
:
"Encryption"
,
"nameLocale"
:
{
"ru"
:
"Шифрование"
,
"it"
:
"Crittografia"
,
"fr"
:
"Chiffrement"
,
"es"
:
"Encriptación"
,
"de"
:
"Verschlüsselung"
},
"guid"
:
"asc.{11111111-1111-1111-1111-111111111111}"
,
"variations"
:
[
{
"url"
:
"index.html"
,
"initDataType"
:
"desktop-external"
,
// plugins for the whole app type
"initData"
:
"encryption"
,
// indicates that the plugin is meant for encryption.
"cryptoDisabledOnStart"
:
"true"
// reset the mode on restart }
]
}
Maintenant, nous pouvons créer l'interface du module complémentaire avec index.html :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<!
DOCTYPE html
>
<html lang
=
"en"
>
<head>
<meta charset
=
"UTF-8"
/>
<meta http-equiv
=
"X-UA-Compatible"
content
=
"IE=edge,chrome=1"
>
<title>Encrypt files</title>
<script type
=
"text/javascript"
src
=
"code.js"
></script>
</head>
<body>
<p>Encryption enabled: <input id
=
"check"
type
=
"checkbox"
/></p>
</body>
</html>
Le nouvel onglet appelé « Chiffrement » apparaîtra sur la page principale de l'application :
Ajoutons maintenant l'activation du chiffrement en cochant la case :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
window
.
onload
=
function(
) {
const ASC_DESKTOP_EDITOR_DEFAULT_MODE =
0
;
const ASC_DESKTOP_EDITOR_CRYPTO_MODE =
2
;
// cryptoMode in the plugin for the editor config
document
.getElementById
(
"check"
).
onchange =
function(
) {
let mode =
this.
checked ?
ASC_DESKTOP_EDITOR_CRYPTO_MODE
:
ASC_DESKTOP_EDITOR_DEFAULT_MODE;
AscDesktopEditor.SetCryptoMode
(
""
,
mode,
function(
retCode) {
switch (
retCode) {
case 0
:
// OK
console.log
(
"OK"
);
break;
case 1
:
console.log
(
"Please, close all openfiles!"
);
break;
default:
break;
}
}
);
};
};
V. Ajoutez des modules complémentaires à l'application de bureau▲
Pour la dernière version stable (6.3), vous devez copier les dossiers contenant les plugins dans le répertoire sdkjs-plugins. Voici comment le trouver :
- pour Linux : /opt/onlyoffice/desktopeditors/editors/sdkjs-plugins/
- pour Windows : %ProgramFiles%\ONLYOFFICE\DesktopEditors\sdkjs-plugins\
Il est important que vous utilisiez le GUID des modules complémentaires comme nom de dossier.
Les instructions détaillées sont dans la documentation officielle de l'API.
VI. Travaillez avec des modules complémentaires de chiffrement▲
Après avoir ajouté les deux modules à l'application, nous verrons un nouvel onglet « Chiffrement ». Si vous cochez la case à cet endroit, tous les fichiers que vous créez et modifiez seront cryptés avec le mot de passe :
- si le chiffrement est activé, aucun mot de passe ne vous sera demandé à l'ouverture de vos fichiers protégés (appelé getPasswordByFile) ;
- si le chiffrement est désactivé ou si vous ouvrez vos fichiers dans une autre application, un mot de passe vous sera demandé.
VII. Remerciements Developpez.com▲
Nous tenons à remercier Malick pour la mise au gabarit et escartefigue pour la relecture orthographique.