diff options
author | Tyler Schicke <tschicke@gmail.com> | 2020-01-09 21:33:18 -0800 |
---|---|---|
committer | Tyler Schicke <tschicke@gmail.com> | 2020-01-09 21:33:18 -0800 |
commit | 2295ab2500487da6b030d871b8d81724a4ddada3 (patch) | |
tree | cc4bff122cd18066521affb382c0e93cde9b33ce /src/server/ApiManagers/SessionManager.ts | |
parent | 786d25a4f8db1db8795f04a17fba392636e5f891 (diff) | |
parent | a8aa0facfaa23298398c15aa906bc6d69c538564 (diff) |
Merge branch 'master' of github.com:browngraphicslab/Dash-Web into no_db
Diffstat (limited to 'src/server/ApiManagers/SessionManager.ts')
-rw-r--r-- | src/server/ApiManagers/SessionManager.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/server/ApiManagers/SessionManager.ts b/src/server/ApiManagers/SessionManager.ts new file mode 100644 index 000000000..0290b578c --- /dev/null +++ b/src/server/ApiManagers/SessionManager.ts @@ -0,0 +1,62 @@ +import ApiManager, { Registration } from "./ApiManager"; +import { Method, _permission_denied, AuthorizedCore, SecureHandler } from "../RouteManager"; +import RouteSubscriber from "../RouteSubscriber"; +import { sessionAgent } from ".."; + +const permissionError = "You are not authorized!"; + +export default class SessionManager extends ApiManager { + + private secureSubscriber = (root: string, ...params: string[]) => new RouteSubscriber(root).add("password", ...params); + + private authorizedAction = (handler: SecureHandler) => { + return (core: AuthorizedCore) => { + const { req, res, isRelease } = core; + const { password } = req.params; + if (!isRelease) { + return res.send("This can be run only on the release server."); + } + if (password !== process.env.session_key) { + return _permission_denied(res, permissionError); + } + handler(core); + }; + } + + protected initialize(register: Registration): void { + + register({ + method: Method.GET, + subscription: this.secureSubscriber("debug", "mode", "recipient"), + secureHandler: this.authorizedAction(({ req, res }) => { + const { mode, recipient } = req.params; + if (["passive", "active"].includes(mode)) { + sessionAgent.serverWorker.sendMonitorAction("debug", { mode, recipient }); + res.send(`Your request was successful: the server is ${mode === "active" ? "creating and compressing a new" : "retrieving and compressing the most recent"} back up. It will be sent to ${recipient}.`); + } else { + res.send(`Your request failed. '${mode}' is not a valid mode: please choose either 'active' or 'passive'`); + } + }) + }); + + register({ + method: Method.GET, + subscription: this.secureSubscriber("backup"), + secureHandler: this.authorizedAction(({ res }) => { + sessionAgent.serverWorker.sendMonitorAction("backup"); + res.send(`Your request was successful: the server is creating a new back up.`); + }) + }); + + register({ + method: Method.GET, + subscription: this.secureSubscriber("kill"), + secureHandler: this.authorizedAction(({ res }) => { + res.send("Your request was successful: the server and its session have been killed."); + sessionAgent.killSession("an authorized user has manually ended the server session via the /kill route"); + }) + }); + + } + +}
\ No newline at end of file |