aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/ActionUtilities.ts3
-rw-r--r--src/server/ApiManagers/ApiManager.ts4
-rw-r--r--src/server/ApiManagers/UploadManager.ts4
-rw-r--r--src/server/DashUploadUtils.ts12
-rw-r--r--src/server/index.ts25
5 files changed, 26 insertions, 22 deletions
diff --git a/src/server/ActionUtilities.ts b/src/server/ActionUtilities.ts
index 5e88ea460..a5f33833d 100644
--- a/src/server/ActionUtilities.ts
+++ b/src/server/ActionUtilities.ts
@@ -33,8 +33,9 @@ export interface LogData {
action: () => void | Promise<void>;
}
+let current = Math.ceil(Math.random() * 20);
export async function log_execution({ startMessage, endMessage, action }: LogData) {
- const color = `\x1b[${30 + Math.ceil(Math.random() * 6)}m%s\x1b[0m`;
+ const color = `\x1b[${31 + current++ % 6}m%s\x1b[0m`;
console.log(color, `${startMessage}...`);
await action();
console.log(color, endMessage);
diff --git a/src/server/ApiManagers/ApiManager.ts b/src/server/ApiManagers/ApiManager.ts
index 9fd726060..e2b01d585 100644
--- a/src/server/ApiManagers/ApiManager.ts
+++ b/src/server/ApiManagers/ApiManager.ts
@@ -5,7 +5,7 @@ export type Registration = (initializer: RouteInitializer) => void;
export default abstract class ApiManager {
protected abstract initialize(register: Registration): void;
- public register(router: RouteManager) {
- this.initialize(router.addSupervisedRoute);
+ public register(register: Registration) {
+ this.initialize(register);
}
} \ No newline at end of file
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 01abdab54..aca63a918 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -5,7 +5,7 @@ import v4 = require('uuid/v4');
var AdmZip = require('adm-zip');
import * as path from 'path';
import { createReadStream, createWriteStream, unlink, readFileSync } from "fs";
-import { publicDirectory, filesDirectory, Partitions } from "..";
+import { publicDirectory, filesDirectory } from "..";
import { Database } from "../database";
import { DashUploadUtils } from "../DashUploadUtils";
import { Opt } from "../../new_fields/Doc";
@@ -142,7 +142,7 @@ export default class UploadManager extends ApiManager {
let dataBuffer = readFileSync(filesDirectory + filename);
const result: ParsedPDF = await pdf(dataBuffer);
await new Promise<void>((resolve, reject) => {
- const path = filesDirectory + Partitions.pdf_text + "/" + filename.substring(0, filename.length - ".pdf".length) + ".txt";
+ const path = filesDirectory + DashUploadUtils.Partitions.pdf_text + "/" + filename.substring(0, filename.length - ".pdf".length) + ".txt";
createWriteStream(path).write(result.text, error => {
if (!error) {
resolve();
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index 8f5b0e1a8..8a429b81b 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -6,6 +6,7 @@ import request = require('request-promise');
import { ExifData, ExifImage } from 'exif';
import { Opt } from '../new_fields/Doc';
import { SharedMediaTypes } from './SharedMediaTypes';
+import { filesDirectory } from '.';
const uploadDirectory = path.join(__dirname, './public/files/');
@@ -89,6 +90,17 @@ export namespace DashUploadUtils {
error?: string;
}
+ export enum Partitions {
+ pdf_text,
+ images,
+ videos
+ }
+
+ export async function buildFilePartitions() {
+ const pending = Object.keys(Partitions).map(sub => createIfNotExists(filesDirectory + sub));
+ return Promise.all(pending);
+ }
+
/**
* Based on the url's classification as local or remote, gleans
* as much information as possible about the specified image
diff --git a/src/server/index.ts b/src/server/index.ts
index 618940c1a..9c48aca45 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -22,13 +22,8 @@ import { log_execution } from "./ActionUtilities";
import GeneralGoogleManager from "./ApiManagers/GeneralGoogleManager";
import GooglePhotosManager from "./ApiManagers/GooglePhotosManager";
-export const publicDirectory = __dirname + "/public";
-export const filesDirectory = publicDirectory + "/files/";
-export enum Partitions {
- pdf_text,
- images,
- videos
-}
+export const publicDirectory = path.resolve(__dirname, "public");
+export const filesDirectory = path.resolve(publicDirectory, "files") + "/";
/**
* These are the functions run before the server starts
@@ -36,13 +31,9 @@ export enum Partitions {
* before clients can access the server should be run or awaited here.
*/
async function preliminaryFunctions() {
- // make project credentials globally accessible
await GoogleCredentialsLoader.loadCredentials();
- // read the resulting credentials into a different namespace
GoogleApiServerUtils.processProjectCredentials();
- // divide the public directory based on type
- await Promise.all(Object.keys(Partitions).map(partition => DashUploadUtils.createIfNotExists(filesDirectory + partition)));
- // connect to the database
+ await DashUploadUtils.buildFilePartitions();
await log_execution({
startMessage: "attempting to initialize mongodb connection",
endMessage: "connection outcome determined",
@@ -59,7 +50,7 @@ async function preliminaryFunctions() {
* that will manage the registration of new routes
* with the server
*/
-function routeSetter(router: RouteManager) {
+function routeSetter({ isRelease, addSupervisedRoute }: RouteManager) {
const managers = [
new UserManager(),
new UploadManager(),
@@ -73,16 +64,16 @@ function routeSetter(router: RouteManager) {
];
// initialize API Managers
- managers.forEach(manager => manager.register(router));
+ managers.forEach(manager => manager.register(addSupervisedRoute));
// initialize the web socket (bidirectional communication: if a user changes
// a field on one client, that change must be broadcast to all other clients)
- WebSocket.initialize(serverPort, router.isRelease);
+ WebSocket.initialize(serverPort, isRelease);
/**
* Accessing root index redirects to home
*/
- router.addSupervisedRoute({
+ addSupervisedRoute({
method: Method.GET,
subscription: "/",
onValidation: ({ res }) => res.redirect("/home")
@@ -94,7 +85,7 @@ function routeSetter(router: RouteManager) {
res.sendFile(path.join(__dirname, '../../deploy/' + filename));
};
- router.addSupervisedRoute({
+ addSupervisedRoute({
method: Method.GET,
subscription: ["/home", new RouteSubscriber("doc").add("docId")],
onValidation: serve,