aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Utils.ts3
-rw-r--r--src/client/apis/GoogleAuthenticationManager.tsx5
-rw-r--r--src/client/apis/google_docs/GoogleApiClientUtils.ts7
-rw-r--r--src/client/apis/google_docs/GooglePhotosClientUtils.ts5
-rw-r--r--src/client/cognitive_services/CognitiveServices.ts3
-rw-r--r--src/client/util/History.ts3
-rw-r--r--src/client/util/Import & Export/DirectoryImportBox.tsx3
-rw-r--r--src/client/util/Import & Export/ImageUtils.ts7
-rw-r--r--src/client/util/SharingManager.tsx3
-rw-r--r--src/client/views/MainView.tsx5
-rw-r--r--src/client/views/collections/CollectionSubView.tsx4
-rw-r--r--src/client/views/nodes/ImageBox.tsx3
-rw-r--r--src/client/views/nodes/VideoBox.tsx3
-rw-r--r--src/client/views/search/SearchBox.tsx3
-rw-r--r--src/mobile/ImageUpload.tsx3
-rw-r--r--src/new_fields/RichTextUtils.ts3
-rw-r--r--src/server/ApiManagers/DeleteManager.ts13
-rw-r--r--src/server/ApiManagers/ExportManager.ts5
-rw-r--r--src/server/ApiManagers/PDFManager.ts2
-rw-r--r--src/server/ApiManagers/UploadManager.ts15
-rw-r--r--src/server/ApiManagers/UserManager.ts7
-rw-r--r--src/server/ApiManagers/UtilManager.ts7
-rw-r--r--src/server/Initialization.ts28
-rw-r--r--src/server/RouteManager.ts5
-rw-r--r--src/server/RouteStore.ts45
-rw-r--r--src/server/RouteSubscriber.ts2
-rw-r--r--src/server/authentication/config/passport.ts5
-rw-r--r--src/server/authentication/controllers/user_controller.ts32
-rw-r--r--src/server/authentication/models/current_user_utils.ts7
-rw-r--r--src/server/index.ts26
30 files changed, 96 insertions, 166 deletions
diff --git a/src/Utils.ts b/src/Utils.ts
index 9a2f01f80..abff2eaba 100644
--- a/src/Utils.ts
+++ b/src/Utils.ts
@@ -2,7 +2,6 @@ import v4 = require('uuid/v4');
import v5 = require("uuid/v5");
import { Socket } from 'socket.io';
import { Message } from './server/Message';
-import { RouteStore } from './server/RouteStore';
export namespace Utils {
@@ -46,7 +45,7 @@ export namespace Utils {
}
export function CorsProxy(url: string): string {
- return prepend(RouteStore.corsProxy + "/") + encodeURIComponent(url);
+ return prepend("/corsProxy/") + encodeURIComponent(url);
}
export function CopyText(text: string) {
diff --git a/src/client/apis/GoogleAuthenticationManager.tsx b/src/client/apis/GoogleAuthenticationManager.tsx
index 1ec9d8412..ae77c4b7b 100644
--- a/src/client/apis/GoogleAuthenticationManager.tsx
+++ b/src/client/apis/GoogleAuthenticationManager.tsx
@@ -4,7 +4,6 @@ import * as React from "react";
import MainViewModal from "../views/MainViewModal";
import { Opt } from "../../new_fields/Doc";
import { Networking } from "../Network";
-import { RouteStore } from "../../server/RouteStore";
import "./GoogleAuthenticationManager.scss";
const AuthenticationUrl = "https://accounts.google.com/o/oauth2/v2/auth";
@@ -31,7 +30,7 @@ export default class GoogleAuthenticationManager extends React.Component<{}> {
}
public fetchOrGenerateAccessToken = async () => {
- let response = await Networking.FetchFromServer(RouteStore.readGoogleAccessToken);
+ let response = await Networking.FetchFromServer("/readGoogleAccessToken");
// if this is an authentication url, activate the UI to register the new access token
if (new RegExp(AuthenticationUrl).test(response)) {
this.isOpen = true;
@@ -44,7 +43,7 @@ export default class GoogleAuthenticationManager extends React.Component<{}> {
return;
}
const { access_token, avatar, name } = await Networking.PostToServer(
- RouteStore.writeGoogleAccessToken,
+ "/writeGoogleAccessToken",
{ authenticationCode }
);
runInAction(() => {
diff --git a/src/client/apis/google_docs/GoogleApiClientUtils.ts b/src/client/apis/google_docs/GoogleApiClientUtils.ts
index 183679317..26c7f8d2e 100644
--- a/src/client/apis/google_docs/GoogleApiClientUtils.ts
+++ b/src/client/apis/google_docs/GoogleApiClientUtils.ts
@@ -1,5 +1,4 @@
import { docs_v1, slides_v1 } from "googleapis";
-import { RouteStore } from "../../../server/RouteStore";
import { Opt } from "../../../new_fields/Doc";
import { isArray } from "util";
import { EditorState } from "prosemirror-state";
@@ -77,7 +76,7 @@ export namespace GoogleApiClientUtils {
* @returns the documentId of the newly generated document, or undefined if the creation process fails.
*/
export const create = async (options: CreateOptions): Promise<CreationResult> => {
- const path = `${RouteStore.googleDocs}/Documents/${Actions.Create}`;
+ const path = `/googleDocs/Documents/${Actions.Create}`;
const parameters = {
requestBody: {
title: options.title || `Dash Export (${new Date().toDateString()})`
@@ -154,7 +153,7 @@ export namespace GoogleApiClientUtils {
}
export const retrieve = async (options: RetrieveOptions): Promise<RetrievalResult> => {
- const path = `${RouteStore.googleDocs}/Documents/${Actions.Retrieve}`;
+ const path = `/googleDocs/Documents/${Actions.Retrieve}`;
try {
const parameters = { documentId: options.documentId };
const schema: RetrievalResult = await Networking.PostToServer(path, parameters);
@@ -165,7 +164,7 @@ export namespace GoogleApiClientUtils {
};
export const update = async (options: UpdateOptions): Promise<UpdateResult> => {
- const path = `${RouteStore.googleDocs}/Documents/${Actions.Update}`;
+ const path = `/googleDocs/Documents/${Actions.Update}`;
const parameters = {
documentId: options.documentId,
requestBody: {
diff --git a/src/client/apis/google_docs/GooglePhotosClientUtils.ts b/src/client/apis/google_docs/GooglePhotosClientUtils.ts
index 402fc64b5..bf8897061 100644
--- a/src/client/apis/google_docs/GooglePhotosClientUtils.ts
+++ b/src/client/apis/google_docs/GooglePhotosClientUtils.ts
@@ -1,5 +1,4 @@
import { Utils } from "../../../Utils";
-import { RouteStore } from "../../../server/RouteStore";
import { ImageField } from "../../../new_fields/URLField";
import { Cast, StrCast } from "../../../new_fields/Types";
import { Doc, Opt, DocListCastAsync } from "../../../new_fields/Doc";
@@ -307,7 +306,7 @@ export namespace GooglePhotos {
};
export const WriteMediaItemsToServer = async (body: { mediaItems: any[] }): Promise<UploadInformation[]> => {
- const uploads = await Networking.PostToServer(RouteStore.googlePhotosMediaDownload, body);
+ const uploads = await Networking.PostToServer("/googlePhotosMediaDownload", body);
return uploads;
};
@@ -345,7 +344,7 @@ export namespace GooglePhotos {
media.push({ url, description });
}
if (media.length) {
- const results = await Networking.PostToServer(RouteStore.googlePhotosMediaUpload, { media, album });
+ const results = await Networking.PostToServer("/googlePhotosMediaUpload", { media, album });
return results;
}
};
diff --git a/src/client/cognitive_services/CognitiveServices.ts b/src/client/cognitive_services/CognitiveServices.ts
index 08fcb4883..af5fb39fc 100644
--- a/src/client/cognitive_services/CognitiveServices.ts
+++ b/src/client/cognitive_services/CognitiveServices.ts
@@ -2,7 +2,6 @@ import * as request from "request-promise";
import { Doc, Field, Opt } from "../../new_fields/Doc";
import { Cast } from "../../new_fields/Types";
import { Docs } from "../documents/Documents";
-import { RouteStore } from "../../server/RouteStore";
import { Utils } from "../../Utils";
import { InkData } from "../../new_fields/InkField";
import { UndoManager } from "../util/UndoManager";
@@ -39,7 +38,7 @@ export enum Confidence {
export namespace CognitiveServices {
const ExecuteQuery = async <D>(service: Service, manager: APIManager<D>, data: D): Promise<any> => {
- return fetch(Utils.prepend(`${RouteStore.cognitiveServices}/${service}`)).then(async response => {
+ return fetch(Utils.prepend(`cognitiveServices/${service}`)).then(async response => {
let apiKey = await response.text();
if (!apiKey) {
console.log(`No API key found for ${service}: ensure index.ts has access to a .env file in your root directory`);
diff --git a/src/client/util/History.ts b/src/client/util/History.ts
index 899abbe40..1c51236cb 100644
--- a/src/client/util/History.ts
+++ b/src/client/util/History.ts
@@ -1,6 +1,5 @@
import { Doc, Opt, Field } from "../../new_fields/Doc";
import { DocServer } from "../DocServer";
-import { RouteStore } from "../../server/RouteStore";
import { MainView } from "../views/MainView";
import * as qs from 'query-string';
import { Utils, OmitKeys } from "../../Utils";
@@ -26,7 +25,7 @@ export namespace HistoryUtil {
// const handlers: ((state: ParsedUrl | null) => void)[] = [];
function onHistory(e: PopStateEvent) {
- if (window.location.pathname !== RouteStore.home) {
+ if (window.location.pathname !== "/home") {
const url = e.state as ParsedUrl || parseUrl(window.location);
if (url) {
switch (url.type) {
diff --git a/src/client/util/Import & Export/DirectoryImportBox.tsx b/src/client/util/Import & Export/DirectoryImportBox.tsx
index 2e0ba25eb..437e7766b 100644
--- a/src/client/util/Import & Export/DirectoryImportBox.tsx
+++ b/src/client/util/Import & Export/DirectoryImportBox.tsx
@@ -1,7 +1,6 @@
import "fs";
import React = require("react");
import { Doc, DocListCast, DocListCastAsync, Opt } from "../../../new_fields/Doc";
-import { RouteStore } from "../../../server/RouteStore";
import { action, observable, autorun, runInAction, computed, reaction, IReactionDisposer } from "mobx";
import { FieldViewProps, FieldView } from "../../views/nodes/FieldView";
import Measure, { ContentRect } from "react-measure";
@@ -124,7 +123,7 @@ export default class DirectoryImportBox extends React.Component<FieldViewProps>
formData.append(Utils.GenerateGuid(), file);
});
- collector.push(...(await Networking.PostFormDataToServer(RouteStore.upload, formData)));
+ collector.push(...(await Networking.PostFormDataToServer("/upload", formData)));
runInAction(() => this.completed += batch.length);
});
diff --git a/src/client/util/Import & Export/ImageUtils.ts b/src/client/util/Import & Export/ImageUtils.ts
index 914f4870a..ca80f3bca 100644
--- a/src/client/util/Import & Export/ImageUtils.ts
+++ b/src/client/util/Import & Export/ImageUtils.ts
@@ -1,7 +1,6 @@
-import { Doc, DocListCast, DocListCastAsync, Opt } from "../../../new_fields/Doc";
+import { Doc } from "../../../new_fields/Doc";
import { ImageField } from "../../../new_fields/URLField";
import { Cast, StrCast } from "../../../new_fields/Types";
-import { RouteStore } from "../../../server/RouteStore";
import { Docs } from "../../documents/Documents";
import { Networking } from "../../Network";
import { Id } from "../../../new_fields/FieldSymbols";
@@ -15,7 +14,7 @@ export namespace ImageUtils {
return false;
}
const source = field.url.href;
- const response = await Networking.PostToServer(RouteStore.inspectImage, { source });
+ const response = await Networking.PostToServer("/inspectImage", { source });
const { error, data } = response.exifData;
document.exif = error || Docs.Get.DocumentHierarchyFromJson(data);
return data !== undefined;
@@ -23,7 +22,7 @@ export namespace ImageUtils {
export const ExportHierarchyToFileSystem = async (collection: Doc): Promise<void> => {
const a = document.createElement("a");
- a.href = Utils.prepend(`${RouteStore.imageHierarchyExport}/${collection[Id]}`);
+ a.href = Utils.prepend(`imageHierarchyExport/${collection[Id]}`);
a.download = `Dash Export [${StrCast(collection.title)}].zip`;
a.click();
};
diff --git a/src/client/util/SharingManager.tsx b/src/client/util/SharingManager.tsx
index 2082d6324..cc1d628b1 100644
--- a/src/client/util/SharingManager.tsx
+++ b/src/client/util/SharingManager.tsx
@@ -4,7 +4,6 @@ import MainViewModal from "../views/MainViewModal";
import { Doc, Opt, DocCastAsync } from "../../new_fields/Doc";
import { DocServer } from "../DocServer";
import { Cast, StrCast } from "../../new_fields/Types";
-import { RouteStore } from "../../server/RouteStore";
import * as RequestPromise from "request-promise";
import { Utils } from "../../Utils";
import "./SharingManager.scss";
@@ -104,7 +103,7 @@ export default class SharingManager extends React.Component<{}> {
}
populateUsers = async () => {
- let userList = await RequestPromise.get(Utils.prepend(RouteStore.getUsers));
+ let userList = await RequestPromise.get(Utils.prepend("/getUsers"));
const raw = JSON.parse(userList) as User[];
const evaluating = raw.map(async user => {
let isCandidate = user.email !== Doc.CurrentUserEmail;
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 39585113b..0c5a1003b 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -12,7 +12,6 @@ import { List } from '../../new_fields/List';
import { listSpec } from '../../new_fields/Schema';
import { Cast, FieldValue, StrCast } from '../../new_fields/Types';
import { CurrentUserUtils } from '../../server/authentication/models/current_user_utils';
-import { RouteStore } from '../../server/RouteStore';
import { emptyFunction, returnEmptyString, returnFalse, returnOne, returnTrue, Utils } from '../../Utils';
import GoogleAuthenticationManager from '../apis/GoogleAuthenticationManager';
import { DocServer } from '../DocServer';
@@ -74,7 +73,7 @@ export class MainView extends React.Component {
this._urlState = HistoryUtil.parseUrl(window.location) || {} as any;
// causes errors to be generated when modifying an observable outside of an action
configure({ enforceActions: "observed" });
- if (window.location.pathname !== RouteStore.home) {
+ if (window.location.pathname !== "/home") {
let pathname = window.location.pathname.substr(1).split("/");
if (pathname.length > 1) {
let type = pathname[0];
@@ -395,7 +394,7 @@ export class MainView extends React.Component {
zoomToScale={emptyFunction}
getScale={returnOne}>
</DocumentView>
- <button className="mainView-logout" key="logout" onClick={() => window.location.assign(Utils.prepend(RouteStore.logout))}>
+ <button className="mainView-logout" key="logout" onClick={() => window.location.assign(Utils.prepend("/logout"))}>
{CurrentUserUtils.GuestWorkspace ? "Exit" : "Log Out"}
</button>
</div></div>;
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index 6e8e4fa12..306f8e052 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -8,7 +8,6 @@ import { listSpec } from "../../../new_fields/Schema";
import { ScriptField } from "../../../new_fields/ScriptField";
import { Cast } from "../../../new_fields/Types";
import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils";
-import { RouteStore } from "../../../server/RouteStore";
import { Utils } from "../../../Utils";
import { DocServer } from "../../DocServer";
import { DocumentType } from "../../documents/DocumentTypes";
@@ -243,7 +242,6 @@ export function CollectionSubView<T>(schemaCtor: (doc: Doc) => T) {
let promises: Promise<void>[] = [];
// tslint:disable-next-line:prefer-for-of
for (let i = 0; i < e.dataTransfer.items.length; i++) {
- const upload = window.location.origin + RouteStore.upload;
let item = e.dataTransfer.items[i];
if (item.kind === "string" && item.type.indexOf("uri") !== -1) {
let str: string;
@@ -268,7 +266,7 @@ export function CollectionSubView<T>(schemaCtor: (doc: Doc) => T) {
}
let dropFileName = file ? file.name : "-empty-";
- let prom = fetch(upload, {
+ let prom = fetch(Utils.prepend("/upload"), {
method: 'POST',
body: formData
}).then(async (res: Response) => {
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 9f39eccea..07fd832be 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -12,7 +12,6 @@ import { createSchema, listSpec, makeInterface } from '../../../new_fields/Schem
import { ComputedField } from '../../../new_fields/ScriptField';
import { BoolCast, Cast, FieldValue, NumCast, StrCast } from '../../../new_fields/Types';
import { AudioField, ImageField } from '../../../new_fields/URLField';
-import { RouteStore } from '../../../server/RouteStore';
import { Utils, returnOne, emptyFunction } from '../../../Utils';
import { CognitiveServices, Confidence, Service, Tag } from '../../cognitive_services/CognitiveServices';
import { Docs } from '../../documents/Documents';
@@ -152,7 +151,7 @@ export class ImageBox extends DocAnnotatableComponent<FieldViewProps, ImageDocum
recorder.ondataavailable = async function (e: any) {
const formData = new FormData();
formData.append("file", e.data);
- const res = await fetch(Utils.prepend(RouteStore.upload), {
+ const res = await fetch(Utils.prepend("/upload"), {
method: 'POST',
body: formData
});
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index aa9b28118..4884fa2bf 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -6,7 +6,6 @@ import { InkTool } from "../../../new_fields/InkField";
import { makeInterface, createSchema, listSpec } from "../../../new_fields/Schema";
import { Cast, FieldValue, NumCast, BoolCast, StrCast } from "../../../new_fields/Types";
import { VideoField } from "../../../new_fields/URLField";
-import { RouteStore } from "../../../server/RouteStore";
import { Utils, emptyFunction, returnOne } from "../../../Utils";
import { Docs, DocUtils } from "../../documents/Documents";
import { ContextMenu } from "../ContextMenu";
@@ -183,7 +182,7 @@ export class VideoBox extends DocAnnotatableComponent<FieldViewProps, VideoDocum
public static async convertDataUri(imageUri: string, returnedFilename: string) {
try {
- let posting = Utils.prepend(RouteStore.dataUriToImage);
+ let posting = Utils.prepend("/uploadURI");
const returnedUri = await rp.post(posting, {
body: {
uri: imageUri,
diff --git a/src/client/views/search/SearchBox.tsx b/src/client/views/search/SearchBox.tsx
index b728ffaa9..6100c74df 100644
--- a/src/client/views/search/SearchBox.tsx
+++ b/src/client/views/search/SearchBox.tsx
@@ -8,7 +8,6 @@ import * as rp from 'request-promise';
import { Doc } from '../../../new_fields/Doc';
import { Id } from '../../../new_fields/FieldSymbols';
import { Cast, NumCast } from '../../../new_fields/Types';
-import { RouteStore } from '../../../server/RouteStore';
import { Utils } from '../../../Utils';
import { Docs } from '../../documents/Documents';
import { SetupDrag } from '../../util/DragManager';
@@ -90,7 +89,7 @@ export class SearchBox extends React.Component {
public static async convertDataUri(imageUri: string, returnedFilename: string) {
try {
- let posting = Utils.prepend(RouteStore.dataUriToImage);
+ let posting = Utils.prepend("uploadURI");
const returnedUri = await rp.post(posting, {
body: {
uri: imageUri,
diff --git a/src/mobile/ImageUpload.tsx b/src/mobile/ImageUpload.tsx
index 33a615cbf..9fdaac66e 100644
--- a/src/mobile/ImageUpload.tsx
+++ b/src/mobile/ImageUpload.tsx
@@ -1,7 +1,6 @@
import * as ReactDOM from 'react-dom';
import * as rp from 'request-promise';
import { Docs } from '../client/documents/Documents';
-import { RouteStore } from '../server/RouteStore';
import "./ImageUpload.scss";
import React = require('react');
import { DocServer } from '../client/DocServer';
@@ -58,7 +57,7 @@ class Uploader extends React.Component {
this.status = "getting user document";
- const res = await rp.get(Utils.prepend(RouteStore.getUserDocumentId));
+ const res = await rp.get(Utils.prepend("/getUserDocumentId"));
if (!res) {
throw new Error("No user id returned");
}
diff --git a/src/new_fields/RichTextUtils.ts b/src/new_fields/RichTextUtils.ts
index 63d718ce8..238b27439 100644
--- a/src/new_fields/RichTextUtils.ts
+++ b/src/new_fields/RichTextUtils.ts
@@ -8,7 +8,6 @@ import { Opt, Doc } from "./Doc";
import Color = require('color');
import { sinkListItem } from "prosemirror-schema-list";
import { Utils } from "../Utils";
-import { RouteStore } from "../server/RouteStore";
import { Docs } from "../client/documents/Documents";
import { schema } from "../client/util/RichTextSchema";
import { GooglePhotos } from "../client/apis/google_docs/GooglePhotosClientUtils";
@@ -129,7 +128,7 @@ export namespace RichTextUtils {
return { baseUrl, filename };
});
- const uploads = await Networking.PostToServer(RouteStore.googlePhotosMediaDownload, { mediaItems });
+ const uploads = await Networking.PostToServer("/googlePhotosMediaDownload", { mediaItems });
if (uploads.length !== mediaItems.length) {
throw new AssertionError({ expected: mediaItems.length, actual: uploads.length, message: "Error with internally uploading inlineObjects!" });
diff --git a/src/server/ApiManagers/DeleteManager.ts b/src/server/ApiManagers/DeleteManager.ts
index bbf1d0425..f58a28ce5 100644
--- a/src/server/ApiManagers/DeleteManager.ts
+++ b/src/server/ApiManagers/DeleteManager.ts
@@ -1,6 +1,5 @@
import ApiManager, { Registration } from "./ApiManager";
import { Method, _permission_denied } from "../RouteManager";
-import { RouteStore } from "../RouteStore";
import { WebSocket } from "../Websocket/Websocket";
import { Database } from "../database";
@@ -10,25 +9,25 @@ export default class DeleteManager extends ApiManager {
register({
method: Method.GET,
- subscription: RouteStore.delete,
+ subscription: "/delete",
onValidation: async ({ res, isRelease }) => {
if (isRelease) {
return _permission_denied(res, deletionPermissionError);
}
await WebSocket.deleteFields();
- res.redirect(RouteStore.home);
+ res.redirect("/home");
}
});
register({
method: Method.GET,
- subscription: RouteStore.deleteAll,
+ subscription: "/deleteAll",
onValidation: async ({ res, isRelease }) => {
if (isRelease) {
return _permission_denied(res, deletionPermissionError);
}
await WebSocket.deleteAll();
- res.redirect(RouteStore.home);
+ res.redirect("/home");
}
});
@@ -41,7 +40,7 @@ export default class DeleteManager extends ApiManager {
return _permission_denied(res, deletionPermissionError);
}
await Database.Auxiliary.DeleteAll();
- res.redirect(RouteStore.delete);
+ res.redirect("/delete");
}
});
@@ -53,7 +52,7 @@ export default class DeleteManager extends ApiManager {
return _permission_denied(res, deletionPermissionError);
}
await Database.Auxiliary.GoogleAuthenticationToken.DeleteAll();
- res.redirect(RouteStore.delete);
+ res.redirect("/delete");
}
});
diff --git a/src/server/ApiManagers/ExportManager.ts b/src/server/ApiManagers/ExportManager.ts
index d42db1056..fc6ba0d22 100644
--- a/src/server/ApiManagers/ExportManager.ts
+++ b/src/server/ApiManagers/ExportManager.ts
@@ -1,7 +1,6 @@
import ApiManager, { Registration } from "./ApiManager";
import { Method } from "../RouteManager";
import RouteSubscriber from "../RouteSubscriber";
-import { RouteStore } from "../RouteStore";
import * as Archiver from 'archiver';
import * as express from 'express';
import { Database } from "../database";
@@ -32,7 +31,7 @@ export default class DownloadManager extends ApiManager {
*/
register({
method: Method.GET,
- subscription: new RouteSubscriber(RouteStore.imageHierarchyExport).add('docId'),
+ subscription: new RouteSubscriber("imageHierarchyExport").add('docId'),
onValidation: async ({ req, res }) => {
const id = req.params.docId;
const hierarchy: Hierarchy = {};
@@ -43,7 +42,7 @@ export default class DownloadManager extends ApiManager {
register({
method: Method.GET,
- subscription: new RouteSubscriber("/downloadId").add("docId"),
+ subscription: new RouteSubscriber("downloadId").add("docId"),
onValidation: async ({ req, res }) => {
return BuildAndDispatchZip(res, async zip => {
const { id, docs, files } = await getDocs(req.params.docId);
diff --git a/src/server/ApiManagers/PDFManager.ts b/src/server/ApiManagers/PDFManager.ts
index f328557b4..632b4965a 100644
--- a/src/server/ApiManagers/PDFManager.ts
+++ b/src/server/ApiManagers/PDFManager.ts
@@ -15,7 +15,7 @@ export default class PDFManager extends ApiManager {
register({
method: Method.GET,
- subscription: new RouteSubscriber("/thumbnail").add("filename"),
+ subscription: new RouteSubscriber("thumbnail").add("filename"),
onValidation: ({ req, res }) => {
let filename = req.params.filename;
let noExt = filename.substring(0, filename.length - ".png".length);
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 38635eda5..01abdab54 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -6,7 +6,6 @@ var AdmZip = require('adm-zip');
import * as path from 'path';
import { createReadStream, createWriteStream, unlink, readFileSync } from "fs";
import { publicDirectory, filesDirectory, Partitions } from "..";
-import { RouteStore } from "../RouteStore";
import { Database } from "../database";
import { DashUploadUtils } from "../DashUploadUtils";
import { Opt } from "../../new_fields/Doc";
@@ -85,12 +84,8 @@ export default class UploadManager extends ApiManager {
let dirname = path.dirname(entry.entryName) + "/";
let extname = path.extname(entry.entryName);
let basename = path.basename(entry.entryName).split(".")[0];
- // zip.extractEntryTo(dirname + basename + "_o" + extname, __dirname + RouteStore.public, true, false);
- // zip.extractEntryTo(dirname + basename + "_s" + extname, __dirname + RouteStore.public, true, false);
- // zip.extractEntryTo(dirname + basename + "_m" + extname, __dirname + RouteStore.public, true, false);
- // zip.extractEntryTo(dirname + basename + "_l" + extname, __dirname + RouteStore.public, true, false);
try {
- zip.extractEntryTo(entry.entryName, __dirname + RouteStore.public, true, false);
+ zip.extractEntryTo(entry.entryName, publicDirectory, true, false);
dirname = "/" + dirname;
createReadStream(publicDirectory + dirname + basename + extname).pipe(createWriteStream(publicDirectory + dirname + basename + "_o" + extname));
@@ -131,7 +126,7 @@ export default class UploadManager extends ApiManager {
register({
method: Method.POST,
- subscription: RouteStore.upload,
+ subscription: "/upload",
onValidation: async ({ req, res }) => {
let form = new formidable.IncomingForm();
form.uploadDir = filesDirectory;
@@ -147,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.PdfText + "/" + filename.substring(0, filename.length - ".pdf".length) + ".txt";
+ const path = filesDirectory + Partitions.pdf_text + "/" + filename.substring(0, filename.length - ".pdf".length) + ".txt";
createWriteStream(path).write(result.text, error => {
if (!error) {
resolve();
@@ -171,7 +166,7 @@ export default class UploadManager extends ApiManager {
register({
method: Method.POST,
- subscription: RouteStore.inspectImage,
+ subscription: "/inspectImage",
onValidation: async ({ req, res }) => {
const { source } = req.body;
if (typeof source === "string") {
@@ -184,7 +179,7 @@ export default class UploadManager extends ApiManager {
register({
method: Method.POST,
- subscription: RouteStore.dataUriToImage,
+ subscription: "/uploadURI",
onValidation: ({ req, res }) => {
const uri = req.body.uri;
const filename = req.body.name;
diff --git a/src/server/ApiManagers/UserManager.ts b/src/server/ApiManagers/UserManager.ts
index fe1ce7f2b..51a434fcf 100644
--- a/src/server/ApiManagers/UserManager.ts
+++ b/src/server/ApiManagers/UserManager.ts
@@ -1,7 +1,6 @@
import ApiManager, { Registration } from "./ApiManager";
import { Method } from "../RouteManager";
import { WebSocket } from "../Websocket/Websocket";
-import { RouteStore } from "../RouteStore";
import { Database } from "../database";
export default class UserManager extends ApiManager {
@@ -10,7 +9,7 @@ export default class UserManager extends ApiManager {
register({
method: Method.GET,
- subscription: RouteStore.getUsers,
+ subscription: "/getUsers",
onValidation: async ({ res }) => {
const cursor = await Database.Instance.query({}, { email: 1, userDocumentId: 1 }, "users");
const results = await cursor.toArray();
@@ -20,13 +19,13 @@ export default class UserManager extends ApiManager {
register({
method: Method.GET,
- subscription: RouteStore.getUserDocumentId,
+ subscription: "/getUserDocumentId",
onValidation: ({ res, user }) => res.send(user.userDocumentId)
});
register({
method: Method.GET,
- subscription: RouteStore.getCurrUser,
+ subscription: "/getCurrentUser",
onValidation: ({ res, user }) => res.send(JSON.stringify(user)),
onUnauthenticated: ({ res }) => res.send(JSON.stringify({ id: "__guest__", email: "" }))
});
diff --git a/src/server/ApiManagers/UtilManager.ts b/src/server/ApiManagers/UtilManager.ts
index 61cda2e9b..c1234be6c 100644
--- a/src/server/ApiManagers/UtilManager.ts
+++ b/src/server/ApiManagers/UtilManager.ts
@@ -2,6 +2,7 @@ import ApiManager, { Registration } from "./ApiManager";
import { Method } from "../RouteManager";
import { exec } from 'child_process';
import { command_line } from "../ActionUtilities";
+import RouteSubscriber from "../RouteSubscriber";
export default class UtilManager extends ApiManager {
@@ -9,6 +10,12 @@ export default class UtilManager extends ApiManager {
register({
method: Method.GET,
+ subscription: new RouteSubscriber("environment").add("key"),
+ onValidation: ({ req, res }) => res.send(process.env[req.params.key])
+ });
+
+ register({
+ method: Method.GET,
subscription: "/pull",
onValidation: async ({ res }) => {
return new Promise<void>(resolve => {
diff --git a/src/server/Initialization.ts b/src/server/Initialization.ts
index fbb5ae7a6..306058d81 100644
--- a/src/server/Initialization.ts
+++ b/src/server/Initialization.ts
@@ -9,7 +9,6 @@ import flash = require('connect-flash');
import { Database } from './database';
import { getForgot, getLogin, getLogout, getReset, getSignup, postForgot, postLogin, postReset, postSignup } from './authentication/controllers/user_controller';
const MongoStore = require('connect-mongo')(session);
-import { RouteStore } from './RouteStore';
import RouteManager from './RouteManager';
import * as webpack from 'webpack';
const config = require('../../webpack.config');
@@ -18,6 +17,8 @@ import * as wdm from 'webpack-dev-middleware';
import * as whm from 'webpack-hot-middleware';
import * as fs from 'fs';
import * as request from 'request';
+import RouteSubscriber from './RouteSubscriber';
+import { publicDirectory } from '.';
export type RouteSetter = (server: RouteManager) => void;
export interface InitializationOptions {
@@ -29,8 +30,8 @@ export default async function InitializeServer(options: InitializationOptions) {
const { listenAtPort, routeSetter } = options;
const server = buildWithMiddleware(express());
- server.use(express.static(__dirname + RouteStore.public));
- server.use(RouteStore.images, express.static(__dirname + RouteStore.public));
+ server.use(express.static(publicDirectory));
+ server.use("/images", express.static(publicDirectory));
server.use(wdm(compiler, { publicPath: config.output.publicPath }));
server.use(whm(compiler));
@@ -87,24 +88,25 @@ function determineEnvironment() {
}
function registerAuthenticationRoutes(server: express.Express) {
- server.get(RouteStore.signup, getSignup);
- server.post(RouteStore.signup, postSignup);
+ server.get("/signup", getSignup);
+ server.post("/signup", postSignup);
- server.get(RouteStore.login, getLogin);
- server.post(RouteStore.login, postLogin);
+ server.get("/login", getLogin);
+ server.post("/login", postLogin);
- server.get(RouteStore.logout, getLogout);
+ server.get("/logout", getLogout);
- server.get(RouteStore.forgot, getForgot);
- server.post(RouteStore.forgot, postForgot);
+ server.get("/forgotPassword", getForgot);
+ server.post("/forgotPassword", postForgot);
- server.get(RouteStore.reset, getReset);
- server.post(RouteStore.reset, postReset);
+ const reset = new RouteSubscriber("resetPassword").add("token").build;
+ server.get(reset, getReset);
+ server.post(reset, postReset);
}
function registerCorsProxy(server: express.Express) {
const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
- server.use(RouteStore.corsProxy, (req, res) => {
+ server.use("/corsProxy", (req, res) => {
req.pipe(request(decodeURIComponent(req.url.substring(1)))).on("response", res => {
const headers = Object.keys(res.headers);
headers.forEach(headerName => {
diff --git a/src/server/RouteManager.ts b/src/server/RouteManager.ts
index c1d38327f..3aae5734a 100644
--- a/src/server/RouteManager.ts
+++ b/src/server/RouteManager.ts
@@ -1,5 +1,4 @@
import RouteSubscriber from "./RouteSubscriber";
-import { RouteStore } from "./RouteStore";
import { DashUserModel } from "./authentication/models/user_model";
import * as express from 'express';
@@ -67,10 +66,10 @@ export default class RouteManager {
if (onUnauthenticated) {
await tryExecute(onUnauthenticated, core);
if (!res.headersSent) {
- res.redirect(RouteStore.login);
+ res.redirect("/login");
}
} else {
- res.redirect(RouteStore.login);
+ res.redirect("/login");
}
}
setTimeout(() => {
diff --git a/src/server/RouteStore.ts b/src/server/RouteStore.ts
deleted file mode 100644
index a310d0c95..000000000
--- a/src/server/RouteStore.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-// PREPEND ALL ROUTES WITH FORWARD SLASHES!
-
-export enum RouteStore {
- // GENERAL
- root = "/",
- home = "/home",
- corsProxy = "/corsProxy",
- delete = "/delete",
- deleteAll = "/deleteAll",
- pull = "/pull",
-
- // UPLOAD AND STATIC FILE SERVING
- public = "/public",
- upload = "/upload",
- dataUriToImage = "/uploadURI",
- images = "/images",
- inspectImage = "/inspectImage",
- imageHierarchyExport = "/imageHierarchyExport",
-
- // USER AND WORKSPACES
- getCurrUser = "/getCurrentUser",
- getUsers = "/getUsers",
- getUserDocumentId = "/getUserDocumentId",
- updateCursor = "/updateCursor",
-
- openDocumentWithId = "/doc/:docId",
-
- // AUTHENTICATION
- signup = "/signup",
- login = "/login",
- logout = "/logout",
- forgot = "/forgotpassword",
- reset = "/reset/:token",
-
- // APIS
- cognitiveServices = "/cognitiveservices",
- googleDocs = "/googleDocs",
- readGoogleAccessToken = "/readGoogleAccessToken",
- writeGoogleAccessToken = "/writeGoogleAccessToken",
- googlePhotosMediaUpload = "/googlePhotosMediaUpload",
- googlePhotosMediaDownload = "/googlePhotosMediaDownload",
- googleDocsGet = "/googleDocsGet",
- checkGoogle = "/checkGoogleAuthentication"
-
-} \ No newline at end of file
diff --git a/src/server/RouteSubscriber.ts b/src/server/RouteSubscriber.ts
index e49be8af5..a1cf7c1c4 100644
--- a/src/server/RouteSubscriber.ts
+++ b/src/server/RouteSubscriber.ts
@@ -3,7 +3,7 @@ export default class RouteSubscriber {
private requestParameters: string[] = [];
constructor(root: string) {
- this._root = root;
+ this._root = `/${root}`;
}
add(...parameters: string[]) {
diff --git a/src/server/authentication/config/passport.ts b/src/server/authentication/config/passport.ts
index 8915a4abf..0b15c3a36 100644
--- a/src/server/authentication/config/passport.ts
+++ b/src/server/authentication/config/passport.ts
@@ -3,7 +3,6 @@ import * as passportLocal from 'passport-local';
import _ from "lodash";
import { default as User } from '../models/user_model';
import { Request, Response, NextFunction } from "express";
-import { RouteStore } from '../../RouteStore';
const LocalStrategy = passportLocal.Strategy;
@@ -35,13 +34,13 @@ export let isAuthenticated = (req: Request, res: Response, next: NextFunction) =
if (req.isAuthenticated()) {
return next();
}
- return res.redirect(RouteStore.login);
+ return res.redirect("/login");
};
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 f5c6e1610..b2b9d33f6 100644
--- a/src/server/authentication/controllers/user_controller.ts
+++ b/src/server/authentication/controllers/user_controller.ts
@@ -10,10 +10,7 @@ import * as pug from 'pug';
import * as async from 'async';
import * as nodemailer from 'nodemailer';
import c = require("crypto");
-import { RouteStore } from "../../RouteStore";
import { Utils } from "../../../Utils";
-import { Schema } from "mongoose";
-import { Opt } from "../../../new_fields/Doc";
import { MailOptions } from "nodemailer/lib/stream-transport";
/**
@@ -23,8 +20,7 @@ import { MailOptions } from "nodemailer/lib/stream-transport";
*/
export let getSignup = (req: Request, res: Response) => {
if (req.user) {
- let user = req.user;
- return res.redirect(RouteStore.home);
+ return res.redirect("/home");
}
res.render("signup.pug", {
title: "Sign Up",
@@ -45,7 +41,7 @@ export let postSignup = (req: Request, res: Response, next: NextFunction) => {
const errors = req.validationErrors();
if (errors) {
- return res.redirect(RouteStore.signup);
+ return res.redirect("/signup");
}
const email = req.body.email as String;
@@ -62,7 +58,7 @@ export let postSignup = (req: Request, res: Response, next: NextFunction) => {
User.findOne({ email }, (err, existingUser) => {
if (err) { return next(err); }
if (existingUser) {
- return res.redirect(RouteStore.login);
+ return res.redirect("/login");
}
user.save((err: any) => {
if (err) { return next(err); }
@@ -81,7 +77,7 @@ let tryRedirectToTarget = (req: Request, res: Response) => {
req.session.target = undefined;
res.redirect(target);
} else {
- res.redirect(RouteStore.home);
+ res.redirect("/home");
}
};
@@ -93,7 +89,7 @@ let tryRedirectToTarget = (req: Request, res: Response) => {
export let getLogin = (req: Request, res: Response) => {
if (req.user) {
req.session!.target = undefined;
- return res.redirect(RouteStore.home);
+ return res.redirect("/home");
}
res.render("login.pug", {
title: "Log In",
@@ -115,13 +111,13 @@ export let postLogin = (req: Request, res: Response, next: NextFunction) => {
if (errors) {
req.flash("errors", "Unable to login at this time. Please try again.");
- return res.redirect(RouteStore.signup);
+ return res.redirect("/signup");
}
passport.authenticate("local", (err: Error, user: DashUserModel, info: IVerifyOptions) => {
if (err) { next(err); return; }
if (!user) {
- return res.redirect(RouteStore.signup);
+ return res.redirect("/signup");
}
req.logIn(user, (err) => {
if (err) { next(err); return; }
@@ -141,7 +137,7 @@ export let getLogout = (req: Request, res: Response) => {
if (sess) {
sess.destroy((err) => { if (err) { console.log(err); } });
}
- res.redirect(RouteStore.login);
+ res.redirect("/login");
};
export let getForgot = function (req: Request, res: Response) {
@@ -168,7 +164,7 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
User.findOne({ email }, function (err, user: DashUserModel) {
if (!user) {
// NO ACCOUNT WITH SUBMITTED EMAIL
- res.redirect(RouteStore.forgot);
+ res.redirect("/forgotPassword");
return;
}
user.passwordResetToken = token;
@@ -192,7 +188,7 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
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' +
- 'http://' + req.headers.host + '/reset/' + token + '\n\n' +
+ 'http://' + req.headers.host + '/resetPassword/' + token + '\n\n' +
'If you did not request this, please ignore this email and your password will remain unchanged.\n'
} as MailOptions;
smtpTransport.sendMail(mailOptions, function (err: Error | null) {
@@ -202,14 +198,14 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
}
], function (err) {
if (err) return next(err);
- res.redirect(RouteStore.forgot);
+ res.redirect("/forgotPassword");
});
};
export let getReset = function (req: Request, res: Response) {
User.findOne({ passwordResetToken: req.params.token, passwordResetExpires: { $gt: Date.now() } }, function (err, user: DashUserModel) {
if (!user || err) {
- return res.redirect(RouteStore.forgot);
+ return res.redirect("/forgotPassword");
}
res.render("reset.pug", {
title: "Reset Password",
@@ -239,7 +235,7 @@ export let postReset = function (req: Request, res: Response) {
user.save(function (err) {
if (err) {
- res.redirect(RouteStore.login);
+ res.redirect("/login");
return;
}
req.logIn(user, function (err) {
@@ -271,6 +267,6 @@ export let postReset = function (req: Request, res: Response) {
});
}
], function (err) {
- res.redirect(RouteStore.login);
+ res.redirect("/login");
});
}; \ No newline at end of file
diff --git a/src/server/authentication/models/current_user_utils.ts b/src/server/authentication/models/current_user_utils.ts
index 73cac879e..5a8815983 100644
--- a/src/server/authentication/models/current_user_utils.ts
+++ b/src/server/authentication/models/current_user_utils.ts
@@ -11,7 +11,6 @@ import { List } from "../../../new_fields/List";
import { listSpec } from "../../../new_fields/Schema";
import { Cast, StrCast, PromiseValue } from "../../../new_fields/Types";
import { Utils } from "../../../Utils";
-import { RouteStore } from "../../RouteStore";
import { ScriptField } from "../../../new_fields/ScriptField";
import { ButtonBox } from "../../../client/views/nodes/ButtonBox";
import { UndoManager } from "../../../client/util/UndoManager";
@@ -198,8 +197,8 @@ export class CurrentUserUtils {
return doc;
}
- public static loadCurrentUser() {
- return rp.get(Utils.prepend(RouteStore.getCurrUser)).then(response => {
+ public static async loadCurrentUser() {
+ return rp.get(Utils.prepend("/getCurrentUser")).then(response => {
if (response) {
const result: { id: string, email: string } = JSON.parse(response);
return result;
@@ -212,7 +211,7 @@ export class CurrentUserUtils {
public static async loadUserDocument({ id, email }: { id: string, email: string }) {
this.curr_id = id;
Doc.CurrentUserEmail = email;
- await rp.get(Utils.prepend(RouteStore.getUserDocumentId)).then(id => {
+ await rp.get(Utils.prepend("/getUserDocumentId")).then(id => {
if (id && id !== "guest") {
return DocServer.GetRefField(id).then(async field => {
if (field instanceof Doc) {
diff --git a/src/server/index.ts b/src/server/index.ts
index aec301a74..8fc402cc9 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -3,7 +3,6 @@ import { GoogleApiServerUtils } from "./apis/google/GoogleApiServerUtils";
import * as mobileDetect from 'mobile-detect';
import * as path from 'path';
import { Database } from './database';
-import { RouteStore } from './RouteStore';
const serverPort = 4321;
import { GooglePhotosUploadUtils } from './apis/google/GooglePhotosUploadUtils';
import { Opt } from '../new_fields/Doc';
@@ -23,7 +22,7 @@ import DeleteManager from "./ApiManagers/DeleteManager";
import PDFManager from "./ApiManagers/PDFManager";
import UploadManager from "./ApiManagers/UploadManager";
-export const publicDirectory = __dirname + RouteStore.public;
+export const publicDirectory = __dirname + "/public";
export const filesDirectory = publicDirectory + "/files/";
export enum Partitions {
pdf_text,
@@ -73,13 +72,12 @@ function routeSetter(router: RouteManager) {
WebSocket.initialize(serverPort, router.isRelease);
/**
- * Anyone attempting to navigate to localhost at this port will
- * first have to log in.
+ * Accessing root index redirects to home
*/
router.addSupervisedRoute({
method: Method.GET,
- subscription: RouteStore.root,
- onValidation: ({ res }) => res.redirect(RouteStore.home)
+ subscription: "/",
+ onValidation: ({ res }) => res.redirect("/home")
});
const serve: OnUnauthenticated = ({ req, res }) => {
@@ -90,7 +88,7 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.GET,
- subscription: [RouteStore.home, new RouteSubscriber("/doc").add("docId")],
+ subscription: ["/home", new RouteSubscriber("doc").add("docId")],
onValidation: serve,
onUnauthenticated: ({ req, ...remaining }) => {
const { originalUrl: target } = req;
@@ -110,9 +108,9 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.GET,
- subscription: new RouteSubscriber(RouteStore.cognitiveServices).add('requestedservice'),
+ subscription: new RouteSubscriber("cognitiveServices").add('requestedService'),
onValidation: ({ req, res }) => {
- let service = req.params.requestedservice;
+ let service = req.params.requestedService;
res.send(ServicesApiKeyMap.get(service));
}
});
@@ -125,7 +123,7 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.POST,
- subscription: new RouteSubscriber(RouteStore.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;
@@ -143,7 +141,7 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.GET,
- subscription: RouteStore.readGoogleAccessToken,
+ subscription: "/readGoogleAccessToken",
onValidation: async ({ user, res }) => {
const userId = user.id;
const token = await GoogleApiServerUtils.retrieveAccessToken(userId);
@@ -156,7 +154,7 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.POST,
- subscription: RouteStore.writeGoogleAccessToken,
+ subscription: "/writeGoogleAccessToken",
onValidation: async ({ user, req, res }) => {
res.send(await GoogleApiServerUtils.processNewUser(user.id, req.body.authenticationCode));
}
@@ -173,7 +171,7 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.POST,
- subscription: RouteStore.googlePhotosMediaUpload,
+ subscription: "/googlePhotosMediaUpload",
onValidation: async ({ user, req, res }) => {
const { media } = req.body;
@@ -228,7 +226,7 @@ function routeSetter(router: RouteManager) {
const UploadError = (count: number) => `Unable to upload ${count} images to Dash's server`;
router.addSupervisedRoute({
method: Method.POST,
- subscription: RouteStore.googlePhotosMediaDownload,
+ subscription: "/googlePhotosMediaDownload",
onValidation: async ({ req, res }) => {
const contents: { mediaItems: MediaItem[] } = req.body;
let failed = 0;