mirror of
https://github.com/sasjs/server.git
synced 2026-01-16 18:30:06 +00:00
Merge pull request #57 from sasjs/final-release-should-also-has-https-server
fix: release should also has https protocol
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
MODE=[desktop|server] default considered as desktop
|
MODE=[desktop|server] default considered as desktop
|
||||||
CORS=[disable|enable] default considered as disable
|
CORS=[disable|enable] default considered as disable
|
||||||
|
PROTOCOL=[http|https] default considered as http
|
||||||
|
PRIVATE_KEY=privkey.pem
|
||||||
|
FULL_CHAIN=fullchain.pem
|
||||||
PORT=[5000] default value is 5000
|
PORT=[5000] default value is 5000
|
||||||
PORT_WEB=[port for sasjs web component(react)] default value is 3000
|
PORT_WEB=[port for sasjs web component(react)] default value is 3000
|
||||||
ACCESS_TOKEN_SECRET=<secret>
|
ACCESS_TOKEN_SECRET=<secret>
|
||||||
|
|||||||
8619
api/package-lock.json
generated
8619
api/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -6,13 +6,10 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"initial": "npm run swagger && npm run compileSysInit",
|
"initial": "npm run swagger && npm run compileSysInit",
|
||||||
"prestart": "npm run initial",
|
"prestart": "npm run initial",
|
||||||
"prestart:prod": "npm run initial",
|
|
||||||
"prebuild": "npm run initial",
|
"prebuild": "npm run initial",
|
||||||
"start": "nodemon ./src/server.ts",
|
"start": "nodemon ./src/server.ts",
|
||||||
"start:prod": "nodemon ./src/prod-server.ts",
|
|
||||||
"build": "rimraf build && tsc",
|
"build": "rimraf build && tsc",
|
||||||
"swagger": "tsoa spec",
|
"swagger": "tsoa spec",
|
||||||
"semantic-release": "semantic-release -d",
|
|
||||||
"prepare": "[ -d .git ] && git config core.hooksPath ./.git-hooks || true",
|
"prepare": "[ -d .git ] && git config core.hooksPath ./.git-hooks || true",
|
||||||
"test": "mkdir -p tmp && mkdir -p ../web/build && jest --silent --coverage",
|
"test": "mkdir -p tmp && mkdir -p ../web/build && jest --silent --coverage",
|
||||||
"lint:fix": "npx prettier --write \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
"lint:fix": "npx prettier --write \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
||||||
@@ -58,7 +55,7 @@
|
|||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"multer": "^1.4.3",
|
"multer": "^1.4.3",
|
||||||
"swagger-ui-express": "^4.1.6",
|
"swagger-ui-express": "^4.1.6",
|
||||||
"tsoa": "^3.14.0"
|
"tsoa": "3.14.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bcryptjs": "^2.4.2",
|
"@types/bcryptjs": "^2.4.2",
|
||||||
@@ -79,7 +76,6 @@
|
|||||||
"pkg": "^5.4.1",
|
"pkg": "^5.4.1",
|
||||||
"prettier": "^2.3.1",
|
"prettier": "^2.3.1",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"semantic-release": "^17.4.3",
|
|
||||||
"supertest": "^6.1.3",
|
"supertest": "^6.1.3",
|
||||||
"ts-jest": "^27.0.3",
|
"ts-jest": "^27.0.3",
|
||||||
"ts-node": "^10.0.0",
|
"ts-node": "^10.0.0",
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ components:
|
|||||||
bearerFormat: JWT
|
bearerFormat: JWT
|
||||||
info:
|
info:
|
||||||
title: api
|
title: api
|
||||||
version: 0.0.1
|
version: 0.0.2
|
||||||
description: 'Api of SASjs server'
|
description: 'Api of SASjs server'
|
||||||
contact:
|
contact:
|
||||||
name: '4GL Ltd'
|
name: '4GL Ltd'
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
import path from 'path'
|
|
||||||
import { readFileSync } from 'fs'
|
|
||||||
import * as https from 'https'
|
|
||||||
import appPromise from './app'
|
|
||||||
|
|
||||||
const keyPath = path.join('..', 'certificates', 'privkey.pem')
|
|
||||||
const certPath = path.join('..', 'certificates', 'fullchain.pem')
|
|
||||||
|
|
||||||
const key = readFileSync(keyPath)
|
|
||||||
const cert = readFileSync(certPath)
|
|
||||||
|
|
||||||
appPromise.then((app) => {
|
|
||||||
const httpsServer = https.createServer({ key, cert }, app)
|
|
||||||
|
|
||||||
const sasJsPort = process.env.PORT ?? 5000
|
|
||||||
httpsServer.listen(sasJsPort, () => {
|
|
||||||
console.log(
|
|
||||||
`⚡️[server]: Server is running at https://localhost:${sasJsPort}`
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,10 +1,26 @@
|
|||||||
import appPromise from './app'
|
import { createServer } from 'https'
|
||||||
|
|
||||||
appPromise.then((app) => {
|
import appPromise from './app'
|
||||||
|
import { getCertificates } from './utils'
|
||||||
|
|
||||||
|
appPromise.then(async (app) => {
|
||||||
|
const protocol = process.env.PROTOCOL ?? 'http'
|
||||||
const sasJsPort = process.env.PORT ?? 5000
|
const sasJsPort = process.env.PORT ?? 5000
|
||||||
|
|
||||||
|
if (protocol !== 'https') {
|
||||||
app.listen(sasJsPort, () => {
|
app.listen(sasJsPort, () => {
|
||||||
console.log(
|
console.log(
|
||||||
`⚡️[server]: Server is running at http://localhost:${sasJsPort}`
|
`⚡️[server]: Server is running at http://localhost:${sasJsPort}`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
const { key, cert } = await getCertificates()
|
||||||
|
|
||||||
|
const httpsServer = createServer({ key, cert }, app)
|
||||||
|
httpsServer.listen(sasJsPort, () => {
|
||||||
|
console.log(
|
||||||
|
`⚡️[server]: Server is running at https://localhost:${sasJsPort}`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
33
api/src/utils/getCertificates.ts
Normal file
33
api/src/utils/getCertificates.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import path from 'path'
|
||||||
|
import { fileExists, getString, readFile } from '@sasjs/utils'
|
||||||
|
|
||||||
|
export const getCertificates = async () => {
|
||||||
|
const { PRIVATE_KEY, FULL_CHAIN } = process.env
|
||||||
|
|
||||||
|
const keyPath = PRIVATE_KEY ?? (await getFileInput('Private Key (PEM)'))
|
||||||
|
const certPath = FULL_CHAIN ?? (await getFileInput('Full Chain (PEM)'))
|
||||||
|
|
||||||
|
const key = await readFile(keyPath)
|
||||||
|
const cert = await readFile(certPath)
|
||||||
|
|
||||||
|
return { key, cert }
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFileInput = async (filename: string): Promise<string> => {
|
||||||
|
const validator = async (filePath: string) => {
|
||||||
|
if (!filePath) return `Path to ${filename} is required.`
|
||||||
|
|
||||||
|
if (!(await fileExists(path.join(process.cwd(), filePath)))) {
|
||||||
|
return 'No file found at provided path.'
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
const targetName = await getString(
|
||||||
|
`Please enter path to ${filename} (relative path): `,
|
||||||
|
validator
|
||||||
|
)
|
||||||
|
|
||||||
|
return targetName
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ export * from './file'
|
|||||||
export * from './generateAccessToken'
|
export * from './generateAccessToken'
|
||||||
export * from './generateAuthCode'
|
export * from './generateAuthCode'
|
||||||
export * from './generateRefreshToken'
|
export * from './generateRefreshToken'
|
||||||
|
export * from './getCertificates'
|
||||||
export * from './getDesktopFields'
|
export * from './getDesktopFields'
|
||||||
export * from './removeTokensInDB'
|
export * from './removeTokensInDB'
|
||||||
export * from './saveTokensInDB'
|
export * from './saveTokensInDB'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"server": "npm run server:prepare && npm run server:start",
|
"server": "npm run server:prepare && npm run server:start",
|
||||||
"server:prepare": "cd web && npm ci && npm run build && cd ../api && npm ci && cd ..",
|
"server:prepare": "cd web && npm ci && npm run build && cd ../api && npm ci && cd ..",
|
||||||
"server:start": "cd api && npm run start:prod",
|
"server:start": "cd api && npm run start",
|
||||||
"release": "standard-version",
|
"release": "standard-version",
|
||||||
"lint-api:fix": "npx prettier --write \"api/src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
"lint-api:fix": "npx prettier --write \"api/src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
||||||
"lint-api": "npx prettier --check \"api/src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
"lint-api": "npx prettier --check \"api/src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
||||||
|
|||||||
Reference in New Issue
Block a user