Added demo mode

This commit is contained in:
Kasra Bigdeli
2019-02-11 20:34:43 -08:00
parent 1f47d0b70e
commit 38fb62cb00
4 changed files with 27 additions and 5 deletions
+9
View File
@@ -16,6 +16,7 @@ import CaptainConstants = require('./utils/CaptainConstants')
import LoginRouter = require('./routes/LoginRouter')
import UserRouter = require('./routes/UserRouter')
import InjectionExtractor = require('./injection/InjectionExtractor')
import Utils from './utils/Utils'
// import { NextFunction, Request, Response } from 'express'
const httpProxy = httpProxyImport.createProxyServer({})
@@ -146,6 +147,14 @@ httpProxy.on('error', function(err, req, resOriginal) {
})
app.use(CaptainConstants.netDataRelativePath, function(req, res, next) {
if (Utils.isNotGetRequest(req)) {
res.writeHead(401, {
'Content-Type': 'text/plain',
})
res.send('Demo mode is for viewing only')
return
}
httpProxy.web(req, res, {
target: 'http://' + CaptainConstants.netDataContainerName + ':19999',
})
+12 -5
View File
@@ -9,6 +9,8 @@ import RegistriesRouter = require('./RegistriesRouter')
import onFinished = require('on-finished')
import InjectionExtractor = require('../injection/InjectionExtractor')
import CaptainManager = require('../user/system/CaptainManager')
import Utils from '../utils/Utils'
import EnvVars = require('../utils/EnvVars')
const router = express.Router()
@@ -18,10 +20,6 @@ router.use('/apps/webhooks/', Injector.injectUserForWebhook())
router.use(Injector.injectUser())
function isNotGetRequest(req: express.Request) {
return req.method !== 'GET'
}
router.use(function(req, res, next) {
const user = InjectionExtractor.extractUserFromInjected(res).user
@@ -58,7 +56,16 @@ router.use(function(req, res, next) {
// All requests except GET might be making changes to some stuff that are not designed for an asynchronous process
// I'm being extra cautious. But removal of this lock mechanism requires testing and consideration of edge cases.
if (isNotGetRequest(req)) {
if (Utils.isNotGetRequest(req)) {
if (EnvVars.IS_DEMO_MODE) {
let response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_GENERIC,
'Demo mode is only for viewing purposes.'
)
res.send(response)
return
}
if (threadLockNamespace[namespace]) {
let response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_GENERIC,
+3
View File
@@ -4,6 +4,7 @@ export = {
CAPTAIN_IS_DEBUG: 'CAPTAIN_IS_DEBUG',
DEFAULT_PASSWORD: 'DEFAULT_PASSWORD',
IS_CAPTAIN_INSTANCE: 'IS_CAPTAIN_INSTANCE',
IS_DEMO_MODE: 'IS_DEMO_MODE',
},
BY_PASS_PROXY_CHECK: process.env.BY_PASS_PROXY_CHECK,
@@ -16,5 +17,7 @@ export = {
IS_CAPTAIN_INSTANCE: process.env.IS_CAPTAIN_INSTANCE,
IS_DEMO_MODE: !!process.env.IS_DEMO_MODE,
DEFAULT_PASSWORD: process.env.DEFAULT_PASSWORD,
}
+3
View File
@@ -5,4 +5,7 @@ export default class Utils {
input = input.replace(/^(?:https?:\/\/)?/i, '')
return input
}
static isNotGetRequest(req: { method: string }) {
return req.method !== 'GET'
}
}