aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json22
-rw-r--r--package.json5
-rw-r--r--session.config.json2
-rw-r--r--src/server/ActionUtilities.ts6
-rw-r--r--src/server/ApiManagers/SessionManager.ts6
-rw-r--r--src/server/DashSession/DashSessionAgent.ts10
-rw-r--r--src/server/DashSession/Session/agents/monitor.ts10
-rw-r--r--src/server/DashSession/Session/agents/promisified_ipc_manager.ts8
-rw-r--r--src/server/DashSession/Session/agents/server_worker.ts8
-rw-r--r--src/server/DashSession/Session/utilities/session_config.ts2
-rw-r--r--src/server/authentication/AuthenticationManager.ts12
-rw-r--r--src/server/index.ts11
-rw-r--r--tsconfig.json3
13 files changed, 55 insertions, 50 deletions
diff --git a/package-lock.json b/package-lock.json
index 2cc50060f..42cbc1fd6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -585,7 +585,6 @@
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
- "dev": true,
"requires": {
"@types/connect": "*",
"@types/node": "*"
@@ -639,7 +638,6 @@
"version": "3.4.33",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
"integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==",
- "dev": true,
"requires": {
"@types/node": "*"
}
@@ -672,6 +670,14 @@
"@types/keygrip": "*"
}
},
+ "@types/cors": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz",
+ "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==",
+ "requires": {
+ "@types/express": "*"
+ }
+ },
"@types/dotenv": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/dotenv/-/dotenv-6.1.1.tgz",
@@ -709,7 +715,6 @@
"version": "4.17.6",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.6.tgz",
"integrity": "sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w==",
- "dev": true,
"requires": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "*",
@@ -731,7 +736,6 @@
"version": "4.17.5",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.5.tgz",
"integrity": "sha512-578YH5Lt88AKoADy0b2jQGwJtrBxezXtVe/MBqWXKZpqx91SnC0pVkVCcxcytz3lWW+cHBYDi3Ysh0WXc+rAYw==",
- "dev": true,
"requires": {
"@types/node": "*",
"@types/range-parser": "*"
@@ -847,8 +851,7 @@
"@types/mime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz",
- "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==",
- "dev": true
+ "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw=="
},
"@types/minimatch": {
"version": "3.0.3",
@@ -1105,14 +1108,12 @@
"@types/qs": {
"version": "6.9.1",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.1.tgz",
- "integrity": "sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw==",
- "dev": true
+ "integrity": "sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw=="
},
"@types/range-parser": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
- "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
- "dev": true
+ "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
},
"@types/rc-switch": {
"version": "1.9.0",
@@ -1266,7 +1267,6 @@
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz",
"integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==",
- "dev": true,
"requires": {
"@types/express-serve-static-core": "*",
"@types/mime": "*"
diff --git a/package.json b/package.json
index 6736d27f6..605345017 100644
--- a/package.json
+++ b/package.json
@@ -10,10 +10,10 @@
"child_process": "empty"
},
"scripts": {
- "start-release": "cross-env RELEASE=true NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug -- src/server/index.ts",
"start": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug --transpile-only -- src/server/index.ts",
"oldstart": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug -- src/server/index.ts",
"debug": "cross-env NODE_OPTIONS=--max_old_space_size=8192 ts-node-dev --transpile-only --inspect -- src/server/index.ts",
+ "monitor": "cross-env MONITORED=true NODE_OPTIONS=--max_old_space_size=4096 ts-node src/server/index.ts",
"build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 webpack --env production",
"test": "mocha -r ts-node/register test/**/*.ts",
"tsc": "tsc"
@@ -124,6 +124,7 @@
"@hig/theme-context": "^2.1.3",
"@hig/theme-data": "^2.16.1",
"@material-ui/core": "^4.11.0",
+ "@types/cors": "^2.8.8",
"@types/google-maps": "^3.2.2",
"@types/reveal": "^3.3.33",
"@types/webscopeio__react-textarea-autocomplete": "^4.6.1",
@@ -261,4 +262,4 @@
"xoauth2": "^1.2.0",
"xregexp": "^4.3.0"
}
-}
+} \ No newline at end of file
diff --git a/session.config.json b/session.config.json
index 5440d9bbd..f613dd904 100644
--- a/session.config.json
+++ b/session.config.json
@@ -1,7 +1,7 @@
{
"showServerOutput": false,
"ports": {
- "server": 443,
+ "server": 1050,
"socket": 4321
},
"polling": {
diff --git a/src/server/ActionUtilities.ts b/src/server/ActionUtilities.ts
index fd9bc0c83..d237869ed 100644
--- a/src/server/ActionUtilities.ts
+++ b/src/server/ActionUtilities.ts
@@ -114,8 +114,8 @@ export namespace Email {
const smtpTransport = nodemailer.createTransport({
service: 'Gmail',
auth: {
- user: 'brownptcdash@gmail.com',
- pass: 'browngfx1'
+ user: 'browndashptc@gmail.com',
+ pass: 'TsarNicholas#2'
}
});
@@ -149,7 +149,7 @@ export namespace Email {
export async function dispatch({ to, subject, content, attachments }: DispatchOptions<string>): Promise<Error | null> {
const mailOptions = {
to,
- from: 'brownptcdash@gmail.com',
+ from: 'browndashptc@gmail.com',
subject,
text: `Hello ${to.split("@")[0]},\n\n${content}`,
attachments
diff --git a/src/server/ApiManagers/SessionManager.ts b/src/server/ApiManagers/SessionManager.ts
index fa2f6002a..e37f8c6db 100644
--- a/src/server/ApiManagers/SessionManager.ts
+++ b/src/server/ApiManagers/SessionManager.ts
@@ -12,9 +12,9 @@ export default class SessionManager extends ApiManager {
private authorizedAction = (handler: SecureHandler) => {
return (core: AuthorizedCore) => {
- const { req: { params }, res, isRelease } = core;
- if (!isRelease) {
- return res.send("This can be run only on the release server.");
+ const { req: { params }, res } = core;
+ if (!process.env.MONITORED) {
+ return res.send("This command only makes sense in the context of a monitored session.");
}
if (params.session_key !== process.env.session_key) {
return _permission_denied(res, permissionError);
diff --git a/src/server/DashSession/DashSessionAgent.ts b/src/server/DashSession/DashSessionAgent.ts
index ab3dfffcc..03ba33fee 100644
--- a/src/server/DashSession/DashSessionAgent.ts
+++ b/src/server/DashSession/DashSessionAgent.ts
@@ -12,7 +12,7 @@ import rimraf = require("rimraf");
import { AppliedSessionAgent, ExitHandler } from "./Session/agents/applied_session_agent";
import { ServerWorker } from "./Session/agents/server_worker";
import { Monitor } from "./Session/agents/monitor";
-import { MessageHandler } from "./Session/agents/promisified_ipc_manager";
+import { MessageHandler, ErrorLike } from "./Session/agents/promisified_ipc_manager";
/**
* If we're the monitor (master) thread, we should launch the monitor logic for the session.
@@ -70,7 +70,7 @@ export class DashSessionAgent extends AppliedSessionAgent {
* Prepares the body of the email with information regarding a crash event.
*/
private _crashInstructions: string | undefined;
- private generateCrashInstructions({ name, message, stack }: Error): string {
+ private generateCrashInstructions({ name, message, stack }: ErrorLike): string {
if (!this._crashInstructions) {
this._crashInstructions = readFileSync(resolve(__dirname, "./templates/crash_instructions.txt"), { encoding: "utf8" });
}
@@ -109,7 +109,7 @@ export class DashSessionAgent extends AppliedSessionAgent {
/**
* This sends an email with the generated crash report.
*/
- private dispatchCrashReport: MessageHandler<{ error: Error }> = async ({ error: crashCause }) => {
+ private dispatchCrashReport: MessageHandler<{ error: ErrorLike }> = async ({ error: crashCause }) => {
const { mainLog } = this.sessionMonitor;
const { notificationRecipient } = DashSessionAgent;
const error = await Email.dispatch({
@@ -127,7 +127,7 @@ export class DashSessionAgent extends AppliedSessionAgent {
/**
* Logic for interfacing with Solr. Either starts it,
- * stops it, or rebuilds its indicies.
+ * stops it, or rebuilds its indices.
*/
private executeSolrCommand = async (args: string[]): Promise<void> => {
const { exec, mainLog } = this.sessionMonitor;
@@ -224,6 +224,6 @@ export class DashSessionAgent extends AppliedSessionAgent {
export namespace DashSessionAgent {
- export const notificationRecipient = "brownptcdash@gmail.com";
+ export const notificationRecipient = "browndashptc@gmail.com";
}
diff --git a/src/server/DashSession/Session/agents/monitor.ts b/src/server/DashSession/Session/agents/monitor.ts
index ee8afee65..0fdaf07ff 100644
--- a/src/server/DashSession/Session/agents/monitor.ts
+++ b/src/server/DashSession/Session/agents/monitor.ts
@@ -2,7 +2,7 @@ import { ExitHandler } from "./applied_session_agent";
import { Configuration, configurationSchema, defaultConfig, Identifiers, colorMapping } from "../utilities/session_config";
import Repl, { ReplAction } from "../utilities/repl";
import { isWorker, setupMaster, on, Worker, fork } from "cluster";
-import { manage, MessageHandler } from "./promisified_ipc_manager";
+import { manage, MessageHandler, ErrorLike } from "./promisified_ipc_manager";
import { red, cyan, white, yellow, blue } from "colors";
import { exec, ExecOptions } from "child_process";
import { validate, ValidationError } from "jsonschema";
@@ -22,7 +22,7 @@ export class Monitor extends IPCMessageReceiver {
private readonly config: Configuration;
private activeWorker: Worker | undefined;
private key: string | undefined;
- // private repl: Repl;
+ private repl: Repl;
public static Create() {
if (isWorker) {
@@ -46,7 +46,7 @@ export class Monitor extends IPCMessageReceiver {
this.configureInternalHandlers();
this.config = this.loadAndValidateConfiguration();
this.initializeClusterFunctions();
- // this.repl = this.initializeRepl();
+ this.repl = this.initializeRepl();
}
protected configureInternalHandlers = () => {
@@ -90,7 +90,7 @@ export class Monitor extends IPCMessageReceiver {
}
public readonly coreHooks = Object.freeze({
- onCrashDetected: (listener: MessageHandler<{ error: Error }>) => this.on(Monitor.IntrinsicEvents.CrashDetected, listener),
+ onCrashDetected: (listener: MessageHandler<{ error: ErrorLike }>) => this.on(Monitor.IntrinsicEvents.CrashDetected, listener),
onServerRunning: (listener: MessageHandler<{ isFirstTime: boolean }>) => this.on(Monitor.IntrinsicEvents.ServerRunning, listener)
});
@@ -119,7 +119,7 @@ export class Monitor extends IPCMessageReceiver {
* that can invoke application logic external to this module
*/
public addReplCommand = (basename: string, argPatterns: (RegExp | string)[], action: ReplAction) => {
- // this.repl.registerCommand(basename, argPatterns, action);
+ this.repl.registerCommand(basename, argPatterns, action);
}
public exec = (command: string, options?: ExecOptions) => {
diff --git a/src/server/DashSession/Session/agents/promisified_ipc_manager.ts b/src/server/DashSession/Session/agents/promisified_ipc_manager.ts
index feff568e1..95aa686e6 100644
--- a/src/server/DashSession/Session/agents/promisified_ipc_manager.ts
+++ b/src/server/DashSession/Session/agents/promisified_ipc_manager.ts
@@ -43,8 +43,8 @@ type InternalMessageHandler = (message: InternalMessage) => (any | Promise<any>)
* Allows for the transmission of the error's key features over IPC.
*/
export interface ErrorLike {
- name?: string;
- message?: string;
+ name: string;
+ message: string;
stack?: string;
}
@@ -162,8 +162,8 @@ export class PromisifiedIPCManager {
}
if (!this.isDestroyed && this.target.send) {
const metadata = { id, isResponse: true };
- const response: Response = { results , error };
- const message = { name, args: response , metadata };
+ const response: Response = { results, error };
+ const message = { name, args: response, metadata };
delete this.pendingMessages[id];
this.target.send(message);
}
diff --git a/src/server/DashSession/Session/agents/server_worker.ts b/src/server/DashSession/Session/agents/server_worker.ts
index 976d27226..afa5fc68d 100644
--- a/src/server/DashSession/Session/agents/server_worker.ts
+++ b/src/server/DashSession/Session/agents/server_worker.ts
@@ -1,6 +1,6 @@
import { ExitHandler } from "./applied_session_agent";
import { isMaster } from "cluster";
-import { manage } from "./promisified_ipc_manager";
+import { manage, ErrorLike } from "./promisified_ipc_manager";
import IPCMessageReceiver from "./process_message_router";
import { red, green, white, yellow } from "colors";
import { get } from "request-promise";
@@ -112,7 +112,9 @@ export class ServerWorker extends IPCMessageReceiver {
private proactiveUnplannedExit = async (error: Error): Promise<void> => {
this.shouldServerBeResponsive = false;
// communicates via IPC to the master thread that it should dispatch a crash notification email
- this.emit(Monitor.IntrinsicEvents.CrashDetected, { error });
+ const { name, message, stack } = error;
+ const deconstructed_error: ErrorLike = { name, message, stack };
+ this.emit(Monitor.IntrinsicEvents.CrashDetected, { error: deconstructed_error });
await this.executeExitHandlers(error);
// notify master thread (which will log update in the console) of crash event via IPC
this.lifecycleNotification(red(`crash event detected @ ${new Date().toUTCString()}`));
@@ -157,4 +159,4 @@ export class ServerWorker extends IPCMessageReceiver {
this.pollServer();
}
-} \ No newline at end of file
+}
diff --git a/src/server/DashSession/Session/utilities/session_config.ts b/src/server/DashSession/Session/utilities/session_config.ts
index b0e65dde4..bde98e9d2 100644
--- a/src/server/DashSession/Session/utilities/session_config.ts
+++ b/src/server/DashSession/Session/utilities/session_config.ts
@@ -19,7 +19,7 @@ const identifierProperties: Schema = {
const portProperties: Schema = {
type: "number",
- minimum: 1024,
+ minimum: 443,
maximum: 65535
};
diff --git a/src/server/authentication/AuthenticationManager.ts b/src/server/authentication/AuthenticationManager.ts
index 9eb4a328f..3fbd4b3a7 100644
--- a/src/server/authentication/AuthenticationManager.ts
+++ b/src/server/authentication/AuthenticationManager.ts
@@ -177,13 +177,13 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
const smtpTransport = nodemailer.createTransport({
service: 'Gmail',
auth: {
- user: 'brownptcdash@gmail.com',
- pass: 'browngfx1'
+ user: 'browndashptc@gmail.com',
+ pass: 'TsarNicholas#2'
}
});
const mailOptions = {
to: user.email,
- from: 'brownptcdash@gmail.com',
+ from: 'browndashptc@gmail.com',
subject: 'Dash Password Reset',
text: 'You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n' +
'Please click on the following link, or paste this into your browser to complete the process:\n\n' +
@@ -250,13 +250,13 @@ export let postReset = function (req: Request, res: Response) {
const smtpTransport = nodemailer.createTransport({
service: 'Gmail',
auth: {
- user: 'brownptcdash@gmail.com',
- pass: 'browngfx1'
+ user: 'browndashptc@gmail.com',
+ pass: 'TsarNicholas#2'
}
});
const mailOptions = {
to: user.email,
- from: 'brownptcdash@gmail.com',
+ from: 'browndashptc@gmail.com',
subject: 'Your password has been changed',
text: 'Hello,\n\n' +
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n'
diff --git a/src/server/index.ts b/src/server/index.ts
index c4e6be8a2..9687c3b23 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -23,6 +23,7 @@ import { Logger } from "./ProcessFactory";
import RouteManager, { Method, PublicHandler } from './RouteManager';
import RouteSubscriber from './RouteSubscriber';
import initializeServer, { resolvedPorts } from './server_Initialization';
+import { DashSessionAgent } from "./DashSession/DashSessionAgent";
export const AdminPriviliges: Map<string, boolean> = new Map();
export const onWindows = process.platform === "win32";
@@ -186,9 +187,9 @@ export async function launchServer() {
* log the output of the server process, so it's not ideal for development.
* So, the 'else' clause is exactly what we've always run when executing npm start.
*/
-// if (process.env.RELEASE) {
-// (sessionAgent = new DashSessionAgent()).launch();
-// } else {
(Database.Instance as Database.Database).doConnect();
-launchServer();
-// }
+if (process.env.MONITORED) {
+ (sessionAgent = new DashSessionAgent()).launch();
+} else {
+ launchServer();
+}
diff --git a/tsconfig.json b/tsconfig.json
index b06cec79f..f688f18ea 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -19,7 +19,8 @@
"./src/typings"
],
"types": [
- "youtube"
+ "youtube",
+ "node"
]
},
// "exclude": [