diff --git a/.gitignore b/.gitignore index 078ed13..691639c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ node_modules lib -static/*.js -conf -plugin_packages \ No newline at end of file +static +kfs +plugin \ No newline at end of file diff --git a/backendsrc/FrontblockAdmin.ts b/backendsrc/FrontblockAdmin.ts index 79aec4c..6684411 100644 --- a/backendsrc/FrontblockAdmin.ts +++ b/backendsrc/FrontblockAdmin.ts @@ -3,44 +3,75 @@ import * as Logger from 'log4js' import { Plugin, socketioRPC } from 'frontblock-generic/Plugin'; import { ErrorResponse, SuccessResponse } from 'frontblock-generic/Types'; -//import { FrontblockApiConf } from "frontblock/FrontblockApiClient" -import {PluginManager} from "live-plugin-manager"; +import express = require('express'); +import http = require('http'); +import https = require('https'); +import fs = require('fs'); +import bsock = require('bsock'); +import fetch = require("node-fetch"); +import { async } from 'q'; -type pluginEntry = {pluginName:string} -const pluginList:pluginEntry[] = [ - {pluginName: 'frontblock'} - //{ pluginPath: '../../paymentmanager/static/Plugin', conf:{ apiHost: 'localhost' /*/ 'api.testnet.frontblock.me' */, apiPort: 10001 } }, - //{ pluginPath: '../../htmlsupplier/static/Plugin' }, -// { pluginPath: 'frontblock/FrontblockApiClient', conf:{ apiHost: /*/ 'localhost' */ 'api.testnet.frontblock.me' , apiPort: 10001 } } -] +const kfs = require("key-file-storage").default('kfs') + +type pluginEntry = + { + pluginName:string + } + +const pluginList:pluginEntry[] = + [ + //{ pluginName: 'apiclient' }, + //{ pluginName: 'paymentmanager' }, + //{ pluginName: 'wallet' }, + { pluginName: 'htmlsupplier' } + ] + +type releaseEntry = + { + tagName: string, + staticZipURL: URL, + checksumFileURL: URL + } -const express = require('express') -const http = require('http') -const bsock = require('bsock') -const kfs = require("key-file-storage").default('conf') //'conf' is a directory that will be generated if it doesn't exist Logger.configure({ - appenders: { - "admin": { type: 'stdout' }, - //app: { type: 'file', filename: 'application.log' } - }, - categories: { - default: { appenders: [ 'admin' ], level: 'debug' } - } + appenders: + { + "admin": { type: 'stdout' }, + //app: { type: 'file', filename: 'application.log' } + }, + categories: + { + default: { appenders: [ 'admin' ], level: 'debug' } + } }) const logger = Logger.getLogger("admin") -const manager = new PluginManager(); +type hookRPC = + { + type: 'hook', + generator: (socket) => Function, + unhook:(uid:string)=>Promise + } -type hookRPC = { type: 'hook', generator: (socket) => Function, unhook:(uid:string)=>Promise} -type unhookRPC = { type: 'unhook', fn: Function} -type callRPC = { type: 'call', fn: Function} +type unhookRPC = + { + type: 'unhook', + fn: Function + } -export type rpcInfo = { +type callRPC = + { + type: 'call', + fn: Function + } + +export type rpcInfo = + { owner: string, name: string, args: string, info: hookRPC | unhookRPC | callRPC -} + } /** * FrontblockAdmin @@ -61,36 +92,46 @@ export class FrontblockAdmin{ private wsServer = http.createServer() constructor(){ - if(!('FrontblockAdmin' in kfs)){ - logger.warn('No config file found! Generating one') - kfs.FrontblockAdmin = { httpPort: 8080 } + if(!('admin.conf' in kfs)){ + logger.info('Generating ./kfs/admin.conf') + kfs['admin.conf'] = { httpPort: 8080 } } - this.initialize() } private async initialize(){ - await this.loadPlugins() - this.plugins.forEach(plugin => plugin.start()) - this.startWebsocket() - this.startWebserver() + const wat = await this.fetchReleaseList('htmlsupplier') + logger.debug(wat) + //await this.downloadPlugins() + //this.plugins.forEach(plugin => plugin.start()) + //this.startWebsocket() + //this.startWebserver() } - private async loadPlugins(){ - this.plugins = [] - - pluginList.forEach(async (entry:pluginEntry) => { + private async fetchReleaseList(pluginName:string): Promise{ + const res = await fetch('https://gitea.frontblock.me/api/v1/repos/fb-vendor/' + pluginName + '/releases') + const json = await res.json(); + const releaseList:releaseEntry[] = [] - logger.info("installing plugin " + entry.pluginName) - const info = await manager.installFromNpm(entry.pluginName); - - logger.info("loading plugin " + JSON.stringify(info) ) - const clazz = manager.require(entry.pluginName); - - //let obj = new clazz.default(entry.conf) - //this.plugins.push(obj) + json.forEach((release) => { + const tagName = release.tag_name + const staticZipURL = release.assets.filter(asset => asset.name === pluginName + '.zip')[0].browser_download_url + const checksumFileURL = release.assets.filter(asset => asset.name === 'md5sum.txt')[0].browser_download_url + releaseList.push({tagName,staticZipURL,checksumFileURL}) }) - + return releaseList + } + + private async downloadPlugin(release:releaseEntry) { + } + + private async verifyPlugin(release:releaseEntry) { + } + + private async extractPlugin(release:releaseEntry) { + } + + private async installPlugin(release:releaseEntry) { } private initApis(socket){ @@ -176,7 +217,7 @@ export class FrontblockAdmin{ this.express = express() this.express.use(express.static('static')) - this.httpServer = http.Server(this.express) + this.httpServer = new http.Server(this.express) this.httpServer.listen(port, () => { logger.info('Admin panel listening for HTTP on *'+port) }) diff --git a/package-lock.json b/package-lock.json index 639f463..fa39d5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -446,11 +446,6 @@ "@types/node": "*" } }, - "@types/debug": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.4.tgz", - "integrity": "sha512-D9MyoQFI7iP5VdpEyPZyjjqIJ8Y8EDNQFIFVLOmeg1rI1xiHOChyUPMPRUVfqFCerxfE+yS3vMyj37F6IdtOoQ==" - }, "@types/express": { "version": "4.17.0", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz", @@ -523,37 +518,16 @@ "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", "dev": true }, - "@types/lockfile": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/lockfile/-/lockfile-1.0.1.tgz", - "integrity": "sha512-65WZedEm4AnOsBDdsapJJG42MhROu3n4aSSiu87JXF/pSdlubxZxp3S1yz3kTfkJ2KBPud4CpjoHVAptOm9Zmw==" - }, "@types/mime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" }, - "@types/minipass": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-2.2.0.tgz", - "integrity": "sha512-wuzZksN4w4kyfoOv/dlpov4NOunwutLA/q7uc00xU02ZyUY+aoM5PWIXEKBMnm0NHd4a+N71BMjq+x7+2Af1fg==", - "requires": { - "@types/node": "*" - } - }, "@types/node": { "version": "11.13.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.18.tgz", "integrity": "sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA==" }, - "@types/node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw==", - "requires": { - "@types/node": "*" - } - }, "@types/q": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", @@ -565,11 +539,6 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, - "@types/semver": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz", - "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==" - }, "@types/serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", @@ -585,20 +554,6 @@ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", "dev": true }, - "@types/tar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.3.tgz", - "integrity": "sha512-Z7AVMMlkI8NTWF0qGhC4QIX0zkV/+y0J8x7b/RsHrN0310+YNjoJd8UrApCiGBCWtKjxS9QhNqLi2UJNToh5hA==", - "requires": { - "@types/minipass": "*", - "@types/node": "*" - } - }, - "@types/url-join": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-0.8.3.tgz", - "integrity": "sha512-bM7dzLHuCqDNlbeOxvo/KfweN3La4d9C1VFGCgefxiZXn0JcRtyGDwWCSUEO8RrMhnx/LGhDOXP8TTokM1grSA==" - }, "@types/webpack-env": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.14.0.tgz", @@ -1790,7 +1745,8 @@ "chownr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true }, "chrome-trace-event": { "version": "1.0.2", @@ -3445,14 +3401,6 @@ } } }, - "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", - "requires": { - "minipass": "^2.2.1" - } - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -5786,65 +5734,6 @@ "type-check": "~0.3.2" } }, - "live-plugin-manager": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/live-plugin-manager/-/live-plugin-manager-0.13.2.tgz", - "integrity": "sha512-3rFAE/dkArD+OI+id0tXEUGv2htnlHUIOagNF7fzTpZb5qJVpfXHy19HjbjqLcU9rDmVAxzEDNMFDFl9eJoJyA==", - "requires": { - "@types/debug": "^4.1.4", - "@types/fs-extra": "^5.0.5", - "@types/lockfile": "^1.0.1", - "@types/node-fetch": "^2.3.2", - "@types/semver": "^6.0.0", - "@types/tar": "^4.0.0", - "@types/url-join": "0", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lockfile": "^1.0.4", - "node-fetch": "^2.3.0", - "semver": "^6.0.0", - "tar": "^4.4.8", - "url-join": "^4.0.0" - }, - "dependencies": { - "@types/fs-extra": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", - "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", - "requires": { - "@types/node": "*" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -5895,14 +5784,6 @@ "path-exists": "^3.0.0" } }, - "lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "requires": { - "signal-exit": "^3.0.2" - } - }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", @@ -6323,23 +6204,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "requires": { - "minipass": "^2.2.1" - } - }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -8908,7 +8772,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-swizzle": { "version": "0.2.2", @@ -9572,20 +9437,6 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, "terser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz", @@ -10115,11 +9966,6 @@ } } }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" - }, "url-loader": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", @@ -10575,7 +10421,8 @@ "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true }, "yargs": { "version": "12.0.5", diff --git a/package.json b/package.json index ef3609b..26afd43 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "frontblock-generic": "latest", "http": "0.0.0", "key-file-storage": "^2.2.1", - "live-plugin-manager": "^0.13.2", "log4js": "^4.4.0", "node-fetch": "^2.6.0", "socket.io": "^2.2.0"