add ip func to request
This commit is contained in:
parent
a9017c7550
commit
b974abff1b
|
@ -4,7 +4,7 @@ import { HTTPServer } from "../mod.ts";
|
|||
const httpServer = new HTTPServer();
|
||||
|
||||
httpServer.middleware((req) => {
|
||||
console.log(`User Requested ${req.path}`);
|
||||
console.log(`${req.method} - ${req.ip()} - ${req.path}`);
|
||||
})
|
||||
|
||||
httpServer.error((req, _rep) => {
|
||||
|
|
21
mod.ts
21
mod.ts
|
@ -97,7 +97,7 @@ export class HTTPServer {
|
|||
private async handleHttp(conn: Deno.Conn) {
|
||||
const httpConn = Deno.serveHttp(conn);
|
||||
for await (const requestEvent of httpConn) {
|
||||
const routeRequest = new RouteRequest(requestEvent.request);
|
||||
const routeRequest = new RouteRequest(requestEvent.request, conn);
|
||||
const routeReply: RouteReply = new RouteReply();
|
||||
const url = new URL(requestEvent.request.url);
|
||||
const filepath = decodeURIComponent(url.pathname);
|
||||
|
@ -276,8 +276,9 @@ export class RouteRequest {
|
|||
method: HTTPMethod;
|
||||
queryParams: { [key: string]: string };
|
||||
pathParams: { [key: string]: string };
|
||||
private remoteIpAddr: string;
|
||||
|
||||
constructor(request: Request) {
|
||||
constructor(request: Request, conn: Deno.Conn) {
|
||||
this.url = request.url;
|
||||
const urlObj = new URL(request.url);
|
||||
this.path = decodeURIComponent(urlObj.pathname);
|
||||
|
@ -285,6 +286,9 @@ export class RouteRequest {
|
|||
this.method = request.method as HTTPMethod;
|
||||
this.pathParams = {};
|
||||
this.queryParams = this.paramsToObject(urlObj.searchParams.entries());
|
||||
this.remoteIpAddr = "hostname" in conn.remoteAddr
|
||||
? conn.remoteAddr["hostname"]
|
||||
: "127.0.0.1";
|
||||
}
|
||||
|
||||
private paramsToObject(entries: IterableIterator<[string, string]>) {
|
||||
|
@ -295,6 +299,19 @@ export class RouteRequest {
|
|||
return result;
|
||||
}
|
||||
|
||||
ip() {
|
||||
const cfConnectingIp: string = this.header("cf-connecting-ip") as string;
|
||||
if (cfConnectingIp && cfConnectingIp.length > 0) return cfConnectingIp;
|
||||
|
||||
const xRealIp: string = this.header("x-real-ip") as string;
|
||||
if (xRealIp && xRealIp.length > 0) xRealIp;
|
||||
|
||||
const xForwardedFor: string = this.header("x-forwarded-For") as string;
|
||||
if (xForwardedFor && xForwardedFor.length > 0) return xForwardedFor;
|
||||
|
||||
return this.remoteIpAddr;
|
||||
}
|
||||
|
||||
header(name: string): unknown {
|
||||
const matchingHeader = Array.from(this.headers.keys()).find((headerName) =>
|
||||
headerName === name
|
||||
|
|
Reference in New Issue
Block a user