opentunnel-cli 1.0.23 → 1.0.25
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 +39 -2
- package/dist/cli/index.js +678 -84
- package/dist/cli/index.js.map +1 -1
- package/dist/client/CloudflareTunnelClient.d.ts +110 -0
- package/dist/client/CloudflareTunnelClient.d.ts.map +1 -0
- package/dist/client/CloudflareTunnelClient.js +531 -0
- package/dist/client/CloudflareTunnelClient.js.map +1 -0
- package/dist/client/NgrokClient.d.ts +18 -1
- package/dist/client/NgrokClient.d.ts.map +1 -1
- package/dist/client/NgrokClient.js +130 -4
- package/dist/client/NgrokClient.js.map +1 -1
- package/dist/client/TunnelClient.d.ts +0 -1
- package/dist/client/TunnelClient.d.ts.map +1 -1
- package/dist/client/TunnelClient.js +2 -96
- package/dist/client/TunnelClient.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +18 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/pages/index.d.ts +2 -0
- package/dist/lib/pages/index.d.ts.map +1 -0
- package/dist/lib/pages/index.js +6 -0
- package/dist/lib/pages/index.js.map +1 -0
- package/dist/lib/pages/not-running.d.ts +10 -0
- package/dist/lib/pages/not-running.d.ts.map +1 -0
- package/dist/lib/pages/not-running.js +117 -0
- package/dist/lib/pages/not-running.js.map +1 -0
- package/dist/server/TunnelServer.d.ts +1 -3
- package/dist/server/TunnelServer.d.ts.map +1 -1
- package/dist/server/TunnelServer.js +7 -58
- package/dist/server/TunnelServer.js.map +1 -1
- package/dist/shared/credentials.d.ts +101 -0
- package/dist/shared/credentials.d.ts.map +1 -0
- package/dist/shared/credentials.js +302 -0
- package/dist/shared/credentials.js.map +1 -0
- package/dist/shared/ip-filter.d.ts +75 -0
- package/dist/shared/ip-filter.d.ts.map +1 -0
- package/dist/shared/ip-filter.js +203 -0
- package/dist/shared/ip-filter.js.map +1 -0
- package/dist/shared/types.d.ts +34 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,302 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CredentialsManager = void 0;
|
|
37
|
+
exports.resolveNgrokToken = resolveNgrokToken;
|
|
38
|
+
exports.resolveCloudflareCredentials = resolveCloudflareCredentials;
|
|
39
|
+
exports.getCredentialsManager = getCredentialsManager;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
// Credentials file location
|
|
44
|
+
const OPENTUNNEL_DIR = path.join(os.homedir(), ".opentunnel");
|
|
45
|
+
const CREDENTIALS_FILE = path.join(OPENTUNNEL_DIR, "credentials.json");
|
|
46
|
+
/**
|
|
47
|
+
* Credentials Manager
|
|
48
|
+
*
|
|
49
|
+
* Handles secure storage and retrieval of provider credentials.
|
|
50
|
+
* Credential resolution priority: CLI > ENV > YAML > credentials.json
|
|
51
|
+
*/
|
|
52
|
+
class CredentialsManager {
|
|
53
|
+
constructor() {
|
|
54
|
+
this.credentials = {};
|
|
55
|
+
this.load();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the credentials directory path
|
|
59
|
+
*/
|
|
60
|
+
static getCredentialsDir() {
|
|
61
|
+
return OPENTUNNEL_DIR;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the credentials file path
|
|
65
|
+
*/
|
|
66
|
+
static getCredentialsFile() {
|
|
67
|
+
return CREDENTIALS_FILE;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Ensure the credentials directory exists with secure permissions
|
|
71
|
+
*/
|
|
72
|
+
ensureDir() {
|
|
73
|
+
if (!fs.existsSync(OPENTUNNEL_DIR)) {
|
|
74
|
+
fs.mkdirSync(OPENTUNNEL_DIR, { recursive: true, mode: 0o700 });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Load credentials from file
|
|
79
|
+
*/
|
|
80
|
+
load() {
|
|
81
|
+
try {
|
|
82
|
+
if (fs.existsSync(CREDENTIALS_FILE)) {
|
|
83
|
+
const content = fs.readFileSync(CREDENTIALS_FILE, "utf-8");
|
|
84
|
+
this.credentials = JSON.parse(content);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
this.credentials = {};
|
|
89
|
+
}
|
|
90
|
+
return this.credentials;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Save credentials to file with secure permissions (0600)
|
|
94
|
+
*/
|
|
95
|
+
save() {
|
|
96
|
+
this.ensureDir();
|
|
97
|
+
fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(this.credentials, null, 2), {
|
|
98
|
+
mode: 0o600,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get all credentials
|
|
103
|
+
*/
|
|
104
|
+
getAll() {
|
|
105
|
+
return this.credentials;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get ngrok credentials
|
|
109
|
+
*/
|
|
110
|
+
getNgrok() {
|
|
111
|
+
return this.credentials.ngrok;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Set ngrok credentials
|
|
115
|
+
*/
|
|
116
|
+
setNgrok(creds) {
|
|
117
|
+
this.credentials.ngrok = creds;
|
|
118
|
+
this.save();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Remove ngrok credentials
|
|
122
|
+
*/
|
|
123
|
+
removeNgrok() {
|
|
124
|
+
if (this.credentials.ngrok) {
|
|
125
|
+
delete this.credentials.ngrok;
|
|
126
|
+
this.save();
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get Cloudflare credentials
|
|
133
|
+
*/
|
|
134
|
+
getCloudflare() {
|
|
135
|
+
return this.credentials.cloudflare;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Set Cloudflare credentials
|
|
139
|
+
*/
|
|
140
|
+
setCloudflare(creds) {
|
|
141
|
+
this.credentials.cloudflare = {
|
|
142
|
+
...this.credentials.cloudflare,
|
|
143
|
+
...creds,
|
|
144
|
+
};
|
|
145
|
+
this.save();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Remove Cloudflare credentials
|
|
149
|
+
*/
|
|
150
|
+
removeCloudflare() {
|
|
151
|
+
if (this.credentials.cloudflare) {
|
|
152
|
+
delete this.credentials.cloudflare;
|
|
153
|
+
this.save();
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Remove all credentials for a provider
|
|
160
|
+
*/
|
|
161
|
+
removeProvider(provider) {
|
|
162
|
+
if (provider === "ngrok") {
|
|
163
|
+
return this.removeNgrok();
|
|
164
|
+
}
|
|
165
|
+
else if (provider === "cloudflare") {
|
|
166
|
+
return this.removeCloudflare();
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Set a specific credential value using dot notation
|
|
172
|
+
* e.g., "ngrok.token", "cloudflare.accountId"
|
|
173
|
+
*/
|
|
174
|
+
set(key, value) {
|
|
175
|
+
const [provider, field] = key.split(".");
|
|
176
|
+
if (provider === "ngrok") {
|
|
177
|
+
if (!this.credentials.ngrok) {
|
|
178
|
+
this.credentials.ngrok = { token: "" };
|
|
179
|
+
}
|
|
180
|
+
if (field === "token") {
|
|
181
|
+
this.credentials.ngrok.token = value;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if (provider === "cloudflare") {
|
|
185
|
+
if (!this.credentials.cloudflare) {
|
|
186
|
+
this.credentials.cloudflare = {};
|
|
187
|
+
}
|
|
188
|
+
if (field === "accountId") {
|
|
189
|
+
this.credentials.cloudflare.accountId = value;
|
|
190
|
+
}
|
|
191
|
+
else if (field === "tunnelToken") {
|
|
192
|
+
this.credentials.cloudflare.tunnelToken = value;
|
|
193
|
+
}
|
|
194
|
+
else if (field === "certPath") {
|
|
195
|
+
this.credentials.cloudflare.certPath = value;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
this.save();
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get a specific credential value using dot notation
|
|
202
|
+
* e.g., "ngrok.token", "cloudflare.accountId"
|
|
203
|
+
*/
|
|
204
|
+
get(key) {
|
|
205
|
+
const [provider, field] = key.split(".");
|
|
206
|
+
if (provider === "ngrok" && this.credentials.ngrok) {
|
|
207
|
+
if (field === "token") {
|
|
208
|
+
return this.credentials.ngrok.token;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else if (provider === "cloudflare" && this.credentials.cloudflare) {
|
|
212
|
+
if (field === "accountId") {
|
|
213
|
+
return this.credentials.cloudflare.accountId;
|
|
214
|
+
}
|
|
215
|
+
else if (field === "tunnelToken") {
|
|
216
|
+
return this.credentials.cloudflare.tunnelToken;
|
|
217
|
+
}
|
|
218
|
+
else if (field === "certPath") {
|
|
219
|
+
return this.credentials.cloudflare.certPath;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* List all stored credential keys (not values for security)
|
|
226
|
+
*/
|
|
227
|
+
listKeys() {
|
|
228
|
+
const keys = [];
|
|
229
|
+
if (this.credentials.ngrok) {
|
|
230
|
+
if (this.credentials.ngrok.token)
|
|
231
|
+
keys.push("ngrok.token");
|
|
232
|
+
}
|
|
233
|
+
if (this.credentials.cloudflare) {
|
|
234
|
+
if (this.credentials.cloudflare.accountId)
|
|
235
|
+
keys.push("cloudflare.accountId");
|
|
236
|
+
if (this.credentials.cloudflare.tunnelToken)
|
|
237
|
+
keys.push("cloudflare.tunnelToken");
|
|
238
|
+
if (this.credentials.cloudflare.certPath)
|
|
239
|
+
keys.push("cloudflare.certPath");
|
|
240
|
+
}
|
|
241
|
+
return keys;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Clear all credentials
|
|
245
|
+
*/
|
|
246
|
+
clear() {
|
|
247
|
+
this.credentials = {};
|
|
248
|
+
this.save();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.CredentialsManager = CredentialsManager;
|
|
252
|
+
/**
|
|
253
|
+
* Resolve ngrok token with priority: CLI > ENV > YAML > credentials.json
|
|
254
|
+
*/
|
|
255
|
+
function resolveNgrokToken(options) {
|
|
256
|
+
// 1. CLI flag (highest priority)
|
|
257
|
+
if (options.cliToken) {
|
|
258
|
+
return options.cliToken;
|
|
259
|
+
}
|
|
260
|
+
// 2. Environment variable
|
|
261
|
+
const envToken = process.env.NGROK_TOKEN || process.env.NGROK_AUTHTOKEN;
|
|
262
|
+
if (envToken) {
|
|
263
|
+
return envToken;
|
|
264
|
+
}
|
|
265
|
+
// 3. YAML config
|
|
266
|
+
if (options.yamlToken) {
|
|
267
|
+
return options.yamlToken;
|
|
268
|
+
}
|
|
269
|
+
// 4. Stored credentials (lowest priority)
|
|
270
|
+
const manager = new CredentialsManager();
|
|
271
|
+
return manager.getNgrok()?.token;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Resolve Cloudflare credentials with priority: CLI > ENV > YAML > credentials.json
|
|
275
|
+
*/
|
|
276
|
+
function resolveCloudflareCredentials(options) {
|
|
277
|
+
const manager = new CredentialsManager();
|
|
278
|
+
const stored = manager.getCloudflare() || {};
|
|
279
|
+
return {
|
|
280
|
+
accountId: options.cliAccountId
|
|
281
|
+
|| process.env.CLOUDFLARE_ACCOUNT_ID
|
|
282
|
+
|| options.yamlAccountId
|
|
283
|
+
|| stored.accountId,
|
|
284
|
+
tunnelToken: options.cliTunnelToken
|
|
285
|
+
|| process.env.CLOUDFLARE_TUNNEL_TOKEN
|
|
286
|
+
|| options.yamlTunnelToken
|
|
287
|
+
|| stored.tunnelToken,
|
|
288
|
+
certPath: options.cliCertPath
|
|
289
|
+
|| process.env.CLOUDFLARE_CERT_PATH
|
|
290
|
+
|| options.yamlCertPath
|
|
291
|
+
|| stored.certPath,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// Singleton instance for convenience
|
|
295
|
+
let _instance = null;
|
|
296
|
+
function getCredentialsManager() {
|
|
297
|
+
if (!_instance) {
|
|
298
|
+
_instance = new CredentialsManager();
|
|
299
|
+
}
|
|
300
|
+
return _instance;
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/shared/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { IncomingMessage } from "http";
|
|
2
|
+
import { IpAccessConfig } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Result of an IP access check
|
|
5
|
+
*/
|
|
6
|
+
export interface IpCheckResult {
|
|
7
|
+
allowed: boolean;
|
|
8
|
+
reason?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Shared IP filtering class for cross-provider security
|
|
12
|
+
*
|
|
13
|
+
* Supports:
|
|
14
|
+
* - Allowlist mode: Only IPs in the list are allowed
|
|
15
|
+
* - Denylist mode: IPs in the list are denied, others allowed
|
|
16
|
+
* - CIDR notation (e.g., 192.168.0.0/16)
|
|
17
|
+
* - IPv6-mapped IPv4 normalization
|
|
18
|
+
* - X-Forwarded-For / CF-Connecting-IP header extraction
|
|
19
|
+
*/
|
|
20
|
+
export declare class IpFilter {
|
|
21
|
+
private config;
|
|
22
|
+
constructor(config?: IpAccessConfig);
|
|
23
|
+
/**
|
|
24
|
+
* Update the filter configuration
|
|
25
|
+
*/
|
|
26
|
+
setConfig(config: IpAccessConfig): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current configuration
|
|
29
|
+
*/
|
|
30
|
+
getConfig(): IpAccessConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Check if an IP matches a CIDR range or single IP
|
|
33
|
+
*/
|
|
34
|
+
ipMatchesCidr(ip: string, cidr: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Check if an IP is in a list (supports CIDR notation)
|
|
37
|
+
*/
|
|
38
|
+
ipInList(ip: string, list: string[]): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if an IP is allowed based on the access config
|
|
41
|
+
*/
|
|
42
|
+
isAllowed(ip: string): IpCheckResult;
|
|
43
|
+
/**
|
|
44
|
+
* Normalize an IP address (removes IPv6-mapped IPv4 prefix)
|
|
45
|
+
*/
|
|
46
|
+
static normalizeIp(ip: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Extract client IP from various headers and socket
|
|
49
|
+
*
|
|
50
|
+
* Priority:
|
|
51
|
+
* 1. CF-Connecting-IP (Cloudflare)
|
|
52
|
+
* 2. X-Real-IP (nginx, common proxies)
|
|
53
|
+
* 3. X-Forwarded-For (first IP, standard proxy header)
|
|
54
|
+
* 4. Socket remoteAddress (direct connection)
|
|
55
|
+
*/
|
|
56
|
+
static extractClientIp(req: IncomingMessage): string;
|
|
57
|
+
/**
|
|
58
|
+
* Extract client IP from headers object (for use without IncomingMessage)
|
|
59
|
+
*/
|
|
60
|
+
static extractClientIpFromHeaders(headers: Record<string, string | string[] | undefined>, socketAddress?: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Merge two IP access configs, with the second one taking priority for non-undefined values
|
|
63
|
+
* Useful for per-tunnel config overriding global config
|
|
64
|
+
*/
|
|
65
|
+
static mergeConfigs(base?: IpAccessConfig, override?: IpAccessConfig): IpAccessConfig | undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a filter middleware function for HTTP servers
|
|
69
|
+
*
|
|
70
|
+
* @param config IP access configuration
|
|
71
|
+
* @param onDenied Optional callback when access is denied
|
|
72
|
+
* @returns Middleware function that returns true if allowed, false if denied
|
|
73
|
+
*/
|
|
74
|
+
export declare function createIpFilterMiddleware(config?: IpAccessConfig, onDenied?: (ip: string, reason: string) => void): (req: IncomingMessage) => IpCheckResult;
|
|
75
|
+
//# sourceMappingURL=ip-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-filter.d.ts","sourceRoot":"","sources":["../../src/shared/ip-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IACjB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,CAAC,EAAE,cAAc;IAInC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIvC;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IA6BhD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO;IAI7C;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa;IA4BpC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAItC;;;;;;;;OAQG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM;IAkCpD;;OAEG;IACH,MAAM,CAAC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAiCzH;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS;CAmBpG;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,CAAC,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAChD,CAAC,GAAG,EAAE,eAAe,KAAK,aAAa,CAazC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IpFilter = void 0;
|
|
4
|
+
exports.createIpFilterMiddleware = createIpFilterMiddleware;
|
|
5
|
+
/**
|
|
6
|
+
* Shared IP filtering class for cross-provider security
|
|
7
|
+
*
|
|
8
|
+
* Supports:
|
|
9
|
+
* - Allowlist mode: Only IPs in the list are allowed
|
|
10
|
+
* - Denylist mode: IPs in the list are denied, others allowed
|
|
11
|
+
* - CIDR notation (e.g., 192.168.0.0/16)
|
|
12
|
+
* - IPv6-mapped IPv4 normalization
|
|
13
|
+
* - X-Forwarded-For / CF-Connecting-IP header extraction
|
|
14
|
+
*/
|
|
15
|
+
class IpFilter {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.config = config || { mode: "all" };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Update the filter configuration
|
|
21
|
+
*/
|
|
22
|
+
setConfig(config) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the current configuration
|
|
27
|
+
*/
|
|
28
|
+
getConfig() {
|
|
29
|
+
return this.config;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if an IP matches a CIDR range or single IP
|
|
33
|
+
*/
|
|
34
|
+
ipMatchesCidr(ip, cidr) {
|
|
35
|
+
// Normalize IPv6-mapped IPv4 addresses
|
|
36
|
+
const normalizedIp = IpFilter.normalizeIp(ip);
|
|
37
|
+
const normalizedCidr = IpFilter.normalizeIp(cidr);
|
|
38
|
+
// If it's a single IP (no /), do direct comparison
|
|
39
|
+
if (!normalizedCidr.includes("/")) {
|
|
40
|
+
return normalizedIp === normalizedCidr;
|
|
41
|
+
}
|
|
42
|
+
const [range, bits] = normalizedCidr.split("/");
|
|
43
|
+
const mask = parseInt(bits, 10);
|
|
44
|
+
// Convert IP addresses to numbers for comparison
|
|
45
|
+
const ipParts = normalizedIp.split(".").map(Number);
|
|
46
|
+
const rangeParts = range.split(".").map(Number);
|
|
47
|
+
if (ipParts.length !== 4 || rangeParts.length !== 4) {
|
|
48
|
+
// Not valid IPv4, try simple string match
|
|
49
|
+
return normalizedIp === range;
|
|
50
|
+
}
|
|
51
|
+
const ipNum = (ipParts[0] << 24) | (ipParts[1] << 16) | (ipParts[2] << 8) | ipParts[3];
|
|
52
|
+
const rangeNum = (rangeParts[0] << 24) | (rangeParts[1] << 16) | (rangeParts[2] << 8) | rangeParts[3];
|
|
53
|
+
const maskNum = ~((1 << (32 - mask)) - 1);
|
|
54
|
+
return (ipNum & maskNum) === (rangeNum & maskNum);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if an IP is in a list (supports CIDR notation)
|
|
58
|
+
*/
|
|
59
|
+
ipInList(ip, list) {
|
|
60
|
+
return list.some(entry => this.ipMatchesCidr(ip, entry));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if an IP is allowed based on the access config
|
|
64
|
+
*/
|
|
65
|
+
isAllowed(ip) {
|
|
66
|
+
// Default: allow all
|
|
67
|
+
if (!this.config || this.config.mode === "all") {
|
|
68
|
+
return { allowed: true };
|
|
69
|
+
}
|
|
70
|
+
// Normalize IP
|
|
71
|
+
const normalizedIp = IpFilter.normalizeIp(ip);
|
|
72
|
+
if (this.config.mode === "allowlist") {
|
|
73
|
+
// Only allow IPs in the allowList
|
|
74
|
+
if (this.config.allowList && this.ipInList(normalizedIp, this.config.allowList)) {
|
|
75
|
+
return { allowed: true };
|
|
76
|
+
}
|
|
77
|
+
return { allowed: false, reason: `IP ${normalizedIp} not in allowlist` };
|
|
78
|
+
}
|
|
79
|
+
if (this.config.mode === "denylist") {
|
|
80
|
+
// Deny IPs in the denyList, allow others
|
|
81
|
+
if (this.config.denyList && this.ipInList(normalizedIp, this.config.denyList)) {
|
|
82
|
+
return { allowed: false, reason: `IP ${normalizedIp} is in denylist` };
|
|
83
|
+
}
|
|
84
|
+
return { allowed: true };
|
|
85
|
+
}
|
|
86
|
+
return { allowed: true };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Normalize an IP address (removes IPv6-mapped IPv4 prefix)
|
|
90
|
+
*/
|
|
91
|
+
static normalizeIp(ip) {
|
|
92
|
+
return ip.replace(/^::ffff:/, "");
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract client IP from various headers and socket
|
|
96
|
+
*
|
|
97
|
+
* Priority:
|
|
98
|
+
* 1. CF-Connecting-IP (Cloudflare)
|
|
99
|
+
* 2. X-Real-IP (nginx, common proxies)
|
|
100
|
+
* 3. X-Forwarded-For (first IP, standard proxy header)
|
|
101
|
+
* 4. Socket remoteAddress (direct connection)
|
|
102
|
+
*/
|
|
103
|
+
static extractClientIp(req) {
|
|
104
|
+
// Cloudflare specific header
|
|
105
|
+
const cfConnectingIp = req.headers["cf-connecting-ip"];
|
|
106
|
+
if (cfConnectingIp) {
|
|
107
|
+
const ip = Array.isArray(cfConnectingIp) ? cfConnectingIp[0] : cfConnectingIp;
|
|
108
|
+
return IpFilter.normalizeIp(ip.trim());
|
|
109
|
+
}
|
|
110
|
+
// X-Real-IP header (nginx, etc.)
|
|
111
|
+
const xRealIp = req.headers["x-real-ip"];
|
|
112
|
+
if (xRealIp) {
|
|
113
|
+
const ip = Array.isArray(xRealIp) ? xRealIp[0] : xRealIp;
|
|
114
|
+
return IpFilter.normalizeIp(ip.trim());
|
|
115
|
+
}
|
|
116
|
+
// X-Forwarded-For header (first IP is the client)
|
|
117
|
+
const xForwardedFor = req.headers["x-forwarded-for"];
|
|
118
|
+
if (xForwardedFor) {
|
|
119
|
+
const forwardedIps = Array.isArray(xForwardedFor)
|
|
120
|
+
? xForwardedFor[0]
|
|
121
|
+
: xForwardedFor;
|
|
122
|
+
const firstIp = forwardedIps.split(",")[0].trim();
|
|
123
|
+
return IpFilter.normalizeIp(firstIp);
|
|
124
|
+
}
|
|
125
|
+
// Direct socket connection
|
|
126
|
+
const socketAddress = req.socket.remoteAddress;
|
|
127
|
+
if (socketAddress) {
|
|
128
|
+
return IpFilter.normalizeIp(socketAddress);
|
|
129
|
+
}
|
|
130
|
+
return "unknown";
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Extract client IP from headers object (for use without IncomingMessage)
|
|
134
|
+
*/
|
|
135
|
+
static extractClientIpFromHeaders(headers, socketAddress) {
|
|
136
|
+
// Cloudflare specific header
|
|
137
|
+
const cfConnectingIp = headers["cf-connecting-ip"];
|
|
138
|
+
if (cfConnectingIp) {
|
|
139
|
+
const ip = Array.isArray(cfConnectingIp) ? cfConnectingIp[0] : cfConnectingIp;
|
|
140
|
+
return IpFilter.normalizeIp(ip.trim());
|
|
141
|
+
}
|
|
142
|
+
// X-Real-IP header
|
|
143
|
+
const xRealIp = headers["x-real-ip"];
|
|
144
|
+
if (xRealIp) {
|
|
145
|
+
const ip = Array.isArray(xRealIp) ? xRealIp[0] : xRealIp;
|
|
146
|
+
return IpFilter.normalizeIp(ip.trim());
|
|
147
|
+
}
|
|
148
|
+
// X-Forwarded-For header
|
|
149
|
+
const xForwardedFor = headers["x-forwarded-for"];
|
|
150
|
+
if (xForwardedFor) {
|
|
151
|
+
const forwardedIps = Array.isArray(xForwardedFor)
|
|
152
|
+
? xForwardedFor[0]
|
|
153
|
+
: xForwardedFor;
|
|
154
|
+
const firstIp = forwardedIps.split(",")[0].trim();
|
|
155
|
+
return IpFilter.normalizeIp(firstIp);
|
|
156
|
+
}
|
|
157
|
+
// Socket address fallback
|
|
158
|
+
if (socketAddress) {
|
|
159
|
+
return IpFilter.normalizeIp(socketAddress);
|
|
160
|
+
}
|
|
161
|
+
return "unknown";
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Merge two IP access configs, with the second one taking priority for non-undefined values
|
|
165
|
+
* Useful for per-tunnel config overriding global config
|
|
166
|
+
*/
|
|
167
|
+
static mergeConfigs(base, override) {
|
|
168
|
+
if (!base && !override) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
if (!base) {
|
|
172
|
+
return override;
|
|
173
|
+
}
|
|
174
|
+
if (!override) {
|
|
175
|
+
return base;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
mode: override.mode || base.mode,
|
|
179
|
+
allowList: override.allowList || base.allowList,
|
|
180
|
+
denyList: override.denyList || base.denyList,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.IpFilter = IpFilter;
|
|
185
|
+
/**
|
|
186
|
+
* Create a filter middleware function for HTTP servers
|
|
187
|
+
*
|
|
188
|
+
* @param config IP access configuration
|
|
189
|
+
* @param onDenied Optional callback when access is denied
|
|
190
|
+
* @returns Middleware function that returns true if allowed, false if denied
|
|
191
|
+
*/
|
|
192
|
+
function createIpFilterMiddleware(config, onDenied) {
|
|
193
|
+
const filter = new IpFilter(config);
|
|
194
|
+
return (req) => {
|
|
195
|
+
const clientIp = IpFilter.extractClientIp(req);
|
|
196
|
+
const result = filter.isAllowed(clientIp);
|
|
197
|
+
if (!result.allowed && onDenied) {
|
|
198
|
+
onDenied(clientIp, result.reason || "Access denied");
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=ip-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-filter.js","sourceRoot":"","sources":["../../src/shared/ip-filter.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -169,4 +169,38 @@ export interface DnsProvider {
|
|
|
169
169
|
updateRecord(subdomain: string, ip: string): Promise<boolean>;
|
|
170
170
|
deleteRecord(subdomain: string): Promise<boolean>;
|
|
171
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Cloudflare credentials for tunnel management
|
|
174
|
+
*/
|
|
175
|
+
export interface CloudflareCredentials {
|
|
176
|
+
accountId?: string;
|
|
177
|
+
tunnelToken?: string;
|
|
178
|
+
certPath?: string;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* ngrok credentials
|
|
182
|
+
*/
|
|
183
|
+
export interface NgrokCredentials {
|
|
184
|
+
token: string;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Global credentials storage structure
|
|
188
|
+
*/
|
|
189
|
+
export interface GlobalCredentials {
|
|
190
|
+
ngrok?: NgrokCredentials;
|
|
191
|
+
cloudflare?: CloudflareCredentials;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Cloudflare named tunnel info (from cloudflared tunnel list)
|
|
195
|
+
*/
|
|
196
|
+
export interface CloudflareTunnelInfo {
|
|
197
|
+
id: string;
|
|
198
|
+
name: string;
|
|
199
|
+
createdAt: Date;
|
|
200
|
+
connections?: {
|
|
201
|
+
connIndex: number;
|
|
202
|
+
isRunning: boolean;
|
|
203
|
+
originIp: string;
|
|
204
|
+
}[];
|
|
205
|
+
}
|
|
172
206
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|