Skip to content

Commit

Permalink
inject http result in outgoing event of wall
Browse files Browse the repository at this point in the history
  • Loading branch information
ujjwalguptaofficial committed May 17, 2020
1 parent 382edc1 commit ba3d62b
Show file tree
Hide file tree
Showing 9 changed files with 4,206 additions and 2,631 deletions.
6,789 changes: 4,179 additions & 2,610 deletions dist/fort.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/fort.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/ts/abstracts/wall.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { HttpRequest, HttpResponse, HttpResult } from "../types";
import { HttpRequest, HttpResponse, HttpResult, HttpFormatResult } from "../types";
import { CookieManager, Logger } from "../models";
import { Controller } from "./controller";
import { SessionProvider } from "./session_provider";
Expand All @@ -16,7 +16,7 @@ export declare abstract class Wall implements Controller {
};
readonly logger: Logger;
abstract onIncoming(...args: any[]): Promise<HttpResult | void>;
onOutgoing(...args: any[]): Promise<any>;
onOutgoing(finalResult: HttpResult | HttpFormatResult, ...args: any[]): Promise<any>;
constructor(...args: any[]);
initialize(data?: WallTestData): Controller;
}
1 change: 0 additions & 1 deletion dist/ts/handlers/controller_result_handler.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { HttpResult, HttpFormatResult } from "../types";
import { FileHandler } from "./file_handler";
export declare class ControllerResultHandler extends FileHandler {
private controllerResult_;
private endResponse_;
private handleRedirectResult_;
private handleFormatResult_;
Expand Down
2 changes: 2 additions & 0 deletions dist/ts/handlers/request_handler_helper.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ import { MIME_TYPE, HTTP_METHOD } from "../enums";
import * as http from "http";
import { CookieManager } from "../models";
import { Wall } from "../abstracts";
import { HttpResult, HttpFormatResult } from "../types";
export declare class RequestHandlerHelper {
protected cookieManager: CookieManager;
protected response: http.ServerResponse;
protected request: http.IncomingMessage;
protected wallInstances: Wall[];
protected controllerResult_: HttpResult | HttpFormatResult;
protected runWallOutgoing(): Promise<any[]>;
protected getContentTypeFromNegotiation(type: MIME_TYPE): MIME_TYPE;
protected getContentTypeFromNegotiationHavingMultipleTypes(types: MIME_TYPE[]): MIME_TYPE;
Expand Down
5 changes: 3 additions & 2 deletions src/abstracts/wall.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { HttpRequest, HttpResponse, HttpResult } from "../types";
import { HttpRequest, HttpResponse, HttpResult, HttpFormatResult } from "../types";
import { CookieManager, Logger } from "../models";
import { Controller } from "./controller";
import { SessionProvider } from "./session_provider";
Expand All @@ -19,7 +19,8 @@ export abstract class Wall implements Controller {
}

abstract onIncoming(...args): Promise<HttpResult | void>;
async onOutgoing(...args) {

async onOutgoing(finalResult: HttpResult | HttpFormatResult, ...args) {
return null;
}

Expand Down
26 changes: 13 additions & 13 deletions src/handlers/controller_result_handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import * as path from 'path';
import { textResult, getResultBasedOnMiMe } from "../helpers";

export class ControllerResultHandler extends FileHandler {
private controllerResult_: HttpResult;


private endResponse_(negotiateMimeType: MIME_TYPE) {
let data;
try {
data = getResultBasedOnMiMe(negotiateMimeType,
this.controllerResult_.responseData
(this.controllerResult_ as HttpResult).responseData
, (type: MIME_TYPE) => {
negotiateMimeType = type;
}
Expand All @@ -30,17 +30,17 @@ export class ControllerResultHandler extends FileHandler {
}

private handleRedirectResult_() {
this.response.setHeader('Location', this.controllerResult_.responseData);
// this.response.setHeader('Location', this.controllerResult_.responseData);
this.response.writeHead(this.controllerResult_.statusCode || HTTP_STATUS_CODE.Ok,
{ 'Location': this.controllerResult_.responseData });
{ 'Location': (this.controllerResult_ as HttpResult).responseData });
this.response.end();
}

private handleFormatResult_() {
const negotiateMimeType = this.getContentTypeFromNegotiationHavingMultipleTypes(Object.keys((this.controllerResult_ as HttpFormatResult).responseFormat) as MIME_TYPE[]);
const key = Object.keys((this.controllerResult_ as HttpFormatResult).responseFormat).find(qry => qry === negotiateMimeType);
if (key != null) {
this.controllerResult_.responseData = (this.controllerResult_ as HttpFormatResult).responseFormat[key]();
(this.controllerResult_ as HttpResult).responseData = (this.controllerResult_ as HttpFormatResult).responseFormat[key]();
this.endResponse_(negotiateMimeType);
}
else {
Expand All @@ -49,7 +49,7 @@ export class ControllerResultHandler extends FileHandler {
}

private handleFileResult_() {
const result = this.controllerResult_;
const result = this.controllerResult_ as HttpResult;
const parsedPath = path.parse(result.file.filePath);
if (result.file.shouldDownload === true) {
const fileName = result.file.alias == null ? parsedPath.name : result.file.alias;
Expand All @@ -62,13 +62,12 @@ export class ControllerResultHandler extends FileHandler {
}

onTerminationFromWall(result: HttpResult | HttpFormatResult) {
this.handleFinalResult_(result);
this.controllerResult_ = result;
this.handleFinalResult_();
}

private handleFinalResult_(result: HttpResult | HttpFormatResult) {
result = result || textResult("");
this.controllerResult_ = result as HttpResult;

private handleFinalResult_() {
const result = this.controllerResult_;
((this.cookieManager as any).responseCookie_ as string[]).forEach(value => {
this.response.setHeader(__SetCookie, value);
});
Expand Down Expand Up @@ -98,14 +97,15 @@ export class ControllerResultHandler extends FileHandler {
}
}


async onResultFromController(result: HttpResult | HttpFormatResult) {
this.controllerResult_ = result || textResult("");
try {
await this.runWallOutgoing();
} catch (ex) {
this.onErrorOccured(ex);
return;
}
this.handleFinalResult_(result);
this.handleFinalResult_();
}
}
6 changes: 5 additions & 1 deletion src/handlers/request_handler_helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { IException } from "../interfaces";
import { JsonHelper, reverseLoop } from "../helpers";
import { isNull } from "../utils";
import { InjectorHandler } from "./injector_handler";
import { HttpResult, HttpFormatResult } from "../types";


export class RequestHandlerHelper {
Expand All @@ -18,11 +19,14 @@ export class RequestHandlerHelper {

protected wallInstances: Wall[] = [];

protected controllerResult_: HttpResult | HttpFormatResult;

protected runWallOutgoing() {
const outgoingResults: Array<Promise<any>> = [];
reverseLoop(this.wallInstances, (value: Wall) => {
const methodArgsValues = InjectorHandler.getMethodValues(value.constructor.name, 'onOutgoing');
outgoingResults.push(value.onOutgoing(methodArgsValues));
methodArgsValues.shift();
outgoingResults.push(value.onOutgoing(this.controllerResult_, ...methodArgsValues));
});
return Promise.all(outgoingResults);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/general/walls/request_logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export class RequestLogger extends Wall {
}
}

async onOutgoing(@Assign('on outgoing called') value: string) {
async onOutgoing(result, @Assign('on outgoing called') value: string) {
this.logger.log('executing request logger');
this.response.setHeader('Custom-Header-From-Outgoing-Wall', '*');
this.response.setHeader('injection-result', this.injectionValue + ` ${value}`);
Expand Down

0 comments on commit ba3d62b

Please sign in to comment.