From bbec2a1602323710c82d6ff69667fe330e7a6fca Mon Sep 17 00:00:00 2001 From: Peter Sykora Date: Sun, 20 May 2018 16:08:08 +0200 Subject: [PATCH] [refactor] Refactored app using koa --- .eslintrc | 17 - .example-env | 7 + .gitignore | 30 +- Dockerfile | 4 +- Procfile | 1 + README.md | 209 +- config/index.js | 13 - index.js | 1 - knexfile.js | 53 + license-server.njsproj | 73 +- license-server.sln | 14 +- logo.png | Bin 0 -> 58012 bytes package-lock.json | 8613 +++++++++++++++-- package.json | 84 +- sql/reset-db.js | 55 - sql/schema.sql | 301 - src/app.js | 69 + src/bin/server.js | 41 + src/config/index.js | 62 + src/config/knexfile.js | 40 + {config => src/config}/supportedApps.js | 0 src/controllers/apiV1-controller.js | 102 + src/controllers/articles-controller.js | 465 + src/controllers/comments-controller.js | 84 + src/controllers/index.js | 9 + src/controllers/login-controller.js | 54 + src/controllers/modules-controller.js | 51 + src/controllers/products-controller.js | 76 + src/controllers/profiles-controller.js | 105 + src/controllers/tags-controller.js | 7 + src/controllers/users-controller.js | 96 + src/db/pool.js | 9 - src/index.js | 71 - src/lib/constants.js | 3 + src/lib/errors.js | 13 + .../index.js => lib/generateLicenseFile.js} | 4 +- src/lib/licenseUtil.js | 289 + src/lib/relations-map.js | 56 + src/lib/utils.js | 18 + src/middleware.js | 57 - src/middleware/auth-required-middleware.js | 8 + src/middleware/camelize-middleware.js | 9 + src/middleware/db-middleware.js | 32 + src/middleware/error-middleware.js | 83 + src/middleware/jwt-middleware.js | 21 + src/middleware/pager-middleware.js | 30 + src/middleware/user-middleware.js | 28 + src/migrations/20180428115300_init.js | 164 + src/routes/apiV1-router.js | 9 + src/routes/articles-router.js | 26 + src/routes/index.js | 111 +- src/routes/login-router.js | 10 + src/routes/products-router.js | 20 + src/routes/profiles-router.js | 13 + src/routes/tags-router.js | 7 + src/routes/users-router.js | 13 + src/schemas/article-schema.js | 47 + src/schemas/comment-schema.js | 36 + src/schemas/index.js | 9 + src/schemas/module-schema.js | 20 + src/schemas/product-schema.js | 17 + src/schemas/tag-schema.js | 23 + src/schemas/time-stamp-schema.js | 37 + src/schemas/user-schema.js | 45 + src/seeds/01-products.js | 22 + src/seeds/02-modules.js | 28 + src/seeds/03-licenses.js | 28 + src/seeds/04-licensedModules.js | 38 + src/seeds/05-preactivationParams.js | 25 + src/seeds/06-moduleUpdates.js | 36 + src/util/licenseUtil.js | 243 - 71 files changed, 10521 insertions(+), 1973 deletions(-) delete mode 100644 .eslintrc create mode 100644 .example-env create mode 100644 Procfile delete mode 100644 config/index.js delete mode 100644 index.js create mode 100644 knexfile.js create mode 100644 logo.png delete mode 100644 sql/reset-db.js delete mode 100644 sql/schema.sql create mode 100644 src/app.js create mode 100644 src/bin/server.js create mode 100644 src/config/index.js create mode 100644 src/config/knexfile.js rename {config => src/config}/supportedApps.js (100%) create mode 100644 src/controllers/apiV1-controller.js create mode 100644 src/controllers/articles-controller.js create mode 100644 src/controllers/comments-controller.js create mode 100644 src/controllers/index.js create mode 100644 src/controllers/login-controller.js create mode 100644 src/controllers/modules-controller.js create mode 100644 src/controllers/products-controller.js create mode 100644 src/controllers/profiles-controller.js create mode 100644 src/controllers/tags-controller.js create mode 100644 src/controllers/users-controller.js delete mode 100644 src/db/pool.js delete mode 100644 src/index.js create mode 100644 src/lib/constants.js create mode 100644 src/lib/errors.js rename src/{util/index.js => lib/generateLicenseFile.js} (92%) create mode 100644 src/lib/licenseUtil.js create mode 100644 src/lib/relations-map.js create mode 100644 src/lib/utils.js delete mode 100644 src/middleware.js create mode 100644 src/middleware/auth-required-middleware.js create mode 100644 src/middleware/camelize-middleware.js create mode 100644 src/middleware/db-middleware.js create mode 100644 src/middleware/error-middleware.js create mode 100644 src/middleware/jwt-middleware.js create mode 100644 src/middleware/pager-middleware.js create mode 100644 src/middleware/user-middleware.js create mode 100644 src/migrations/20180428115300_init.js create mode 100644 src/routes/apiV1-router.js create mode 100644 src/routes/articles-router.js create mode 100644 src/routes/login-router.js create mode 100644 src/routes/products-router.js create mode 100644 src/routes/profiles-router.js create mode 100644 src/routes/tags-router.js create mode 100644 src/routes/users-router.js create mode 100644 src/schemas/article-schema.js create mode 100644 src/schemas/comment-schema.js create mode 100644 src/schemas/index.js create mode 100644 src/schemas/module-schema.js create mode 100644 src/schemas/product-schema.js create mode 100644 src/schemas/tag-schema.js create mode 100644 src/schemas/time-stamp-schema.js create mode 100644 src/schemas/user-schema.js create mode 100644 src/seeds/01-products.js create mode 100644 src/seeds/02-modules.js create mode 100644 src/seeds/03-licenses.js create mode 100644 src/seeds/04-licensedModules.js create mode 100644 src/seeds/05-preactivationParams.js create mode 100644 src/seeds/06-moduleUpdates.js delete mode 100644 src/util/licenseUtil.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index d51a075..0000000 --- a/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": ["eslint:recommended", "react-app"], - "parserOptions": { - "ecmaVersion": 8, - "ecmaFeatures": { - "experimentalObjectRestSpread": true - } - }, - "plugins": ["react"], - "env": { - "es6": true, - "node": true - }, - "rules": { - "no-console": ["error", { "allow": ["log", "warn", "error"] }] - } -} diff --git a/.example-env b/.example-env new file mode 100644 index 0000000..4706903 --- /dev/null +++ b/.example-env @@ -0,0 +1,7 @@ +NODE_ENV = development +PORT = 3000 +SECRET = secret +JWT_SECRET = secret + +#DB_CLIENT = sqlite3 | pg +#DB_CONNECTION = postgres://user:password@localhost:5432/db_name diff --git a/.gitignore b/.gitignore index d6de1c4..724b64c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,26 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# dependencies +/node_modules +/bower_components + +# IDEs and editors +/.idea +.project +.classpath +*.launch +.settings/ + + +# System Files .DS_Store +Thumbs.db + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# tmp +data .env -node_modules -.projectile -.vscode -.idea -/.vs/ -/bin/ diff --git a/Dockerfile b/Dockerfile index 9dd021f..4b48b61 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:9 +FROM node:10 # Create app directory WORKDIR /usr/src/app @@ -14,7 +14,7 @@ RUN npm install --only=production COPY . . VOLUME /usr/src/app/data -RUN npm run reset-db +RUN npm run db:schema EXPOSE 3000 CMD [ "npm", "start" ] diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..2be5f80 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: yarn start diff --git a/README.md b/README.md index 7ca6c26..ca6c66f 100644 --- a/README.md +++ b/README.md @@ -1,182 +1,65 @@ -# License server +# ![RealWorld Example App](logo.png) -This is reference implementation of license server that allows per-machine software licensing while it also manages software and data updates for the -client machines. The protocol is described below. +> ### Example Node.Js (Koa.js + Knex) codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the [RealWorld](https://github.com/gothinkster/realworld-example-apps) spec and API. -## Preactivation request +This repo is functionality complete — PRs and issues welcome! -When application is run for first time it is not activated. First it sends its system params (Fletcher64 hashes) to the server to check -if the computer has not been preactivated +This codebase was created to demonstrate a fully fledged fullstack application built with **Koa.js + Knex** including CRUD operations, authentication, routing, pagination, and more. -```http -POST /activate0 HTTP/1.1 +We've gone to great lengths to adhere to the **Koa.js + Knex** community styleguides & best practices. + +For more information on how to this works with other frontends/backends, head over to the [RealWorld](https://github.com/gothinkster/realworld) repo. + +# Getting started + +## Installation +1. Instal [Node.JS](https://nodejs.org/en/download/package-manager/) latest version +2. Clone this repo +3. Install dependencies, just run in project folder: `npm i` or `yarn` + +## Usage +1. run `npm start` to start server + +## Testing +1. run `npm test` for tests + +## Server Configuration (optional) + +You can use `.env` file, to configure project like this: + +``` +NODE_ENV = development +PORT = 3000 +SECRET = secret +JWT_SECRET = secret +DB_CLIENT = sqlite3 +#DB_CONNECTION = postgres://user:password@localhost:5432/db_name ``` -Example request body: -```json -{ - "appId": "coc", - "systemParams": { - "biosSerialNum": "8690a8fb436070a9", - "computerUUID": "13cfc3b6f8f7fdd2", - "diskSerialNum": "63a58b9728485155", - "nicMac": "4b2856a1e9e8f43e", - "osId": "ec4fe2f3023d1f21" - } -} -``` +you can just copy `.example-env` -The server checks if the system is preactivated by checking if any of the system parameters exists in `PreactivationParams` table. -For example for license `XXXX-YYYY` there can be single entry for `biosSerialNum` parameters which matches the system of the requestor. -Therefore the activation will happen using the license number `XXXX-YYYY` and the system will response with license file that the client -system should store locally. We will describe the structure later. +## Variables description -Example Response body: -```json -{ - "success": true, - "licenseFile": "fG2HUWhE5kT10Ono3qgO/pzHNU1KAnUlEszz3B1pP5FdSQlIukg3P3xUgfHDQX1OBuAFH68WeXe2T0YP1dbjSsAyDJfpUltJnncwMMLOkfR3YbvyAVNmScgASLWwyQxQAVID6GOQ2weVNo3tAcbj2Ted7rx0HL36seSzyY5xuV/SnfJN6q5acqyJmibQcsrPQLZBvIb00Cy9KENnkVFVH70kC406pKxVZ3Ghqg8vTxgBK6sdbwqd7XrpupcQ4frwwm/NPesCIBYRG+6C/9oMroQoPZ+NEzOYQq2PADOZgOSvaMp4FUNe30IqNckobQO7N2TmW4BJDKVzhG5OYQRfs+xvzG0lF5gOBtmBhDf3yStgJj++jc2pNwe0rDSP2J+Yjs+V8wepyuCJ08cfZOh1feqnzmAarzAD80W8wRFd9U2lHDsyFt7Ke/3aPX454jxqITn/Wu6MK0paX8YAATWWAONyUsWTdA3UkJm45gNHJibcQcZLwKErZEPr2XBNy8nrImHRGFFtr3KC" -} -``` +`NODE_ENV` - specify env: development/production/test. `development` by default -If the Preactivation is not available for given client, the system will response with `{ success: false }` +`NODE_PORT` - specify port: `3000` by default -## Activation request +`NODE_SECRET` - custom secret for generating passwords. `secret` by default -If the system is not preactivated the client application should ask use to enter the license key (Or the license key should be somehow -received by the client system. The license key is 24 characters in base32 (RFC 4648) format. For simplicity it can be sent to user as -e.g. `T3HZ-IFAT-HLN5-2I57-HAGL-V24R` which is easy to read and enter manually. Dashes in between the characters are ignored. +`JWT_SECRET` - custom secret for generating jwt tokens. `secret` secret by default -The client is supposed to send JSON request similar as in preactivation with just one parameter added `licenseNumber` which should be -uppercase without dashes so the server can directly query the database. +`DB_CLIENT` - database to use. `pg` - postgress or `sqlite3`. `sqlite3` by default -### Example -```http -POST /activate HTTP/1.1 -Host: localhost:3000 -Accept: application/json -Content-Type: application/json -Content-Length: 219 -Charsets: utf-8 -``` - -Request data: -```json -{ - "appId": "coc", - "systemParams": { - "biosSerialNum": "8690a8fb436070a9", - "computerUUID": "13cfc3b6f8f7fdd2", - "diskSerialNum": "63a58b9728485155", - "nicMac": "4b2856a1e9e8f43e", - "osId": "ec4fe2f3023d1f21" - }, - "licenseNumber": "JK33BTBSBKSKV63YEVLMQMBZ" -} -``` - -Response: -``` -{ - "success": true, - "licenseFile": "CmiN19MDaeCtA4L+cqhrnL71GWjBqTA6cqP8pUyfwRY+r/s/CyODkgHnO9eg3yaLLNxnNFMOnZOtxgtz8hNMNUIsTAKzus068sz9dJhV2yLrmkvhi1KjEJdOua4ZXuKSzjGKxM+VFXokFfFTqxvVpPt5sMkwq9kG/cZSwpBw7POhR+ncHeF11jjkbKVUnVgjGq8EDHDQFANYAVB3qbo7PY9CG3Gm25nORMUMpqwKieadVmklBZYs09EUqqwxAxxpD44Hw2DaRwoaVMuKTC//wH+3oS3zoL2mx+panJ/HPCN7ZtdBje+v6HSlfUoHgCHpFrr0+9/YqvxAQBWz0Q8dSyzyHkuzEkb4Ob7uWSeVhmKJ1TfzX8CAchth9f4CLCuLdzmCpRVvIAM6ZS4o0t3n/3AAJAmBuKFr9OrHTnN1EgXUYB1TVjiHqvBXR1jEyvYyvkAC4CTel7/Y1LRK2y6mq5is/uLcuKyKpWItMr5p9/3qJAove7tZpT1KrNLYaIPGudIwcnYin8EBAK09uUrqRg==" -} -``` - -## Check for updates - -Another functionality that server supports is check for updates. -Client should send versions of its application modules (e.g. application, data) together with its activation ID, system parameters. -Server checks whether the system with given activation ID and system parameters is still valid and if yes it looks for updates -of the licensed modules. The typical request should look like this: - -```json -{ - "systemParams": { - "biosSerialNum": "8690a8fb436070a9", - "computerUUID": "13cfc3b6f8f7fdd2", - "diskSerialNum": "63a58b9728485155", - "nicMac": "4b2856a1e9e8f43e", - "osId": "ec4fe2f3023d1f21" - }, - "activationId": "f0d68f64-4bc5-33b0-6ab3-e9b446baea08", - "moduleVersions": { - "coc-testdata": 2 - } -} -``` - -The response contains `success: true` if the system is still activated with supplied activation number and system parameters. - -If the number of licensed modules has changed since the activation, the server can reactivate the installation and return back also new `licenseFile`. - -If there are newer versions available there should be list of updates attached. Here is the explanation of update parameters that are not obvious: - * flag - bit flag (bit 1: signals whether it is incremental update, bit 2: signals whether restart is required after update) - * checksum - SHA256 checksum of the zip file - -```json -{ - "success": true, - "moduleUpdates": [ - { - "moduleId": "coc-testdata", - "version": 3, - "flag": 0, - "checksum": "6c878854d349752eceb0d52658e8838c2ae3cca53962c942a276e8944da25731", - "updateUri": "http://localhost:3000/static/testsite-v3.zip", - "instPath": "data" - }, - { - "moduleId": "coc-testdata", - "version": 4, - "flag": 1, - "checksum": "a515353daae35dc1b3e9e06e52b95a53690984cc3172bb4e6b44c6b516afa040", - "updateUri": "http://localhost:3000/static/testsite-v4-incremental.zip", - "instPath": "data" - } - ] -} -``` +`DB_CONNECTION` - db connection string for `postgress` database. +## Fixtures (optional) -## License file +1. load fixtures: `npm run db:load` (it uses settings from `.env`). Don't forget to set `NODE_ENV`. -License file is zlib deflated and AES256-GCM encrypted of following structure +## Styleguide +[![Standard - JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) -```json -{ - "data": "{\"activationId\":\"e8cb99bc-9827-5c3a-b944-94ac97c81366\",\"appId\":\"coc\",\"systemParams\":{\"biosSerialNum\":\"8690a8fb436070a9\",\"computerUUID\":\"13cfc3b6f8f7fdd2\",\"diskSerialNum\":\"63a58b9728485155\",\"nicMac\":\"4b2856a1e9e8f43e\",\"osId\":\"ec4fe2f3023d1f21\"},\"licensedModules\":[\"coc-engine\",\"coc-testdata\"],\"nonce\":\"pSvFZJ8q3tqBzp0pLEmCSg==\"}", - "signature": "304c02240163a4b1a6e9a366672df1a17418ab44fb3471fefc4234b4220de8079d0a59ee3c05ce3502240346e0d66d388e3f6cef1cffe14c6be6930a858c72190359fa57aa755c5767b3688d9d88" -} -``` - -The signature is ECDSA+SHA256 signature of the serialized data node. The data node extracts further below: - -```json -{ - "activationId": "e8cb99bc-9827-5c3a-b944-94ac97c81366", - "appId": "coc", - "systemParams": { - "biosSerialNum": "8690a8fb436070a9", - "computerUUID": "13cfc3b6f8f7fdd2", - "diskSerialNum": "63a58b9728485155", - "nicMac": "4b2856a1e9e8f43e", - "osId": "ec4fe2f3023d1f21" - }, - "licensedModules": [ - "coc-engine", - "coc-testdata" - ] -} -``` - -As you can see the license file specifies activation number with all system parameters the license is activated to. -It also lists modules that are licensed for the given system. -Client system should save the license file received from the server localy and should upon every start check whether -the system parameters are the same as specified in the license file. The license file is protected from tempering by -ECDSA (public/private key cryptography) signature while the client only knows the public key of the server. - - -## Data model +# How it works +> Describe the general architecture of your app here diff --git a/config/index.js b/config/index.js deleted file mode 100644 index edc08a1..0000000 --- a/config/index.js +++ /dev/null @@ -1,13 +0,0 @@ -// Ensure require('dotenv').config() is run before this module is required - -exports.NODE_ENV = process.env.NODE_ENV || 'development' -exports.PORT = Number.parseInt(process.env.PORT, 10) || 3000 -exports.DATABASE_FILE = - process.env.DATABASE_URL || './data/license-server.db' - -// ////////////////////////////////////////////////////////// - -// Output config object in development to help with sanity-checking -if (exports.NODE_ENV === 'development' || exports.NODE_ENV === 'test') { - console.log(exports) -} diff --git a/index.js b/index.js deleted file mode 100644 index 1c404e2..0000000 --- a/index.js +++ /dev/null @@ -1 +0,0 @@ -require('./src').start() diff --git a/knexfile.js b/knexfile.js new file mode 100644 index 0000000..5395184 --- /dev/null +++ b/knexfile.js @@ -0,0 +1,53 @@ +// Update with your config settings. + +module.exports = { + + development: { + client: 'mysql', + connection: { + database: 'licserver', + user: 'root', + password: '' + }, + pool: { + min: 2, + max: 10 + }, + migrations: { + tableName: 'knex_migrations' + } + }, + + staging: { + client: 'postgresql', + connection: { + database: 'my_db', + user: 'username', + password: 'password' + }, + pool: { + min: 2, + max: 10 + }, + migrations: { + tableName: 'knex_migrations' + } + }, + + production: { + client: 'postgresql', + connection: { + database: 'my_db', + user: 'username', + password: 'password' + }, + pool: { + min: 2, + max: 10 + }, + migrations: { + tableName: 'knex_migrations' + } + } + +}; diff --git a/license-server.njsproj b/license-server.njsproj index a5d2c49..5784a0d 100644 --- a/license-server.njsproj +++ b/license-server.njsproj @@ -3,7 +3,7 @@ Debug 2.0 - {8dfa872b-4368-4176-811a-6d3d9665e54b} + {cdb93689-38b1-497c-a17e-3fea4607a7e8} ShowAllFiles @@ -12,40 +12,57 @@ {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} 14.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + Debug|Any CPU - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - Code - - - Code - - - - Code - - - - Code - - - Code - + + + + + + + + + + diff --git a/license-server.sln b/license-server.sln index 53bec07..908fff6 100644 --- a/license-server.sln +++ b/license-server.sln @@ -1,9 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.27130.2036 +VisualStudioVersion = 15.0.27428.2011 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "license-server", "license-server.njsproj", "{8DFA872B-4368-4176-811A-6D3D9665E54B}" +Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "license-server", "license-server.njsproj", "{CDB93689-38B1-497C-A17E-3FEA4607A7E8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,15 +11,15 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8DFA872B-4368-4176-811A-6D3D9665E54B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DFA872B-4368-4176-811A-6D3D9665E54B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DFA872B-4368-4176-811A-6D3D9665E54B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DFA872B-4368-4176-811A-6D3D9665E54B}.Release|Any CPU.Build.0 = Release|Any CPU + {CDB93689-38B1-497C-A17E-3FEA4607A7E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDB93689-38B1-497C-A17E-3FEA4607A7E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDB93689-38B1-497C-A17E-3FEA4607A7E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDB93689-38B1-497C-A17E-3FEA4607A7E8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C030B8B7-C3CC-4C52-97CA-1C3852CB83D9} + SolutionGuid = {2D183C48-BF8D-4B4D-920B-C5C498E25DC1} EndGlobalSection EndGlobal diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2401aaceb6b99f8d6ecfc10785531891a8144a GIT binary patch literal 58012 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�k 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