• Post category:Общее
  • Запись изменена:24.01.2024

Чтобы защитить ваши локальные документы, электронные таблицы и презентации, зашифруйте их с помощью простого плагина симметричного шифрования. Шаги ниже объясняют, как это сделать.

Шаг 1. Создание плагина шифрования для редактора

Чтобы собрать плагин шифрования, вам нужно создать три файла:

  • HTML-файл с интерфейсом,
  • JS-файл с кодом,
  • JSON-файл с конфигурацией.
    Более подробную информацию о структуре плагина можно найти здесь.

Смотрим конфиг:

{
    "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",
            "initData"        : "encryption",
            "cryptoMode"      : "2",

            "cryptoDisabledForInternalCloud" : "true",
            "cryptoDisabledForExternalCloud" : "true"
        }
    ]
}

Все параметры конфига описаны в документации.

После того, как файл конфигурации будет готов, создайте файл кода плагина со следующим содержимым:

(function (window, undefined) {
    const global_password = "{my-super-long-password}";
    window.Asc.plugin.init = function (obj)
    {
        if (!obj)
        return;

        switch (obj.type)
        {
            case "generatePassword":
            {
                this.executeMethod ("OnEncryption", [{type: "generatePassword", password: global_password}]);
                break;
            }
            case "getPasswordByFile":
            {
                this.executeMethod("OnEncryption", [{type: "getPasswordByFile", password: global_password}]);
                break;
            }
            case "setPasswordByFile":
            {
                this.executeMethod("StartAction", ["Info", "Save"]);
                this.executeMethod("EndAction", ["Info", "Save"]);
                break;
            }
            case "encryptData":
            {
                this.executeMethod("OnEncryption", [{type: "encryptData", data: obj.data, check: true}]);
                break;
            }
            case "decryptData":
            {
                this.executeMethod("OnEncryption", [{type: "decryptData", data: obj.data, check: true}]);
                break;
            }
            default:
                break;
        }
    };
})(window, undefined);

Как мы видим из кода выше, все файлы будут зашифрованы одним паролем — {my-super-long-password}. Методы OnEncryption, StartAction, EndAction можно найти в документации API плагинов и макросов.

Обратите внимание, что типы encryptData и decryptData метода OnEncryption не относятся к локальным файлам.

Шаг 2. Создание плагина пользовательского интерфейса для приложения

Плагин Encryption не имеет интерфейса и не может работать по умолчанию. Работает только внутри документа, в котором он открыт (на одной вкладке приложения). Для работы со всеми документами, открытыми или созданными на разных вкладках рабочего стола Р7, необходимо создать UI-плагин для приложения. Это помогает использовать плагин Шифрования, когда это необходимо для всего приложения.

Этот плагин не имеет доступа к функциям редактирования, но имеет почти такую же конфигурацию:

{
    "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",
            "initData"      : "encryption",

            "cryptoDisabledOnStart" : "true"
        }
    ]
}

Файл index.html будет выглядеть следующим образом:

<!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>

С ним мы получим новую вкладку Шифрование на главной странице приложения:

Включить шифрование поставив галочку:

window.onload = function() {
  const ASC_DESKTOP_EDITOR_DEFAULT_MODE = 0;
  const ASC_DESKTOP_EDITOR_CRYPTO_MODE = 2;

  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:
          console.log("OK");
          break;
        case 1:
          console.log("Please, close all open files!");
          break;
        default:
          break;
      }
    });
  };
};

Шаг 3. Добавление плагинов в десктопное приложение

Скопируйте папки с плагинами в каталог sdkjs-plugins. Путь к папке зависит от используемой операционной системы:

  • Для Linux — /opt/Р7/desktopeditors/editors/sdkjs-plugins/
  • Для Windows — %ProgramFiles%\Р7\DesktopEditors\sdkjs-plugins\

Важно, чтобы вы использовали GUID плагинов в качестве имени папки.

Подробные инструкции можно найти здесь.

Шаг 4. Работа с плагинами шифрования

После добавления обоих плагинов в приложение появится новая вкладка Шифрование. Если установить там флажок, все создаваемые и редактируемые файлы будут зашифрованы паролем:

  • Если шифрование останется включенным, пароль не будет требоваться при открытии защищенных файлов (будет вызываться getPasswordByFile).
  • Если шифрование отключено или файлы открываются в другом приложении, пароль будет запрошен.