aboutsummaryrefslogtreecommitdiff
path: root/src/server/index.ts
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-10-26 18:28:38 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-10-26 18:28:38 -0400
commite6bd33867cc7f7185575666255369f55cacb9856 (patch)
treed4efbe0668d759400f44f7083562cf362706935c /src/server/index.ts
parentfcf67616b9fd6f98d631f6c8eab31a19a2a2e86d (diff)
restructured route registration and added preliminary comments for exporter
Diffstat (limited to 'src/server/index.ts')
-rw-r--r--src/server/index.ts96
1 files changed, 15 insertions, 81 deletions
diff --git a/src/server/index.ts b/src/server/index.ts
index 93f4238bc..384800f23 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -33,12 +33,11 @@ import UtilManager from './ApiManagers/UtilManager';
import SearchManager from './ApiManagers/SearchManager';
import UserManager from './ApiManagers/UserManager';
import { WebSocket } from './Websocket/Websocket';
+import ExportManager from './ApiManagers/ExportManager';
+import ApiManager from './ApiManagers/ApiManager';
export let youtubeApiKey: string;
-export type Hierarchy = { [id: string]: string | Hierarchy };
-export type ZipMutator = (file: Archiver.Archiver) => void | Promise<void>;
-
export interface NewMediaItem {
description: string;
simpleMediaItem: {
@@ -72,9 +71,13 @@ async function PreliminaryFunctions() {
}
function routeSetter(router: RouteManager) {
- new UtilManager().register(router);
- new SearchManager().register(router);
- new UserManager().register(router);
+ const managers: ApiManager[] = [
+ new UtilManager(),
+ new SearchManager(),
+ new UserManager(),
+ new ExportManager()
+ ];
+ managers.forEach(manager => manager.register(router));
WebSocket.initialize(serverPort, router.isRelease);
@@ -154,77 +157,6 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.GET,
- subscription: new RouteSubscriber(RouteStore.imageHierarchyExport).add('docId'),
- onValidation: async ({ req, res }) => {
- const id = req.params.docId;
- const hierarchy: Hierarchy = {};
- await targetedVisitorRecursive(id, hierarchy);
- BuildAndDispatchZip(res, async zip => {
- await hierarchyTraverserRecursive(zip, hierarchy);
- });
- }
- });
-
- const BuildAndDispatchZip = async (res: Response, mutator: ZipMutator): Promise<void> => {
- const zip = Archiver('zip');
- zip.pipe(res);
- await mutator(zip);
- return zip.finalize();
- };
-
- const targetedVisitorRecursive = async (seedId: string, hierarchy: Hierarchy): Promise<void> => {
- const local: Hierarchy = {};
- const { title, data } = await getData(seedId);
- const label = `${title} (${seedId})`;
- if (Array.isArray(data)) {
- hierarchy[label] = local;
- await Promise.all(data.map(proxy => targetedVisitorRecursive(proxy.fieldId, local)));
- } else {
- hierarchy[label + path.extname(data)] = data;
- }
- };
-
- const getData = async (seedId: string): Promise<{ data: string | any[], title: string }> => {
- return new Promise<{ data: string | any[], title: string }>((resolve, reject) => {
- Database.Instance.getDocument(seedId, async (result: any) => {
- const { data, proto, title } = result.fields;
- if (data) {
- if (data.url) {
- resolve({ data: data.url, title });
- } else if (data.fields) {
- resolve({ data: data.fields, title });
- } else {
- reject();
- }
- }
- if (proto) {
- getData(proto.fieldId).then(resolve, reject);
- }
- });
- });
- };
-
- const hierarchyTraverserRecursive = async (file: Archiver.Archiver, hierarchy: Hierarchy, prefix = "Dash Export"): Promise<void> => {
- for (const key of Object.keys(hierarchy)) {
- const result = hierarchy[key];
- if (typeof result === "string") {
- let path: string;
- let matches: RegExpExecArray | null;
- if ((matches = /\:1050\/files\/(upload\_[\da-z]{32}.*)/g.exec(result)) !== null) {
- path = `${__dirname}/public/files/${matches[1]}`;
- } else {
- const information = await DashUploadUtils.UploadImage(result);
- path = information.mediaPaths[0];
- }
- file.file(path, { name: key, prefix });
- } else {
- await hierarchyTraverserRecursive(file, result, `${prefix}/${key}`);
- }
- }
- };
-
- router.addSupervisedRoute({
- method: Method.GET,
subscription: new RouteSubscriber("/downloadId").add("docId"),
onValidation: async ({ req, res }) => {
res.set('Content-disposition', `attachment;`);
@@ -600,22 +532,24 @@ function routeSetter(router: RouteManager) {
router.addSupervisedRoute({
method: Method.GET,
subscription: RouteStore.delete,
- onValidation: ({ res, isRelease }) => {
+ onValidation: async ({ res, isRelease }) => {
if (isRelease) {
return _permission_denied(res, deletionPermissionError);
}
- WebSocket.deleteFields().then(() => res.redirect(RouteStore.home));
+ await WebSocket.deleteFields();
+ res.redirect(RouteStore.home);
}
});
router.addSupervisedRoute({
method: Method.GET,
subscription: RouteStore.deleteAll,
- onValidation: ({ res, isRelease }) => {
+ onValidation: async ({ res, isRelease }) => {
if (isRelease) {
return _permission_denied(res, deletionPermissionError);
}
- WebSocket.deleteAll().then(() => res.redirect(RouteStore.home));
+ await WebSocket.deleteAll();
+ res.redirect(RouteStore.home);
}
});