Maximilian Krambach 1954d27be8 js: revert changes to class read/write restriction
--

* undoes 94ee0988d4eaac27785de6efb7c19ca9976e1e9c and
  e16a87e83910ebb6bfdc4148369165f121f0997e.
  I do not fully understand why my approach was bad, but I am not in
  a position to argue. This revert was requested to me after a review,
  and I'm doing it in the assumption that more experienced people know
  better than me.
* unittests: Also changed some outdated tests that stopped working
  since 754e799d35fd62d7a979452f44342934659908c7 (as GPGME_Key is not
  exported, one cannot check for instanceof in the tests anymore)
2018-08-20 12:12:43 +02:00
..
2018-07-04 12:11:35 +02:00
2018-04-25 19:45:39 +02:00
2018-06-06 13:05:53 +02:00
2018-06-13 15:22:03 +02:00
2018-07-10 14:32:26 +02:00

gpgme.js, as contained in this directory, is a javascript library for direct use
of gnupg in browsers, with the help of nativeMessaging.

Prerequisites:
--------------
gpgme.js will make use of the application gpgme-json, which is distributed with
gpgme. Gpgme-json needs to be installed; it will further need to accept the
browser extension in the manifest file.

Building gpgme.js
-----------------
gpgme.js uses webpack, and thus depends on nodejs for building. All
dependencies will be installed (in a local subdirectory) with the command
`npm install`.

To create a current version of the package, the command is
`npx webpack --config webpack.conf.js`.
If you want a more debuggable (i.e. not minified) build, just change the mode
in webpack.conf.js.

Demo and Test WebExtension:
---------------------------

The Demo Extension shows simple examples of the usage of gpgme.js.

The BrowsertestExtension runs more intensive tests (using the mocha and chai
frameworks). Tests from BrowserTestExtension/tests will be run against the
gpgmejs.bundle.js itself. They aim to test the outward facing functionality
and API.

Unittests as defined in ./unittests.js will be bundled in
gpgmejs_unittests.bundle.js, and test the separate components of gpgme.js,
which mostly are not exported.

The file `build_extension.sh` may serve as a pointer on how to build and
assemble these two Extensions and their dependencies. It can directly
be used in most linux systems.

The resulting folders can just be included in the extensions tab of the browser
in questions (extension debug mode needs to be active). For chrome, selecting
the folder is sufficient, for firefox, the manifest.json needs to be selected.
Please note that it is just for demonstration/debug purposes!

For the Extensions to successfully communicate with gpgme-json, a manifest file
is needed.

- `~/.config/chromium/NativeMessagingHosts/gpgmejson.json`

In the browsers' nativeMessaging configuration folder a file 'gpgmejs.json'
is needed, with the following content:

- For Chrome/Chromium:
  ```
  {
    "name": "gpgmejson",
    "description": "This is a test application for gpgme.js",
    "path": "/usr/bin/gpgme-json",
    "type": "stdio",
    "allowed_origins": ["chrome-extension://ExtensionIdentifier/"]
  }
  ```
  The usual path for Linux is similar to:
  `~/.config/chromium/NativeMessagingHosts/gpgmejson.json` for
  For Windows, the path to the manifest needs to be placed in
  `HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\gpgmejson`

  - For firefox:
  ```
  {
    "name": "gpgmejson",
    "description": "This is a test application for gpgme.js",
    "path": "/usr/bin/gpgme-json",
    "type": "stdio",
    "allowed_extensions": ["ExtensionIdentifier@temporary-addon"]
  }
  ```

  The ExtensionIdentifier can be seen as Extension ID on the about:addons page
  if addon-debugging is active. In firefox, the temporary addon is removed once
  firefox exits, and the identifier will need to be changed more often.

  The manifest for linux is usually placed at:
    `~/.mozilla/native-messaging-hosts/gpgmejson.json`

Documentation
-------------

The documentation can be built by jsdoc. It currently uses the command
`./node_modules/.bin/jsdoc -c jsdoc.conf`.