mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-11-04 03:24:04 +00:00 
			
		
		
		
	Start to create base request handler
This commit is contained in:
		
							
								
								
									
										38
									
								
								src/entities/BaseRequestsHandler.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/entities/BaseRequestsHandler.ts
									
									
									
									
									
										Normal 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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -16,6 +16,7 @@ import { PostsHelper } from "../helpers/PostsHelper";
 | 
			
		||||
import { PostAccessLevel } from "./Post";
 | 
			
		||||
import { writeFileSync } from "fs";
 | 
			
		||||
import { CommentsHelper } from "../helpers/CommentsHelper";
 | 
			
		||||
import { BaseRequestsHandler } from "./BaseRequestsHandler";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Response to a request
 | 
			
		||||
@@ -23,14 +24,20 @@ import { CommentsHelper } from "../helpers/CommentsHelper";
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
export class RequestHandler {
 | 
			
		||||
export class RequestHandler extends BaseRequestsHandler {
 | 
			
		||||
 | 
			
		||||
	private client : APIClient = null;
 | 
			
		||||
	private userID : number = -1;
 | 
			
		||||
	
 | 
			
		||||
	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
 | 
			
		||||
@@ -45,34 +52,10 @@ export class RequestHandler {
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param name Name of the parameter to get
 | 
			
		||||
	 */
 | 
			
		||||
	private getPostParam(name : string) : any {
 | 
			
		||||
	protected getPostParam(name : string) : any {
 | 
			
		||||
		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
 | 
			
		||||
	 * 
 | 
			
		||||
@@ -579,7 +562,7 @@ export class RequestHandler {
 | 
			
		||||
	 * @param code HTTP Status code
 | 
			
		||||
	 * @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)
 | 
			
		||||
			return;
 | 
			
		||||
@@ -593,8 +576,7 @@ export class RequestHandler {
 | 
			
		||||
 | 
			
		||||
		this.responseSent = true;
 | 
			
		||||
 | 
			
		||||
		if(should_throw)
 | 
			
		||||
			throw Error("Could not complete request! ("+ message +")");
 | 
			
		||||
		throw Error("Could not complete request! ("+ message +")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/main.ts
									
									
									
									
									
								
							@@ -59,7 +59,16 @@ async function init() {
 | 
			
		||||
 | 
			
		||||
			} catch(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"
 | 
			
		||||
						}
 | 
			
		||||
					})
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user