mirror of
https://github.com/caprover/caprover
synced 2026-09-25 08:05:35 +00:00
Added demo mode
This commit is contained in:
@@ -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',
|
||||
})
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -5,4 +5,7 @@ export default class Utils {
|
||||
input = input.replace(/^(?:https?:\/\/)?/i, '')
|
||||
return input
|
||||
}
|
||||
static isNotGetRequest(req: { method: string }) {
|
||||
return req.method !== 'GET'
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user