1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-25 23:09:22 +00:00

Start to create base request handler

This commit is contained in:
Pierre HUBERT 2020-03-31 14:03:26 +02:00
parent a597e6eeb3
commit 088deb5b9d
3 changed files with 60 additions and 31 deletions

View File

@ -0,0 +1,38 @@
/**
* Base requests handler
*
* @author Pierre Hubert
*/
export abstract class BaseRequestsHandler {
protected abstract getPostParam(name : string) : any;
public abstract hasPostParameter(name: string) : boolean;
public abstract error(code : number, message : string) : void;
public abstract success(message: string) : void;
public abstract send(data: any): void;
/**
* Get a String from the request
*
* @param name The name of the string to get
* @param minLength Minimal required size of the string
* @param required If set to true (true by default), an error will
* be thrown if the string is not included in the request
*/
public postString(name : string, minLength : number = 1, required : boolean = true) : string {
const param = this.getPostParam(name);
// Check if parameter was not found
if(param == undefined) {
if(required)
this.error(400, "Could not find required string: '"+name+"'");
return "";
}
if(param.length < minLength)
this.error(400, "Parameter "+name+" is too short!");
return param;
}
}

View File

@ -16,6 +16,7 @@ import { PostsHelper } from "../helpers/PostsHelper";
import { PostAccessLevel } from "./Post"; import { PostAccessLevel } from "./Post";
import { writeFileSync } from "fs"; import { writeFileSync } from "fs";
import { CommentsHelper } from "../helpers/CommentsHelper"; import { CommentsHelper } from "../helpers/CommentsHelper";
import { BaseRequestsHandler } from "./BaseRequestsHandler";
/** /**
* Response to a request * Response to a request
@ -23,14 +24,20 @@ import { CommentsHelper } from "../helpers/CommentsHelper";
* @author Pierre HUBERT * @author Pierre HUBERT
*/ */
export class RequestHandler { export class RequestHandler extends BaseRequestsHandler {
private client : APIClient = null; private client : APIClient = null;
private userID : number = -1; private userID : number = -1;
private responseSent = false; private responseSent = false;
public constructor(private req : Request, private response : Response) {} public constructor(private req : Request, private response : Response) {
super();
}
public get sentResponse() {
return this.responseSent;
}
/** /**
* Get remote IP address * Get remote IP address
@ -45,34 +52,10 @@ export class RequestHandler {
* *
* @param name Name of the parameter to get * @param name Name of the parameter to get
*/ */
private getPostParam(name : string) : any { protected getPostParam(name : string) : any {
return this.req.body[name]; return this.req.body[name];
} }
/**
* Get a String from the request
*
* @param name The name of the string to get
* @param minLength Minimal required size of the string
* @param required If set to true (true by default), an error will
* be thrown if the string is not included in the request
*/
public postString(name : string, minLength : number = 1, required : boolean = true) : string {
const param = this.getPostParam(name);
// Check if parameter was not found
if(param == undefined) {
if(required)
this.error(400, "Could not find required string: '"+name+"'");
return "";
}
if(param.length < minLength)
this.error(400, "Parameter "+name+" is too short!");
return param;
}
/** /**
* Check out whether a post parameter is present into the request or not * Check out whether a post parameter is present into the request or not
* *
@ -579,7 +562,7 @@ export class RequestHandler {
* @param code HTTP Status code * @param code HTTP Status code
* @param message The message to send * @param message The message to send
*/ */
public error(code : number, message : string, should_throw: boolean = true) { public error(code : number, message : string) {
if(this.responseSent) if(this.responseSent)
return; return;
@ -593,8 +576,7 @@ export class RequestHandler {
this.responseSent = true; this.responseSent = true;
if(should_throw) throw Error("Could not complete request! ("+ message +")");
throw Error("Could not complete request! ("+ message +")");
} }
/** /**

View File

@ -59,7 +59,16 @@ async function init() {
} catch(e) { } catch(e) {
console.error(e); console.error(e);
handler.error(500, "Internal error.", false);
// Send a response to the server, if it has not
// been done yet
if(!handler.sentResponse)
res.status(500).send({
error: {
code: 500,
message: "Internal error"
}
})
} }
}; };