diff --git a/app/index.html b/app/index.html
index 677509da..7ed2d88e 100644
--- a/app/index.html
+++ b/app/index.html
@@ -4,7 +4,7 @@
-
+
Notes
diff --git a/app/index.js b/app/index.js
index 01050ff7..37dc6a80 100644
--- a/app/index.js
+++ b/app/index.js
@@ -7,6 +7,9 @@ const shell = require('electron').shell;
const log = require('electron-log');
const Store = require('./javascripts/main/store.js');
+const ExtensionsServer = require('./javascripts/main/extServer.js');
+ExtensionsServer.instance().createServer();
+
import menuManager from './javascripts/main/menuManager.js'
import archiveManager from './javascripts/main/archiveManager.js';
import packageManager from './javascripts/main/packageManager.js';
diff --git a/app/javascripts/main/extServer.js b/app/javascripts/main/extServer.js
new file mode 100644
index 00000000..8fcf5bd9
--- /dev/null
+++ b/app/javascripts/main/extServer.js
@@ -0,0 +1,66 @@
+const {app} = require('electron');
+var http = require('http');
+var fs = require('fs');
+var path = require('path');
+
+const mimes = {
+ '.ico': 'image/x-icon',
+ '.html': 'text/html',
+ '.js': 'text/javascript',
+ '.json': 'application/json',
+ '.css': 'text/css',
+ '.png': 'image/png',
+ '.jpg': 'image/jpeg'
+};
+
+let instance = null;
+
+class ExtensionsServer {
+
+ static instance() {
+ if(instance == null) {
+ instance = new ExtensionsServer();
+ }
+ return instance;
+ }
+
+ constructor() {
+ this.port = 45653;
+ }
+
+ getHost() {
+ return `http://localhost:${this.port}/`;
+ }
+
+ createServer() {
+ function handleRequest(req, res) {
+ const extensionsFolder = "Extensions";
+ const extensionsDir = path.join(app.getPath('userData'), extensionsFolder);
+ const modifiedReqUrl = req.url.replace(extensionsFolder, "");
+ const filePath = path.join(extensionsDir, modifiedReqUrl);
+
+ fs.exists(filePath, function(exists) {
+ if(exists && fs.lstatSync(filePath).isFile()) {
+ const ext = path.parse(filePath).ext;
+ res.setHeader("Content-Type", mimes[ext] || 'text/plain');
+ res.writeHead(200, {
+ 'Access-Control-Allow-Origin': '*'
+ });
+ fs.createReadStream(filePath).pipe(res);
+ return;
+ }
+
+ res.writeHead(404);
+ res.write('404 Not Found');
+ res.end();
+ });
+ }
+
+ var server = http.createServer(handleRequest);
+ server.listen(this.port, () => {
+ console.log(`Extensions server started at http://localhost:${this.port}`);
+ });
+ }
+}
+
+module.exports = ExtensionsServer;
diff --git a/app/javascripts/renderer/preload.js b/app/javascripts/renderer/preload.js
index a95ba1b0..edfb2997 100644
--- a/app/javascripts/renderer/preload.js
+++ b/app/javascripts/renderer/preload.js
@@ -3,6 +3,7 @@ const osLocale = require('os-locale');
const os = require('os');
const Store = require('../main/store.js');
+const ExtensionsServer = require('../main/extServer.js')
const buildEditorContextMenu = remote.require('electron-editor-context-menu');
const rendererPath = 'file://' + __dirname + '/renderer.js';
@@ -23,7 +24,7 @@ const transmitter = new Transmitter(messageBus,
},
isMacOS: PropertyType.VALUE,
appVersion: PropertyType.VALUE,
- userDataPath: PropertyType.VALUE,
+ extServerHost: PropertyType.VALUE,
useSystemMenuBar: PropertyType.VALUE,
sendIpcMessage: {
type: PropertyType.METHOD,
@@ -52,7 +53,7 @@ function loadTransmitter() {
transmitter.expose({
spellcheck: spellcheck,
- userDataPath: remote.app.getPath('userData'),
+ extServerHost: ExtensionsServer.instance().getHost(),
rendererPath: rendererPath,
isMacOS: process.platform === "darwin",
appVersion: remote.app.getVersion(),
diff --git a/app/javascripts/renderer/renderer.js b/app/javascripts/renderer/renderer.js
index 9e35ec23..19a6b343 100644
--- a/app/javascripts/renderer/renderer.js
+++ b/app/javascripts/renderer/renderer.js
@@ -83,8 +83,8 @@ async function configureWindow() {
}
async function configureDesktopManager() {
- const userDataPath = await bridge.userDataPath;
- desktopManager.desktop_setApplicationDataPath(userDataPath);
+ const extServerHost = await bridge.extServerHost;
+ desktopManager.desktop_setExtServerHost(extServerHost);
/* Handled by PackageManager */
desktopManager.desktop_setComponentInstallationSyncHandler(async (componentsData) => {
diff --git a/app/package-lock.json b/app/package-lock.json
index c3d26d09..b106d6a2 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "standard-notes",
- "version": "3.0.21",
+ "version": "3.0.22",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -1022,7 +1022,7 @@
}
},
"standard-notes-web": {
- "version": "github:standardnotes/web#ec0555ad2646eb6372c0cde273fed0c7d0ed19a8",
+ "version": "github:standardnotes/web#7cbbf5ae1bc4de8a172af78d9afb35dc43b904c8",
"from": "github:standardnotes/web"
},
"string-width": {
diff --git a/app/package.json b/app/package.json
index 2a7dbb58..7f500ff6 100644
--- a/app/package.json
+++ b/app/package.json
@@ -3,7 +3,7 @@
"productName": "Standard Notes",
"description": "A simple and private place for your notes, thoughts, and life's work.",
"author": "Standard Notes ",
- "version": "3.0.21",
+ "version": "3.0.22",
"main": "./dist/index.js",
"dependencies": {
"adm-zip": "^0.4.7",
diff --git a/package-lock.json b/package-lock.json
index 037ac4c8..a85747f3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "standard-notes",
- "version": "3.0.21",
+ "version": "3.0.22",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index 32640b9d..ba0690d8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "standard-notes",
"main": "./app/dist/index.js",
- "version": "3.0.21",
+ "version": "3.0.22",
"license": "AGPL-3.0-or-later",
"devDependencies": {
"@babel/cli": "^7.6.4",