diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/ActionUtilities.ts | 29 | ||||
| -rw-r--r-- | src/server/ApiManagers/DownloadManager.ts | 3 | ||||
| -rw-r--r-- | src/server/ApiManagers/GeneralGoogleManager.ts | 17 | ||||
| -rw-r--r-- | src/server/ApiManagers/GooglePhotosManager.ts | 4 | ||||
| -rw-r--r-- | src/server/ApiManagers/PDFManager.ts | 12 | ||||
| -rw-r--r-- | src/server/ApiManagers/SearchManager.ts | 12 | ||||
| -rw-r--r-- | src/server/ApiManagers/UploadManager.ts | 16 | ||||
| -rw-r--r-- | src/server/ApiManagers/UtilManager.ts | 8 | ||||
| -rw-r--r-- | src/server/DashUploadUtils.ts | 12 | ||||
| -rw-r--r-- | src/server/Initialization.ts | 15 | ||||
| -rw-r--r-- | src/server/RouteManager.ts | 16 | ||||
| -rw-r--r-- | src/server/Websocket/Websocket.ts | 15 | ||||
| -rw-r--r-- | src/server/apis/google/GoogleApiServerUtils.ts | 8 | ||||
| -rw-r--r-- | src/server/authentication/config/passport.ts | 2 | ||||
| -rw-r--r-- | src/server/authentication/controllers/user_controller.ts | 5 | ||||
| -rw-r--r-- | src/server/authentication/models/current_user_utils.ts | 6 | ||||
| -rw-r--r-- | src/server/database.ts | 4 | ||||
| -rw-r--r-- | src/server/downsize.ts | 2 | ||||
| -rw-r--r-- | src/server/index.ts | 11 |
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 }); |
