cors-whitelist-ip 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +284 -0
- package/dist/cjs/adapters/cache/InMemoryCacheAdapter.d.ts +19 -0
- package/dist/cjs/adapters/cache/InMemoryCacheAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/cache/InMemoryCacheAdapter.js +69 -0
- package/dist/cjs/adapters/cache/InMemoryCacheAdapter.js.map +1 -0
- package/dist/cjs/adapters/cache/NoCacheAdapter.d.ts +14 -0
- package/dist/cjs/adapters/cache/NoCacheAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/cache/NoCacheAdapter.js +29 -0
- package/dist/cjs/adapters/cache/NoCacheAdapter.js.map +1 -0
- package/dist/cjs/adapters/cache/index.d.ts +3 -0
- package/dist/cjs/adapters/cache/index.d.ts.map +1 -0
- package/dist/cjs/adapters/cache/index.js +8 -0
- package/dist/cjs/adapters/cache/index.js.map +1 -0
- package/dist/cjs/adapters/storage/InMemoryStorageAdapter.d.ts +30 -0
- package/dist/cjs/adapters/storage/InMemoryStorageAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/storage/InMemoryStorageAdapter.js +70 -0
- package/dist/cjs/adapters/storage/InMemoryStorageAdapter.js.map +1 -0
- package/dist/cjs/adapters/storage/index.d.ts +3 -0
- package/dist/cjs/adapters/storage/index.d.ts.map +1 -0
- package/dist/cjs/adapters/storage/index.js +6 -0
- package/dist/cjs/adapters/storage/index.js.map +1 -0
- package/dist/cjs/core/CorsWhitelist.d.ts +60 -0
- package/dist/cjs/core/CorsWhitelist.d.ts.map +1 -0
- package/dist/cjs/core/CorsWhitelist.js +273 -0
- package/dist/cjs/core/CorsWhitelist.js.map +1 -0
- package/dist/cjs/core/index.d.ts +4 -0
- package/dist/cjs/core/index.d.ts.map +1 -0
- package/dist/cjs/core/index.js +22 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/types.d.ts +201 -0
- package/dist/cjs/core/types.d.ts.map +1 -0
- package/dist/cjs/core/types.js +3 -0
- package/dist/cjs/core/types.js.map +1 -0
- package/dist/cjs/core/utils.d.ts +31 -0
- package/dist/cjs/core/utils.d.ts.map +1 -0
- package/dist/cjs/core/utils.js +82 -0
- package/dist/cjs/core/utils.js.map +1 -0
- package/dist/cjs/frameworks/express.d.ts +15 -0
- package/dist/cjs/frameworks/express.d.ts.map +1 -0
- package/dist/cjs/frameworks/express.js +49 -0
- package/dist/cjs/frameworks/express.js.map +1 -0
- package/dist/cjs/frameworks/fastify.d.ts +18 -0
- package/dist/cjs/frameworks/fastify.d.ts.map +1 -0
- package/dist/cjs/frameworks/fastify.js +49 -0
- package/dist/cjs/frameworks/fastify.js.map +1 -0
- package/dist/cjs/frameworks/index.d.ts +5 -0
- package/dist/cjs/frameworks/index.d.ts.map +1 -0
- package/dist/cjs/frameworks/index.js +15 -0
- package/dist/cjs/frameworks/index.js.map +1 -0
- package/dist/cjs/frameworks/koa.d.ts +15 -0
- package/dist/cjs/frameworks/koa.d.ts.map +1 -0
- package/dist/cjs/frameworks/koa.js +48 -0
- package/dist/cjs/frameworks/koa.js.map +1 -0
- package/dist/cjs/frameworks/node-http.d.ts +16 -0
- package/dist/cjs/frameworks/node-http.d.ts.map +1 -0
- package/dist/cjs/frameworks/node-http.js +46 -0
- package/dist/cjs/frameworks/node-http.js.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +43 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/adapters/cache/InMemoryCacheAdapter.d.ts +19 -0
- package/dist/esm/adapters/cache/InMemoryCacheAdapter.d.ts.map +1 -0
- package/dist/esm/adapters/cache/InMemoryCacheAdapter.js +69 -0
- package/dist/esm/adapters/cache/InMemoryCacheAdapter.js.map +1 -0
- package/dist/esm/adapters/cache/NoCacheAdapter.d.ts +14 -0
- package/dist/esm/adapters/cache/NoCacheAdapter.d.ts.map +1 -0
- package/dist/esm/adapters/cache/NoCacheAdapter.js +29 -0
- package/dist/esm/adapters/cache/NoCacheAdapter.js.map +1 -0
- package/dist/esm/adapters/cache/index.d.ts +3 -0
- package/dist/esm/adapters/cache/index.d.ts.map +1 -0
- package/dist/esm/adapters/cache/index.js +8 -0
- package/dist/esm/adapters/cache/index.js.map +1 -0
- package/dist/esm/adapters/storage/InMemoryStorageAdapter.d.ts +30 -0
- package/dist/esm/adapters/storage/InMemoryStorageAdapter.d.ts.map +1 -0
- package/dist/esm/adapters/storage/InMemoryStorageAdapter.js +70 -0
- package/dist/esm/adapters/storage/InMemoryStorageAdapter.js.map +1 -0
- package/dist/esm/adapters/storage/index.d.ts +3 -0
- package/dist/esm/adapters/storage/index.d.ts.map +1 -0
- package/dist/esm/adapters/storage/index.js +6 -0
- package/dist/esm/adapters/storage/index.js.map +1 -0
- package/dist/esm/core/CorsWhitelist.d.ts +60 -0
- package/dist/esm/core/CorsWhitelist.d.ts.map +1 -0
- package/dist/esm/core/CorsWhitelist.js +273 -0
- package/dist/esm/core/CorsWhitelist.js.map +1 -0
- package/dist/esm/core/index.d.ts +4 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +22 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/types.d.ts +201 -0
- package/dist/esm/core/types.d.ts.map +1 -0
- package/dist/esm/core/types.js +3 -0
- package/dist/esm/core/types.js.map +1 -0
- package/dist/esm/core/utils.d.ts +31 -0
- package/dist/esm/core/utils.d.ts.map +1 -0
- package/dist/esm/core/utils.js +82 -0
- package/dist/esm/core/utils.js.map +1 -0
- package/dist/esm/frameworks/express.d.ts +15 -0
- package/dist/esm/frameworks/express.d.ts.map +1 -0
- package/dist/esm/frameworks/express.js +49 -0
- package/dist/esm/frameworks/express.js.map +1 -0
- package/dist/esm/frameworks/fastify.d.ts +18 -0
- package/dist/esm/frameworks/fastify.d.ts.map +1 -0
- package/dist/esm/frameworks/fastify.js +49 -0
- package/dist/esm/frameworks/fastify.js.map +1 -0
- package/dist/esm/frameworks/index.d.ts +5 -0
- package/dist/esm/frameworks/index.d.ts.map +1 -0
- package/dist/esm/frameworks/index.js +15 -0
- package/dist/esm/frameworks/index.js.map +1 -0
- package/dist/esm/frameworks/koa.d.ts +15 -0
- package/dist/esm/frameworks/koa.d.ts.map +1 -0
- package/dist/esm/frameworks/koa.js +48 -0
- package/dist/esm/frameworks/koa.js.map +1 -0
- package/dist/esm/frameworks/node-http.d.ts +16 -0
- package/dist/esm/frameworks/node-http.d.ts.map +1 -0
- package/dist/esm/frameworks/node-http.js +46 -0
- package/dist/esm/frameworks/node-http.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +43 -0
- package/dist/esm/index.js.map +1 -0
- package/package.json +147 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryStorageAdapter = void 0;
|
|
4
|
+
const utils_1 = require("../../core/utils");
|
|
5
|
+
/**
|
|
6
|
+
* In-memory storage adapter for testing and simple use cases.
|
|
7
|
+
* Data is stored in memory and lost when the process exits.
|
|
8
|
+
*/
|
|
9
|
+
class InMemoryStorageAdapter {
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
this.globalWhitelist = config.globalWhitelist ?? [];
|
|
12
|
+
this.whitelistEntries = config.whitelistEntries ?? [];
|
|
13
|
+
this.apiKeys = config.apiKeys ?? new Map();
|
|
14
|
+
}
|
|
15
|
+
async getGlobalWhitelist() {
|
|
16
|
+
return [...this.globalWhitelist];
|
|
17
|
+
}
|
|
18
|
+
async getWhitelistEntries() {
|
|
19
|
+
return this.whitelistEntries.filter((e) => e.isActive);
|
|
20
|
+
}
|
|
21
|
+
async getOrganisationWhitelist(organisationId) {
|
|
22
|
+
return this.whitelistEntries.filter((e) => e.organisationId === organisationId && e.isActive);
|
|
23
|
+
}
|
|
24
|
+
async findOrganisationByDomain(domain) {
|
|
25
|
+
const entry = this.whitelistEntries.find((e) => e.type === 'DOMAIN' && e.isActive && (0, utils_1.matchesWildcard)(domain, e.value));
|
|
26
|
+
return entry?.organisationId ?? null;
|
|
27
|
+
}
|
|
28
|
+
async getApiKey(organisationId, _type) {
|
|
29
|
+
return this.apiKeys.get(organisationId) ?? null;
|
|
30
|
+
}
|
|
31
|
+
async isIpWhitelisted(ip) {
|
|
32
|
+
return this.whitelistEntries.some((e) => e.type === 'IP' && e.value === ip && e.isActive);
|
|
33
|
+
}
|
|
34
|
+
async isDomainWhitelisted(domain) {
|
|
35
|
+
return this.whitelistEntries.some((e) => e.type === 'DOMAIN' && e.isActive && (0, utils_1.matchesWildcard)(domain, e.value));
|
|
36
|
+
}
|
|
37
|
+
// ─────────────────────────────────────────────────────────────────
|
|
38
|
+
// Additional methods for testing and management
|
|
39
|
+
// ─────────────────────────────────────────────────────────────────
|
|
40
|
+
addGlobalDomain(domain) {
|
|
41
|
+
if (!this.globalWhitelist.includes(domain)) {
|
|
42
|
+
this.globalWhitelist.push(domain);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
removeGlobalDomain(domain) {
|
|
46
|
+
const index = this.globalWhitelist.indexOf(domain);
|
|
47
|
+
if (index > -1) {
|
|
48
|
+
this.globalWhitelist.splice(index, 1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
addWhitelistEntry(entry) {
|
|
52
|
+
this.whitelistEntries.push(entry);
|
|
53
|
+
}
|
|
54
|
+
removeWhitelistEntry(id) {
|
|
55
|
+
const index = this.whitelistEntries.findIndex((e) => e.id === id);
|
|
56
|
+
if (index > -1) {
|
|
57
|
+
this.whitelistEntries.splice(index, 1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
setApiKey(organisationId, apiKey) {
|
|
61
|
+
this.apiKeys.set(organisationId, apiKey);
|
|
62
|
+
}
|
|
63
|
+
clear() {
|
|
64
|
+
this.globalWhitelist = [];
|
|
65
|
+
this.whitelistEntries = [];
|
|
66
|
+
this.apiKeys.clear();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.InMemoryStorageAdapter = InMemoryStorageAdapter;
|
|
70
|
+
//# sourceMappingURL=InMemoryStorageAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryStorageAdapter.js","sourceRoot":"","sources":["../../../../src/adapters/storage/InMemoryStorageAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryStorageAdapter = void 0;
|
|
4
|
+
var InMemoryStorageAdapter_1 = require("./InMemoryStorageAdapter");
|
|
5
|
+
Object.defineProperty(exports, "InMemoryStorageAdapter", { enumerable: true, get: function () { return InMemoryStorageAdapter_1.InMemoryStorageAdapter; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/storage/index.ts"],"names":[],"mappings":";;;AAAA,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { CorsWhitelistOptions, ValidationResult, GenericRequest, GenericResponse, StorageAdapter, CacheAdapter } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Main CORS Whitelist class that handles origin validation
|
|
4
|
+
* and CORS header management in a framework-agnostic way.
|
|
5
|
+
*/
|
|
6
|
+
export declare class CorsWhitelist {
|
|
7
|
+
private storage;
|
|
8
|
+
private cache;
|
|
9
|
+
private cacheTtl;
|
|
10
|
+
private logger;
|
|
11
|
+
private corsHeaders;
|
|
12
|
+
private allowNoOrigin;
|
|
13
|
+
private customGetClientIp?;
|
|
14
|
+
private debug;
|
|
15
|
+
constructor(options: CorsWhitelistOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Initialize the CORS middleware (call before handling requests)
|
|
18
|
+
*/
|
|
19
|
+
initialize(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Clean up resources
|
|
22
|
+
*/
|
|
23
|
+
dispose(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Main handler for CORS requests. Returns whether to continue processing.
|
|
26
|
+
* @param req - Generic request object
|
|
27
|
+
* @param res - Generic response object
|
|
28
|
+
* @returns true if request should continue, false if handled (blocked or preflight)
|
|
29
|
+
*/
|
|
30
|
+
handleRequest(req: GenericRequest, res: GenericResponse): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Validate if an origin is allowed
|
|
33
|
+
* @param origin - The origin to validate
|
|
34
|
+
* @returns Validation result with details
|
|
35
|
+
*/
|
|
36
|
+
validateOrigin(origin: string): Promise<ValidationResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Invalidate cache for a specific domain or pattern
|
|
39
|
+
*/
|
|
40
|
+
invalidateCache(pattern?: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Get the storage adapter instance
|
|
43
|
+
*/
|
|
44
|
+
getStorage(): StorageAdapter;
|
|
45
|
+
/**
|
|
46
|
+
* Get the cache adapter instance
|
|
47
|
+
*/
|
|
48
|
+
getCache(): CacheAdapter;
|
|
49
|
+
private handlePreflight;
|
|
50
|
+
private handleRegularRequest;
|
|
51
|
+
private performValidation;
|
|
52
|
+
private getGlobalWhitelist;
|
|
53
|
+
private setPreflightHeaders;
|
|
54
|
+
private setCorsHeaders;
|
|
55
|
+
private getOrigin;
|
|
56
|
+
private getClientIp;
|
|
57
|
+
private defaultGetClientIp;
|
|
58
|
+
private log;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=CorsWhitelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CorsWhitelist.d.ts","sourceRoot":"","sources":["../../../src/core/CorsWhitelist.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAEhB,cAAc,EACd,eAAe,EAEf,cAAc,EACd,YAAY,EACb,MAAM,SAAS,CAAC;AAcjB;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAC5D,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,EAAE,oBAAoB;IAWzC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;;;;OAKG;IACG,aAAa,CACjB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,OAAO,CAAC;IA4BnB;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkB/D;;OAEG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;IACH,UAAU,IAAI,cAAc;IAI5B;;OAEG;IACH,QAAQ,IAAI,YAAY;YAQV,eAAe;YA4Bf,oBAAoB;YA8BpB,iBAAiB;YAuDjB,kBAAkB;IAchC,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,GAAG;CASZ"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CorsWhitelist = void 0;
|
|
4
|
+
const NoCacheAdapter_1 = require("../adapters/cache/NoCacheAdapter");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const DEFAULT_CORS_HEADERS = {
|
|
7
|
+
allowOrigin: '',
|
|
8
|
+
allowMethods: 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
|
|
9
|
+
allowHeaders: 'Content-Type, Authorization, X-Requested-With',
|
|
10
|
+
allowCredentials: true,
|
|
11
|
+
maxAge: 86400, // 24 hours
|
|
12
|
+
};
|
|
13
|
+
const DEFAULT_CACHE_TTL = 3600; // 1 hour
|
|
14
|
+
/**
|
|
15
|
+
* Main CORS Whitelist class that handles origin validation
|
|
16
|
+
* and CORS header management in a framework-agnostic way.
|
|
17
|
+
*/
|
|
18
|
+
class CorsWhitelist {
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.storage = options.storage;
|
|
21
|
+
this.cache = options.cache ?? new NoCacheAdapter_1.NoCacheAdapter();
|
|
22
|
+
this.cacheTtl = options.cacheTtl ?? DEFAULT_CACHE_TTL;
|
|
23
|
+
this.logger = options.logger ?? console;
|
|
24
|
+
this.corsHeaders = { ...DEFAULT_CORS_HEADERS, ...options.corsHeaders };
|
|
25
|
+
this.allowNoOrigin = options.allowNoOrigin ?? true;
|
|
26
|
+
this.customGetClientIp = options.getClientIp;
|
|
27
|
+
this.debug = options.debug ?? false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Initialize the CORS middleware (call before handling requests)
|
|
31
|
+
*/
|
|
32
|
+
async initialize() {
|
|
33
|
+
if (this.storage.initialize) {
|
|
34
|
+
await this.storage.initialize();
|
|
35
|
+
}
|
|
36
|
+
if (this.cache.initialize) {
|
|
37
|
+
await this.cache.initialize();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Clean up resources
|
|
42
|
+
*/
|
|
43
|
+
async dispose() {
|
|
44
|
+
if (this.storage.dispose) {
|
|
45
|
+
await this.storage.dispose();
|
|
46
|
+
}
|
|
47
|
+
if (this.cache.dispose) {
|
|
48
|
+
await this.cache.dispose();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Main handler for CORS requests. Returns whether to continue processing.
|
|
53
|
+
* @param req - Generic request object
|
|
54
|
+
* @param res - Generic response object
|
|
55
|
+
* @returns true if request should continue, false if handled (blocked or preflight)
|
|
56
|
+
*/
|
|
57
|
+
async handleRequest(req, res) {
|
|
58
|
+
try {
|
|
59
|
+
const origin = this.getOrigin(req);
|
|
60
|
+
const method = req.method.toUpperCase();
|
|
61
|
+
const clientIp = this.getClientIp(req);
|
|
62
|
+
this.log(`[CORS] Request from IP: ${clientIp}, Origin: ${origin}, Path: ${req.url}, Method: ${method}`);
|
|
63
|
+
// Handle preflight OPTIONS requests
|
|
64
|
+
if (method === 'OPTIONS') {
|
|
65
|
+
return await this.handlePreflight(req, res, origin);
|
|
66
|
+
}
|
|
67
|
+
// Handle regular requests
|
|
68
|
+
return await this.handleRegularRequest(req, res, origin);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
this.logger.error(`[CORS] Error in CORS handler: ${error.message}`, error.stack);
|
|
72
|
+
res.statusCode = 500;
|
|
73
|
+
res.end(JSON.stringify({ error: 'Internal Server Error' }));
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validate if an origin is allowed
|
|
79
|
+
* @param origin - The origin to validate
|
|
80
|
+
* @returns Validation result with details
|
|
81
|
+
*/
|
|
82
|
+
async validateOrigin(origin) {
|
|
83
|
+
const cacheKey = `cors:validation:${origin}`;
|
|
84
|
+
// Try cache first
|
|
85
|
+
const cached = await this.cache.get(cacheKey);
|
|
86
|
+
if (cached) {
|
|
87
|
+
this.log(`[CORS] Cache hit for origin validation: ${origin}`);
|
|
88
|
+
return cached;
|
|
89
|
+
}
|
|
90
|
+
const result = await this.performValidation(origin);
|
|
91
|
+
// Cache the result
|
|
92
|
+
await this.cache.set(cacheKey, result, this.cacheTtl);
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Invalidate cache for a specific domain or pattern
|
|
97
|
+
*/
|
|
98
|
+
async invalidateCache(pattern) {
|
|
99
|
+
if (pattern) {
|
|
100
|
+
await this.cache.deletePattern(`cors:*${pattern}*`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
await this.cache.deletePattern('cors:*');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get the storage adapter instance
|
|
108
|
+
*/
|
|
109
|
+
getStorage() {
|
|
110
|
+
return this.storage;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get the cache adapter instance
|
|
114
|
+
*/
|
|
115
|
+
getCache() {
|
|
116
|
+
return this.cache;
|
|
117
|
+
}
|
|
118
|
+
// ─────────────────────────────────────────────────────────────────
|
|
119
|
+
// Private methods
|
|
120
|
+
// ─────────────────────────────────────────────────────────────────
|
|
121
|
+
async handlePreflight(_req, res, origin) {
|
|
122
|
+
if (!origin) {
|
|
123
|
+
this.log('[CORS] Preflight without origin, denying');
|
|
124
|
+
res.statusCode = 403;
|
|
125
|
+
res.end(JSON.stringify({ error: 'Origin header required for preflight' }));
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
const validation = await this.validateOrigin(origin);
|
|
129
|
+
if (validation.allowed) {
|
|
130
|
+
this.log(`[CORS] Preflight allowed for origin: ${origin}`);
|
|
131
|
+
this.setPreflightHeaders(res, origin);
|
|
132
|
+
res.statusCode = 204;
|
|
133
|
+
res.end();
|
|
134
|
+
return false; // Preflight handled, don't continue
|
|
135
|
+
}
|
|
136
|
+
this.logger.warn(`[CORS] Preflight blocked for origin: ${origin}`);
|
|
137
|
+
res.statusCode = 403;
|
|
138
|
+
res.end(JSON.stringify({ error: 'CORS not allowed for this origin' }));
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
async handleRegularRequest(_req, res, origin) {
|
|
142
|
+
// No origin = not a CORS request, allow through
|
|
143
|
+
if (!origin) {
|
|
144
|
+
if (this.allowNoOrigin) {
|
|
145
|
+
this.log('[CORS] No origin header, allowing request');
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
res.statusCode = 403;
|
|
149
|
+
res.end(JSON.stringify({ error: 'Origin header required' }));
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const validation = await this.validateOrigin(origin);
|
|
153
|
+
if (validation.allowed) {
|
|
154
|
+
this.log(`[CORS] Request allowed for origin: ${origin}`);
|
|
155
|
+
this.setCorsHeaders(res, origin);
|
|
156
|
+
return true; // Continue processing
|
|
157
|
+
}
|
|
158
|
+
this.logger.warn(`[CORS] Request blocked for origin: ${origin}`);
|
|
159
|
+
res.statusCode = 403;
|
|
160
|
+
res.end(JSON.stringify({ error: 'CORS not allowed for this origin' }));
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
async performValidation(origin) {
|
|
164
|
+
// 1. Check global whitelist
|
|
165
|
+
const globalWhitelist = await this.getGlobalWhitelist();
|
|
166
|
+
if (globalWhitelist.includes('*')) {
|
|
167
|
+
return { allowed: true, reason: 'Global wildcard (*) allows all origins' };
|
|
168
|
+
}
|
|
169
|
+
if (globalWhitelist.includes(origin)) {
|
|
170
|
+
return { allowed: true, reason: 'Origin in global whitelist' };
|
|
171
|
+
}
|
|
172
|
+
// 2. Extract domain from origin
|
|
173
|
+
const domain = (0, utils_1.extractDomain)(origin);
|
|
174
|
+
if (!domain) {
|
|
175
|
+
return { allowed: false, reason: 'Invalid origin format' };
|
|
176
|
+
}
|
|
177
|
+
// Check if full origin URL is in global whitelist
|
|
178
|
+
if (globalWhitelist.includes(domain)) {
|
|
179
|
+
return { allowed: true, reason: 'Domain in global whitelist' };
|
|
180
|
+
}
|
|
181
|
+
// 3. Check if domain is associated with an API key
|
|
182
|
+
const orgId = await this.storage.findOrganisationByDomain(domain);
|
|
183
|
+
if (orgId) {
|
|
184
|
+
const apiKey = await this.storage.getApiKey(orgId, 'client');
|
|
185
|
+
if (apiKey) {
|
|
186
|
+
return {
|
|
187
|
+
allowed: true,
|
|
188
|
+
reason: 'Domain associated with API key',
|
|
189
|
+
organisationId: orgId,
|
|
190
|
+
apiKey,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// 4. Check IP whitelist (if origin is IP-based)
|
|
195
|
+
if ((0, utils_1.isIpAddress)(domain)) {
|
|
196
|
+
const isWhitelisted = await this.storage.isIpWhitelisted(domain);
|
|
197
|
+
if (isWhitelisted) {
|
|
198
|
+
return { allowed: true, reason: 'IP address in whitelist' };
|
|
199
|
+
}
|
|
200
|
+
return { allowed: false, reason: 'IP address not in whitelist' };
|
|
201
|
+
}
|
|
202
|
+
// 5. Check domain pattern whitelist (including wildcards)
|
|
203
|
+
const isDomainAllowed = await this.storage.isDomainWhitelisted(domain);
|
|
204
|
+
if (isDomainAllowed) {
|
|
205
|
+
return { allowed: true, reason: 'Domain matches whitelist pattern' };
|
|
206
|
+
}
|
|
207
|
+
return { allowed: false, reason: 'Origin not in any whitelist' };
|
|
208
|
+
}
|
|
209
|
+
async getGlobalWhitelist() {
|
|
210
|
+
const cacheKey = 'cors:global:whitelist';
|
|
211
|
+
const cached = await this.cache.get(cacheKey);
|
|
212
|
+
if (cached) {
|
|
213
|
+
return cached;
|
|
214
|
+
}
|
|
215
|
+
const whitelist = await this.storage.getGlobalWhitelist();
|
|
216
|
+
await this.cache.set(cacheKey, whitelist, this.cacheTtl);
|
|
217
|
+
return whitelist;
|
|
218
|
+
}
|
|
219
|
+
setPreflightHeaders(res, origin) {
|
|
220
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
221
|
+
res.setHeader('Access-Control-Allow-Methods', this.corsHeaders.allowMethods);
|
|
222
|
+
res.setHeader('Access-Control-Allow-Headers', this.corsHeaders.allowHeaders);
|
|
223
|
+
res.setHeader('Access-Control-Allow-Credentials', String(this.corsHeaders.allowCredentials));
|
|
224
|
+
res.setHeader('Access-Control-Max-Age', String(this.corsHeaders.maxAge));
|
|
225
|
+
if (this.corsHeaders.exposeHeaders) {
|
|
226
|
+
res.setHeader('Access-Control-Expose-Headers', this.corsHeaders.exposeHeaders);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
setCorsHeaders(res, origin) {
|
|
230
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
231
|
+
res.setHeader('Access-Control-Allow-Credentials', String(this.corsHeaders.allowCredentials));
|
|
232
|
+
if (this.corsHeaders.exposeHeaders) {
|
|
233
|
+
res.setHeader('Access-Control-Expose-Headers', this.corsHeaders.exposeHeaders);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
getOrigin(req) {
|
|
237
|
+
const origin = req.headers['origin'];
|
|
238
|
+
if (Array.isArray(origin)) {
|
|
239
|
+
return origin[0] || null;
|
|
240
|
+
}
|
|
241
|
+
return origin || null;
|
|
242
|
+
}
|
|
243
|
+
getClientIp(req) {
|
|
244
|
+
if (this.customGetClientIp) {
|
|
245
|
+
return this.customGetClientIp(req);
|
|
246
|
+
}
|
|
247
|
+
return this.defaultGetClientIp(req);
|
|
248
|
+
}
|
|
249
|
+
defaultGetClientIp(req) {
|
|
250
|
+
const forwarded = req.headers['x-forwarded-for'];
|
|
251
|
+
if (forwarded) {
|
|
252
|
+
const ips = (Array.isArray(forwarded) ? forwarded[0] : forwarded).split(',');
|
|
253
|
+
return ips[0].trim();
|
|
254
|
+
}
|
|
255
|
+
const realIp = req.headers['x-real-ip'];
|
|
256
|
+
if (realIp) {
|
|
257
|
+
return Array.isArray(realIp) ? realIp[0] : realIp;
|
|
258
|
+
}
|
|
259
|
+
return req.ip || 'unknown';
|
|
260
|
+
}
|
|
261
|
+
log(message) {
|
|
262
|
+
if (this.debug) {
|
|
263
|
+
if (this.logger.debug) {
|
|
264
|
+
this.logger.debug(message);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
this.logger.log(message);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
exports.CorsWhitelist = CorsWhitelist;
|
|
273
|
+
//# sourceMappingURL=CorsWhitelist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CorsWhitelist.js","sourceRoot":"","sources":["../../../src/core/CorsWhitelist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.CorsWhitelist = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
__exportStar(require("./utils"), exports);
|
|
20
|
+
var CorsWhitelist_1 = require("./CorsWhitelist");
|
|
21
|
+
Object.defineProperty(exports, "CorsWhitelist", { enumerable: true, get: function () { return CorsWhitelist_1.CorsWhitelist; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,0CAAwB;AACxB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|