aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/ActionUtilities.ts29
-rw-r--r--src/server/ApiManagers/DownloadManager.ts3
-rw-r--r--src/server/ApiManagers/GeneralGoogleManager.ts17
-rw-r--r--src/server/ApiManagers/GooglePhotosManager.ts4
-rw-r--r--src/server/ApiManagers/PDFManager.ts12
-rw-r--r--src/server/ApiManagers/SearchManager.ts12
-rw-r--r--src/server/ApiManagers/UploadManager.ts16
-rw-r--r--src/server/ApiManagers/UtilManager.ts8
-rw-r--r--src/server/DashUploadUtils.ts12
-rw-r--r--src/server/Initialization.ts15
-rw-r--r--src/server/RouteManager.ts16
-rw-r--r--src/server/Websocket/Websocket.ts15
-rw-r--r--src/server/apis/google/GoogleApiServerUtils.ts8
-rw-r--r--src/server/authentication/config/passport.ts2
-rw-r--r--src/server/authentication/controllers/user_controller.ts5
-rw-r--r--src/server/authentication/models/current_user_utils.ts6
-rw-r--r--src/server/database.ts4
-rw-r--r--src/server/downsize.ts2
-rw-r--r--src/server/index.ts11
19 files changed, 100 insertions, 97 deletions
diff --git a/src/server/ActionUtilities.ts b/src/server/ActionUtilities.ts
index c9fc86fea..c155796a8 100644
--- a/src/server/ActionUtilities.ts
+++ b/src/server/ActionUtilities.ts
@@ -3,10 +3,11 @@ import { ExecOptions } from 'shelljs';
import { exec } from 'child_process';
import * as path from 'path';
import * as rimraf from "rimraf";
+import { yellow } from 'colors';
export const command_line = (command: string, fromDirectory?: string) => {
return new Promise<string>((resolve, reject) => {
- let options: ExecOptions = {};
+ const options: ExecOptions = {};
if (fromDirectory) {
options.cwd = path.join(__dirname, fromDirectory);
}
@@ -15,14 +16,14 @@ export const command_line = (command: string, fromDirectory?: string) => {
};
export const read_text_file = (relativePath: string) => {
- let target = path.join(__dirname, relativePath);
+ const target = path.join(__dirname, relativePath);
return new Promise<string>((resolve, reject) => {
fs.readFile(target, (err, data) => err ? reject(err) : resolve(data.toString()));
});
};
export const write_text_file = (relativePath: string, contents: any) => {
- let target = path.join(__dirname, relativePath);
+ const target = path.join(__dirname, relativePath);
return new Promise<void>((resolve, reject) => {
fs.writeFile(target, contents, (err) => err ? reject(err) : resolve());
});
@@ -42,31 +43,19 @@ export async function log_execution({ startMessage, endMessage, action }: LogDat
console.log(color, endMessage);
}
-export enum ConsoleColors {
- Black = `\x1b[30m%s\x1b[0m`,
- Red = `\x1b[31m%s\x1b[0m`,
- Green = `\x1b[32m%s\x1b[0m`,
- Yellow = `\x1b[33m%s\x1b[0m`,
- Blue = `\x1b[34m%s\x1b[0m`,
- Magenta = `\x1b[35m%s\x1b[0m`,
- Cyan = `\x1b[36m%s\x1b[0m`,
- White = `\x1b[37m%s\x1b[0m`
-}
-
export function logPort(listener: string, port: number) {
- process.stdout.write(`${listener} listening on port `);
- console.log(ConsoleColors.Yellow, port);
+ console.log(`${listener} listening on port ${yellow(String(port))}`);
}
export function msToTime(duration: number) {
- let milliseconds = Math.floor((duration % 1000) / 100),
+ const milliseconds = Math.floor((duration % 1000) / 100),
seconds = Math.floor((duration / 1000) % 60),
minutes = Math.floor((duration / (1000 * 60)) % 60),
hours = Math.floor((duration / (1000 * 60 * 60)) % 24);
- let hoursS = (hours < 10) ? "0" + hours : hours;
- let minutesS = (minutes < 10) ? "0" + minutes : minutes;
- let secondsS = (seconds < 10) ? "0" + seconds : seconds;
+ const hoursS = (hours < 10) ? "0" + hours : hours;
+ const minutesS = (minutes < 10) ? "0" + minutes : minutes;
+ const secondsS = (seconds < 10) ? "0" + seconds : seconds;
return hoursS + ":" + minutesS + ":" + secondsS + "." + milliseconds;
}
diff --git a/src/server/ApiManagers/DownloadManager.ts b/src/server/ApiManagers/DownloadManager.ts
index 5bad46eda..2280739fc 100644
--- a/src/server/ApiManagers/DownloadManager.ts
+++ b/src/server/ApiManagers/DownloadManager.ts
@@ -57,14 +57,13 @@ export default class DownloadManager extends ApiManager {
register({
method: Method.GET,
- subscription: new RouteSubscriber("/serializeDoc").add("docId"),
+ subscription: new RouteSubscriber("serializeDoc").add("docId"),
onValidation: async ({ req, res }) => {
const { docs, files } = await getDocs(req.params.docId);
res.send({ docs, files: Array.from(files) });
}
});
-
}
}
diff --git a/src/server/ApiManagers/GeneralGoogleManager.ts b/src/server/ApiManagers/GeneralGoogleManager.ts
index 629684e0c..3617779d5 100644
--- a/src/server/ApiManagers/GeneralGoogleManager.ts
+++ b/src/server/ApiManagers/GeneralGoogleManager.ts
@@ -38,16 +38,19 @@ export default class GeneralGoogleManager extends ApiManager {
register({
method: Method.POST,
- subscription: new RouteSubscriber("/googleDocs").add("sector", "action"),
+ subscription: new RouteSubscriber("googleDocs").add("sector", "action"),
onValidation: async ({ req, res, user }) => {
- let sector: GoogleApiServerUtils.Service = req.params.sector as GoogleApiServerUtils.Service;
- let action: GoogleApiServerUtils.Action = req.params.action as GoogleApiServerUtils.Action;
+ const sector: GoogleApiServerUtils.Service = req.params.sector as GoogleApiServerUtils.Service;
+ const action: GoogleApiServerUtils.Action = req.params.action as GoogleApiServerUtils.Action;
const endpoint = await GoogleApiServerUtils.GetEndpoint(GoogleApiServerUtils.Service[sector], user.id);
- let handler = EndpointHandlerMap.get(action);
+ const handler = EndpointHandlerMap.get(action);
if (endpoint && handler) {
- handler(endpoint, req.body)
- .then(response => res.send(response.data))
- .catch(exception => res.send(exception));
+ try {
+ const response = await handler(endpoint, req.body);
+ res.send(response.data);
+ } catch (e) {
+ res.send(e);
+ }
return;
}
res.send(undefined);
diff --git a/src/server/ApiManagers/GooglePhotosManager.ts b/src/server/ApiManagers/GooglePhotosManager.ts
index 4a0c0b936..e2539f120 100644
--- a/src/server/ApiManagers/GooglePhotosManager.ts
+++ b/src/server/ApiManagers/GooglePhotosManager.ts
@@ -47,7 +47,7 @@ export default class GooglePhotosManager extends ApiManager {
if (!token) {
return _error(res, authenticationError);
}
- let failed: GooglePhotosUploadFailure[] = [];
+ const failed: GooglePhotosUploadFailure[] = [];
const batched = BatchedArray.from<GooglePhotosUploadUtils.UploadSource>(media, { batchSize: 25 });
const newMediaItems = await batched.batchedMapPatientInterval<NewMediaItem>(
{ magnitude: 100, unit: TimeUnit.Milliseconds },
@@ -87,7 +87,7 @@ export default class GooglePhotosManager extends ApiManager {
let failed = 0;
if (contents) {
const completed: Opt<DashUploadUtils.ImageUploadInformation>[] = [];
- for (let item of contents.mediaItems) {
+ for (const item of contents.mediaItems) {
const { contentSize, ...attributes } = await DashUploadUtils.InspectImage(item.baseUrl);
const found: Opt<DashUploadUtils.ImageUploadInformation> = await Database.Auxiliary.QueryUploadHistory(contentSize!);
if (!found) {
diff --git a/src/server/ApiManagers/PDFManager.ts b/src/server/ApiManagers/PDFManager.ts
index 151b48dd9..a190ab0cb 100644
--- a/src/server/ApiManagers/PDFManager.ts
+++ b/src/server/ApiManagers/PDFManager.ts
@@ -8,7 +8,7 @@ const imageSize = require("probe-image-size");
import * as express from "express";
import * as path from "path";
import { Directory, serverPathToFile, clientPathToFile } from "./UploadManager";
-import { ConsoleColors } from "../ActionUtilities";
+import { red } from "colors";
export default class PDFManager extends ApiManager {
@@ -32,10 +32,10 @@ function getOrCreateThumbnail(thumbnailName: string, res: express.Response) {
const path = serverPathToFile(Directory.pdf_thumbnails, thumbnailName);
exists(path, (exists: boolean) => {
if (exists) {
- let existingThumbnail = createReadStream(path);
+ const existingThumbnail = createReadStream(path);
imageSize(existingThumbnail, (err: any, { width, height }: any) => {
if (err) {
- console.log(ConsoleColors.Red, `In PDF thumbnail response, unable to determine dimensions of ${thumbnailName}:`);
+ console.log(red(`In PDF thumbnail response, unable to determine dimensions of ${thumbnailName}:`));
console.log(err);
return;
}
@@ -81,7 +81,7 @@ async function CreateThumbnail(file: string, pageNumber: number, res: express.Re
});
});
out.on("error", error => {
- console.log(ConsoleColors.Red, `In PDF thumbnail creation, encountered the following error when piping ${pngFile}:`);
+ console.log(red(`In PDF thumbnail creation, encountered the following error when piping ${pngFile}:`));
console.log(error);
});
}
@@ -89,8 +89,8 @@ async function CreateThumbnail(file: string, pageNumber: number, res: express.Re
class NodeCanvasFactory {
create = (width: number, height: number) => {
- var canvas = createCanvas(width, height);
- var context = canvas.getContext('2d');
+ const canvas = createCanvas(width, height);
+ const context = canvas.getContext('2d');
return {
canvas,
context
diff --git a/src/server/ApiManagers/SearchManager.ts b/src/server/ApiManagers/SearchManager.ts
index d3f8995b0..7afecbb18 100644
--- a/src/server/ApiManagers/SearchManager.ts
+++ b/src/server/ApiManagers/SearchManager.ts
@@ -1,7 +1,7 @@
import ApiManager, { Registration } from "./ApiManager";
import { Method } from "../RouteManager";
import { Search } from "../Search";
-var findInFiles = require('find-in-files');
+const findInFiles = require('find-in-files');
import * as path from 'path';
import { pathToDirectory, Directory } from "./UploadManager";
@@ -13,14 +13,14 @@ export default class SearchManager extends ApiManager {
method: Method.GET,
subscription: "/textsearch",
onValidation: async ({ req, res }) => {
- let q = req.query.q;
+ const q = req.query.q;
if (q === undefined) {
res.send([]);
return;
}
- let results = await findInFiles.find({ 'term': q, 'flags': 'ig' }, pathToDirectory(Directory.text), ".txt$");
- let resObj: { ids: string[], numFound: number, lines: string[] } = { ids: [], numFound: 0, lines: [] };
- for (var result in results) {
+ const results = await findInFiles.find({ 'term': q, 'flags': 'ig' }, pathToDirectory(Directory.text), ".txt$");
+ const resObj: { ids: string[], numFound: number, lines: string[] } = { ids: [], numFound: 0, lines: [] };
+ for (const result in results) {
resObj.ids.push(path.basename(result, ".txt").replace(/upload_/, ""));
resObj.lines.push(results[result].line);
resObj.numFound++;
@@ -39,7 +39,7 @@ export default class SearchManager extends ApiManager {
res.send([]);
return;
}
- let results = await Search.Instance.search(solrQuery);
+ const results = await Search.Instance.search(solrQuery);
res.send(results);
}
});
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 80ae0ad61..da1f83b75 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -2,7 +2,7 @@ import ApiManager, { Registration } from "./ApiManager";
import { Method, _success } from "../RouteManager";
import * as formidable from 'formidable';
import v4 = require('uuid/v4');
-var AdmZip = require('adm-zip');
+const AdmZip = require('adm-zip');
import { extname, basename, dirname } from 'path';
import { createReadStream, createWriteStream, unlink, readFileSync } from "fs";
import { publicDirectory, filesDirectory } from "..";
@@ -42,12 +42,12 @@ export default class UploadManager extends ApiManager {
method: Method.POST,
subscription: "/upload",
onValidation: async ({ req, res }) => {
- let form = new formidable.IncomingForm();
+ const form = new formidable.IncomingForm();
form.uploadDir = pathToDirectory(Directory.parsed_files);
form.keepExtensions = true;
return new Promise<void>(resolve => {
form.parse(req, async (_err, _fields, files) => {
- let results: any[] = [];
+ const results: any[] = [];
for (const key in files) {
const result = await DashUploadUtils.upload(files[key]);
result && results.push(result);
@@ -63,7 +63,7 @@ export default class UploadManager extends ApiManager {
method: Method.POST,
subscription: "/uploadDoc",
onValidation: ({ req, res }) => {
- let form = new formidable.IncomingForm();
+ const form = new formidable.IncomingForm();
form.keepExtensions = true;
// let path = req.body.path;
const ids: { [id: string]: string } = {};
@@ -122,8 +122,8 @@ export default class UploadManager extends ApiManager {
zip.getEntries().forEach((entry: any) => {
if (!entry.entryName.startsWith("files/")) return;
let directory = dirname(entry.entryName) + "/";
- let extension = extname(entry.entryName);
- let base = basename(entry.entryName).split(".")[0];
+ const extension = extname(entry.entryName);
+ const base = basename(entry.entryName).split(".")[0];
try {
zip.extractEntryTo(entry.entryName, publicDirectory, true, false);
directory = "/" + directory;
@@ -139,7 +139,7 @@ export default class UploadManager extends ApiManager {
const json = zip.getEntry("doc.json");
let docs: any;
try {
- let data = JSON.parse(json.getData().toString("utf8"));
+ const data = JSON.parse(json.getData().toString("utf8"));
docs = data.docs;
id = data.id;
docs = Object.keys(docs).map(key => docs[key]);
@@ -189,7 +189,7 @@ export default class UploadManager extends ApiManager {
return imageDataUri.outputFile(uri, serverPathToFile(Directory.images, filename)).then((savedName: string) => {
const ext = extname(savedName).toLowerCase();
const { pngs, jpgs } = AcceptibleMedia;
- let resizers = [
+ const resizers = [
{ resizer: sharp().resize(100, undefined, { withoutEnlargement: true }), suffix: "_s" },
{ resizer: sharp().resize(400, undefined, { withoutEnlargement: true }), suffix: "_m" },
{ resizer: sharp().resize(900, undefined, { withoutEnlargement: true }), suffix: "_l" },
diff --git a/src/server/ApiManagers/UtilManager.ts b/src/server/ApiManagers/UtilManager.ts
index c1234be6c..601a7d0d0 100644
--- a/src/server/ApiManagers/UtilManager.ts
+++ b/src/server/ApiManagers/UtilManager.ts
@@ -35,11 +35,11 @@ export default class UtilManager extends ApiManager {
method: Method.GET,
subscription: "/buxton",
onValidation: async ({ res }) => {
- let cwd = '../scraping/buxton';
+ const cwd = '../scraping/buxton';
- let onResolved = (stdout: string) => { console.log(stdout); res.redirect("/"); };
- let onRejected = (err: any) => { console.error(err.message); res.send(err); };
- let tryPython3 = () => command_line('python3 scraper.py', cwd).then(onResolved, onRejected);
+ const onResolved = (stdout: string) => { console.log(stdout); res.redirect("/"); };
+ const onRejected = (err: any) => { console.error(err.message); res.send(err); };
+ const tryPython3 = () => command_line('python3 scraper.py', cwd).then(onResolved, onRejected);
return command_line('python scraper.py', cwd).then(onResolved, tryPython3);
},
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index 9ccc72e35..d9d985ca5 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -9,10 +9,11 @@ import { AcceptibleMedia } from './SharedMediaTypes';
import { filesDirectory } from '.';
import { File } from 'formidable';
import { basename } from "path";
-import { ConsoleColors, createIfNotExists } from './ActionUtilities';
+import { createIfNotExists } from './ActionUtilities';
import { ParsedPDF } from "../server/PdfTypes";
const parse = require('pdf-parse');
import { Directory, serverPathToFile, clientPathToFile } from './ApiManagers/UploadManager';
+import { red } from 'colors';
export enum SizeSuffix {
Small = "_s",
@@ -86,12 +87,12 @@ export namespace DashUploadUtils {
}
}
- console.log(ConsoleColors.Red, `Ignoring unsupported file (${name}) with upload type (${type}).`);
+ console.log(red(`Ignoring unsupported file (${name}) with upload type (${type}).`));
return { clientAccessPath: undefined };
}
async function UploadPdf(absolutePath: string) {
- let dataBuffer = fs.readFileSync(absolutePath);
+ const dataBuffer = fs.readFileSync(absolutePath);
const result: ParsedPDF = await parse(dataBuffer);
const parsedName = basename(absolutePath);
await new Promise<void>((resolve, reject) => {
@@ -194,7 +195,7 @@ export namespace DashUploadUtils {
const { isLocal, stream, normalizedUrl, contentSize, contentType, exifData } = metadata;
const resolved = filename || generate(prefix, normalizedUrl);
const extension = format || sanitizeExtension(normalizedUrl || resolved);
- let information: ImageUploadInformation = {
+ const information: ImageUploadInformation = {
clientAccessPath: clientPathToFile(Directory.images, resolved),
serverAccessPaths: {},
exifData,
@@ -215,8 +216,7 @@ export namespace DashUploadUtils {
} else if (jpgs.includes(extension)) {
resizers.forEach(element => element.resizer = element.resizer.jpeg());
}
- for (let { resizer, suffix } of resizers) {
- let mediaPath: string;
+ for (const { resizer, suffix } of resizers) {
await new Promise<void>(resolve => {
const filename = InjectSize(resolved, suffix);
information.serverAccessPaths[suffix] = serverPathToFile(Directory.images, filename);
diff --git a/src/server/Initialization.ts b/src/server/Initialization.ts
index 8b633a7cd..74770153d 100644
--- a/src/server/Initialization.ts
+++ b/src/server/Initialization.ts
@@ -19,8 +19,9 @@ import * as fs from 'fs';
import * as request from 'request';
import RouteSubscriber from './RouteSubscriber';
import { publicDirectory } from '.';
-import { ConsoleColors, logPort } from './ActionUtilities';
+import { logPort } from './ActionUtilities';
import { timeMap } from './ApiManagers/UserManager';
+import { blue, yellow } from 'colors';
/* RouteSetter is a wrapper around the server that prevents the server
from being exposed. */
@@ -53,10 +54,13 @@ export default async function InitializeServer(options: InitializationOptions) {
registerAuthenticationRoutes(server);
registerCorsProxy(server);
- const isRelease = determineEnvironment(); //vs. dev mode
+ const isRelease = determineEnvironment();
routeSetter(new RouteManager(server, isRelease));
- server.listen(listenAtPort, () => logPort("server", listenAtPort));
+ server.listen(listenAtPort, () => {
+ logPort("server", listenAtPort);
+ console.log();
+ });
return isRelease;
}
@@ -92,8 +96,9 @@ function buildWithMiddleware(server: express.Express) {
function determineEnvironment() {
const isRelease = process.env.RELEASE === "true";
- console.log(`running server in ${isRelease ? 'release' : 'debug'} mode`);
- console.log(process.env.PWD);
+ const color = isRelease ? blue : yellow;
+ const label = isRelease ? "release" : "development";
+ console.log(`\nrunning server in ${color(label)} mode`);
let clientUtils = fs.readFileSync("./src/client/util/ClientUtils.ts.temp", "utf8");
clientUtils = `//AUTO-GENERATED FILE: DO NOT EDIT\n${clientUtils.replace('"mode"', String(isRelease))}`;
diff --git a/src/server/RouteManager.ts b/src/server/RouteManager.ts
index 7c49485f1..3af36d879 100644
--- a/src/server/RouteManager.ts
+++ b/src/server/RouteManager.ts
@@ -1,7 +1,7 @@
import RouteSubscriber from "./RouteSubscriber";
import { DashUserModel } from "./authentication/models/user_model";
import * as express from 'express';
-import { ConsoleColors } from "./ActionUtilities";
+import { yellow, cyan, red } from 'colors';
export enum Method {
GET,
@@ -41,6 +41,12 @@ export default class RouteManager {
this._isRelease = isRelease;
}
+ log = () => {
+ console.log(yellow("\nthe following server routes have been registered:"));
+ Array.from(registered.keys()).sort().forEach(route => console.log(cyan(route)));
+ console.log();
+ }
+
/**
*
* @param initializer
@@ -48,14 +54,14 @@ export default class RouteManager {
addSupervisedRoute = (initializer: RouteInitializer): void => {
const { method, subscription, onValidation, onUnauthenticated, onError } = initializer;
const isRelease = this._isRelease;
- let supervised = async (req: express.Request, res: express.Response) => {
+ const supervised = async (req: express.Request, res: express.Response) => {
const { user, originalUrl: target } = req;
const core = { req, res, isRelease };
const tryExecute = async (toExecute: (args: any) => any | Promise<any>, args: any) => {
try {
await toExecute(args);
} catch (e) {
- console.log(ConsoleColors.Red, target, user?.email ?? "<user logged out>");
+ console.log(red(target), user?.email ?? "<user logged out>");
if (onError) {
onError({ ...core, error: e });
} else {
@@ -78,7 +84,7 @@ export default class RouteManager {
}
setTimeout(() => {
if (!res.headersSent) {
- console.log("Initiating fallback for ", target);
+ console.log(`Initiating fallback for ${target}`);
const warning = `request to ${target} fell through - this is a fallback response`;
res.send({ warning });
}
@@ -94,7 +100,7 @@ export default class RouteManager {
const existing = registered.get(route);
if (existing) {
if (existing.has(method)) {
- console.log(ConsoleColors.Red, `\nDuplicate registration error: already registered ${route} with Method[${method}]`);
+ console.log(red(`\nDuplicate registration error: already registered ${route} with Method[${method}]`));
console.log('Please remove duplicate registrations before continuing...\n');
process.exit(0);
}
diff --git a/src/server/Websocket/Websocket.ts b/src/server/Websocket/Websocket.ts
index fbf71f707..2eb764945 100644
--- a/src/server/Websocket/Websocket.ts
+++ b/src/server/Websocket/Websocket.ts
@@ -7,12 +7,13 @@ import { Search } from "../Search";
import * as io from 'socket.io';
import YoutubeApi from "../apis/youtube/youtubeApiSample";
import { GoogleCredentialsLoader } from "../credentials/CredentialsLoader";
-import { ConsoleColors, logPort } from "../ActionUtilities";
+import { logPort } from "../ActionUtilities";
import { timeMap } from "../ApiManagers/UserManager";
+import { green } from "colors";
export namespace WebSocket {
- let clients: { [key: string]: Client } = {};
+ const clients: { [key: string]: Client } = {};
export const socketMap = new Map<SocketIO.Socket, string>();
export async function start(serverPort: number, isRelease: boolean) {
@@ -27,7 +28,7 @@ export namespace WebSocket {
const endpoint = io();
endpoint.on("connection", function (socket: Socket) {
socket.use((_packet, next) => {
- let userEmail = socketMap.get(socket);
+ const userEmail = socketMap.get(socket);
if (userEmail) {
timeMap[userEmail] = Date.now();
}
@@ -85,7 +86,7 @@ export namespace WebSocket {
function barReceived(socket: SocketIO.Socket, userEmail: string) {
clients[userEmail] = new Client(userEmail.toString());
- console.log(ConsoleColors.Green, `user ${userEmail} has connected to the web socket`);
+ console.log(green(`user ${userEmail} has connected to the web socket`));
socketMap.set(socket, userEmail);
}
@@ -178,12 +179,12 @@ export namespace WebSocket {
for (let key in docfield) {
if (!key.startsWith("fields.")) continue;
dynfield = true;
- let val = docfield[key];
+ const val = docfield[key];
key = key.substring(7);
Object.values(suffixMap).forEach(suf => update[key + getSuffix(suf)] = { set: null });
- let term = ToSearchTerm(val);
+ const term = ToSearchTerm(val);
if (term !== undefined) {
- let { suffix, value } = term;
+ const { suffix, value } = term;
update[key + suffix] = { set: value };
}
}
diff --git a/src/server/apis/google/GoogleApiServerUtils.ts b/src/server/apis/google/GoogleApiServerUtils.ts
index b0f3ba993..329107a71 100644
--- a/src/server/apis/google/GoogleApiServerUtils.ts
+++ b/src/server/apis/google/GoogleApiServerUtils.ts
@@ -135,7 +135,7 @@ export namespace GoogleApiServerUtils {
return resolve();
}
let routed: Opt<Endpoint>;
- let parameters: any = { auth, version: "v1" };
+ const parameters: any = { auth, version: "v1" };
switch (sector) {
case Service.Documents:
routed = google.docs(parameters).documents;
@@ -318,7 +318,7 @@ export namespace GoogleApiServerUtils {
*/
async function retrieveCredentials(userId: string): Promise<{ credentials: Opt<Credentials>, refreshed: boolean }> {
let credentials: Opt<Credentials> = await Database.Auxiliary.GoogleAuthenticationToken.Fetch(userId);
- let refreshed = false;
+ const refreshed = false;
if (!credentials) {
return { credentials: undefined, refreshed };
}
@@ -340,9 +340,9 @@ export namespace GoogleApiServerUtils {
* @returns the updated credentials
*/
async function refreshAccessToken(credentials: Credentials, userId: string): Promise<Credentials> {
- let headerParameters = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } };
+ const headerParameters = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } };
const { client_id, client_secret } = GoogleCredentialsLoader.ProjectCredentials;
- let url = `https://oauth2.googleapis.com/token?${qs.stringify({
+ const url = `https://oauth2.googleapis.com/token?${qs.stringify({
refreshToken: credentials.refresh_token,
client_id,
client_secret,
diff --git a/src/server/authentication/config/passport.ts b/src/server/authentication/config/passport.ts
index 726df7fd7..2271109a5 100644
--- a/src/server/authentication/config/passport.ts
+++ b/src/server/authentication/config/passport.ts
@@ -40,7 +40,7 @@ export let isAuthenticated = (req: Request, res: Response, next: NextFunction) =
export let isAuthorized = (req: Request, res: Response, next: NextFunction) => {
const provider = req.path.split("/").slice(-1)[0];
- if (_.find((req.user as any).tokens!, { kind: provider })) {
+ if (_.find(req.user?.tokens, { kind: provider })) {
next();
} else {
res.redirect(`/auth/${provider}`);
diff --git a/src/server/authentication/controllers/user_controller.ts b/src/server/authentication/controllers/user_controller.ts
index 517353479..f0086d4ea 100644
--- a/src/server/authentication/controllers/user_controller.ts
+++ b/src/server/authentication/controllers/user_controller.ts
@@ -68,9 +68,9 @@ export let postSignup = (req: Request, res: Response, next: NextFunction) => {
};
-let tryRedirectToTarget = (req: Request, res: Response) => {
+const tryRedirectToTarget = (req: Request, res: Response) => {
if (req.session && req.session.target) {
- let target = req.session.target;
+ const target = req.session.target;
req.session.target = undefined;
res.redirect(target);
} else {
@@ -148,7 +148,6 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
const email = req.body.email;
async.waterfall([
function (done: any) {
- let token: string;
c.randomBytes(20, function (err: any, buffer: Buffer) {
if (err) {
done(null);
diff --git a/src/server/authentication/models/current_user_utils.ts b/src/server/authentication/models/current_user_utils.ts
index ac4462f78..50bfb4832 100644
--- a/src/server/authentication/models/current_user_utils.ts
+++ b/src/server/authentication/models/current_user_utils.ts
@@ -42,10 +42,10 @@ export class CurrentUserUtils {
// setup the "creator" buttons for the sidebar-- eg. the default set of draggable document creation tools
static setupCreatorButtons(doc: Doc) {
- let notes = CurrentUserUtils.setupNoteTypes(doc);
+ const notes = CurrentUserUtils.setupNoteTypes(doc);
doc.noteTypes = Docs.Create.TreeDocument(notes, { title: "Note Types", height: 75 });
doc.activePen = doc;
- let docProtoData: { title: string, icon: string, drag?: string, ignoreClick?: boolean, click?: string, ischecked?: string, activePen?: Doc, backgroundColor?: string, dragFactory?: Doc }[] = [
+ const docProtoData: { title: string, icon: string, drag?: string, ignoreClick?: boolean, click?: string, ischecked?: string, activePen?: Doc, backgroundColor?: string, dragFactory?: Doc }[] = [
{ title: "collection", icon: "folder", ignoreClick: true, drag: 'Docs.Create.FreeformDocument([], { nativeWidth: undefined, nativeHeight: undefined, width: 150, height: 100, title: "freeform" })' },
{ title: "todo item", icon: "check", ignoreClick: true, drag: 'getCopy(this.dragFactory, true)', dragFactory: notes[notes.length - 1] },
{ title: "web page", icon: "globe-asia", ignoreClick: true, drag: 'Docs.Create.WebDocument("https://en.wikipedia.org/wiki/Hedgehog", { width: 300, height: 300, title: "New Webpage" })' },
@@ -278,7 +278,7 @@ export class CurrentUserUtils {
if (this._northstarCatalog && CurrentUserUtils._northstarSchemas) {
this._northstarCatalog.schemas!.push(schema);
CurrentUserUtils._northstarSchemas.push(schemaDoc);
- let schemas = Cast(CurrentUserUtils.UserDocument.DBSchemas, listSpec("string"), []);
+ const schemas = Cast(CurrentUserUtils.UserDocument.DBSchemas, listSpec("string"), []);
schemas.push(schema.displayName!);
CurrentUserUtils.UserDocument.DBSchemas = new List<string>(schemas);
}
diff --git a/src/server/database.ts b/src/server/database.ts
index db81245c1..4039e6203 100644
--- a/src/server/database.ts
+++ b/src/server/database.ts
@@ -71,7 +71,7 @@ export namespace Database {
public async update(id: string, value: any, callback: (err: mongodb.MongoError, res: mongodb.UpdateWriteOpResult) => void, upsert = true, collectionName = Database.DocumentsCollection) {
if (this.db) {
- let collection = this.db.collection(collectionName);
+ const collection = this.db.collection(collectionName);
const prom = this.currentWrites[id];
let newProm: Promise<void>;
const run = (): Promise<void> => {
@@ -96,7 +96,7 @@ export namespace Database {
public replace(id: string, value: any, callback: (err: mongodb.MongoError, res: mongodb.UpdateWriteOpResult) => void, upsert = true, collectionName = Database.DocumentsCollection) {
if (this.db) {
- let collection = this.db.collection(collectionName);
+ const collection = this.db.collection(collectionName);
const prom = this.currentWrites[id];
let newProm: Promise<void>;
const run = (): Promise<void> => {
diff --git a/src/server/downsize.ts b/src/server/downsize.ts
index ed68fbecc..cd0d83812 100644
--- a/src/server/downsize.ts
+++ b/src/server/downsize.ts
@@ -17,7 +17,7 @@ fs.readdir(folder, async (err, files) => {
// });
for (const file of files) {
const filesplit = file.split(".");
- let resizers = [
+ const resizers = [
{ resizer: sharp().resize(100, undefined, { withoutEnlargement: true }), suffix: "_s" },
{ resizer: sharp().resize(400, undefined, { withoutEnlargement: true }), suffix: "_m" },
{ resizer: sharp().resize(900, undefined, { withoutEnlargement: true }), suffix: "_l" },
diff --git a/src/server/index.ts b/src/server/index.ts
index d77923710..0e0bd0bd6 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -51,7 +51,7 @@ async function preliminaryFunctions() {
* that will manage the registration of new routes
* with the server
*/
-function routeSetter({ isRelease, addSupervisedRoute }: RouteManager) {
+function routeSetter({ isRelease, addSupervisedRoute, log }: RouteManager) {
const managers = [
new UserManager(),
new UploadManager(),
@@ -67,6 +67,7 @@ function routeSetter({ isRelease, addSupervisedRoute }: RouteManager) {
// initialize API Managers
managers.forEach(manager => manager.register(addSupervisedRoute));
+ log();
// initialize the web socket (bidirectional communication: if a user changes
// a field on one client, that change must be broadcast to all other clients)
@@ -82,8 +83,8 @@ function routeSetter({ isRelease, addSupervisedRoute }: RouteManager) {
});
const serve: OnUnauthenticated = ({ req, res }) => {
- let detector = new mobileDetect(req.headers['user-agent'] || "");
- let filename = detector.mobile() !== null ? 'mobile/image.html' : 'index.html';
+ const detector = new mobileDetect(req.headers['user-agent'] || "");
+ const filename = detector.mobile() !== null ? 'mobile/image.html' : 'index.html';
res.sendFile(path.join(__dirname, '../../deploy/' + filename));
};
@@ -104,8 +105,8 @@ function routeSetter({ isRelease, addSupervisedRoute }: RouteManager) {
(async function start() {
await log_execution({
- startMessage: "starting execution of preliminary functions",
- endMessage: "completed preliminary functions",
+ startMessage: "\nstarting execution of preliminary functions",
+ endMessage: "completed preliminary functions\n",
action: preliminaryFunctions
});
await initializeServer({ listenAtPort: 1050, routeSetter });