xray-manager 1.7.5 → 1.7.7
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-manager.d.ts","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"user-manager.d.ts","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAuC3E;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,MAAe;IAQ7D;;;;OAIG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAyBlC;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsEtD;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC/C;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0G1D;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5C;;;;OAIG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3C;;;;OAIG;IACH,kBAAkB,IAAI,mBAAmB;CAG1C"}
|
|
@@ -9,11 +9,43 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.UserManager = void 0;
|
|
11
11
|
const crypto_1 = require("crypto");
|
|
12
|
+
const url_1 = require("url");
|
|
12
13
|
const config_manager_1 = require("./config-manager");
|
|
13
14
|
const systemd_manager_1 = require("./systemd-manager");
|
|
14
15
|
const public_ip_manager_1 = require("./public-ip-manager");
|
|
15
16
|
const user_metadata_manager_1 = require("./user-metadata-manager");
|
|
16
17
|
const validator_1 = require("../utils/validator");
|
|
18
|
+
/**
|
|
19
|
+
* Generate X25519 public key from private key
|
|
20
|
+
*
|
|
21
|
+
* @param privateKeyBase64 - Base64URL encoded private key (32 bytes)
|
|
22
|
+
* @returns Base64URL encoded public key
|
|
23
|
+
*/
|
|
24
|
+
function generatePublicKeyFromPrivate(privateKeyBase64) {
|
|
25
|
+
try {
|
|
26
|
+
// Decode the raw private key (32 bytes)
|
|
27
|
+
const privateKeyBuffer = Buffer.from(privateKeyBase64, 'base64url');
|
|
28
|
+
// X25519 PKCS#8 DER header (for 32-byte raw key)
|
|
29
|
+
const pkcs8Header = Buffer.from([
|
|
30
|
+
0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e,
|
|
31
|
+
0x04, 0x22, 0x04, 0x20,
|
|
32
|
+
]);
|
|
33
|
+
const privateKeyDer = Buffer.concat([pkcs8Header, privateKeyBuffer]);
|
|
34
|
+
const privateKey = (0, crypto_1.createPrivateKey)({
|
|
35
|
+
key: privateKeyDer,
|
|
36
|
+
format: 'der',
|
|
37
|
+
type: 'pkcs8',
|
|
38
|
+
});
|
|
39
|
+
const publicKey = (0, crypto_1.createPublicKey)(privateKey);
|
|
40
|
+
const publicKeySpki = publicKey.export({ type: 'spki', format: 'der' });
|
|
41
|
+
// Extract the raw public key (last 32 bytes of SPKI)
|
|
42
|
+
const publicKeyRaw = publicKeySpki.slice(-32);
|
|
43
|
+
return publicKeyRaw.toString('base64url');
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new Error('Failed to generate public key from private key');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
17
49
|
/**
|
|
18
50
|
* UserManager - Manage Xray users
|
|
19
51
|
*/
|
|
@@ -180,10 +212,11 @@ class UserManager {
|
|
|
180
212
|
async getShareInfo(userId) {
|
|
181
213
|
const config = await this.configManager.readConfig();
|
|
182
214
|
const metadata = await this.metadataManager.getMetadata(userId);
|
|
183
|
-
// Find user
|
|
215
|
+
// Find user and inbound settings
|
|
184
216
|
let user;
|
|
185
217
|
let inboundPort;
|
|
186
218
|
let inboundProtocol;
|
|
219
|
+
let streamSettings;
|
|
187
220
|
for (const inbound of config.inbounds || []) {
|
|
188
221
|
if (inbound.settings?.clients) {
|
|
189
222
|
const client = inbound.settings.clients.find((c) => c.id === userId);
|
|
@@ -198,6 +231,7 @@ class UserManager {
|
|
|
198
231
|
};
|
|
199
232
|
inboundPort = inbound.port;
|
|
200
233
|
inboundProtocol = inbound.protocol;
|
|
234
|
+
streamSettings = inbound.streamSettings;
|
|
201
235
|
break;
|
|
202
236
|
}
|
|
203
237
|
}
|
|
@@ -214,15 +248,42 @@ class UserManager {
|
|
|
214
248
|
// If detection fails, throw error - caller should handle manual input
|
|
215
249
|
throw new Error('无法获取公网 IP,请手动设置');
|
|
216
250
|
}
|
|
217
|
-
//
|
|
218
|
-
// Format: vless://UUID@server:port?encryption=none&security=tls&type=tcp&flow=xtls-rprx-vision#email
|
|
251
|
+
// Build VLESS link based on security type
|
|
219
252
|
const port = inboundPort || 443;
|
|
220
253
|
const encryption = 'none';
|
|
221
|
-
const security = 'tls';
|
|
222
|
-
const
|
|
254
|
+
const security = streamSettings?.security || 'tls';
|
|
255
|
+
const network = streamSettings?.network || 'tcp';
|
|
223
256
|
const flow = user.flow || 'xtls-rprx-vision';
|
|
224
257
|
const name = encodeURIComponent(user.email);
|
|
225
|
-
|
|
258
|
+
let vlessLink;
|
|
259
|
+
let publicKey;
|
|
260
|
+
let shortId;
|
|
261
|
+
let serverName;
|
|
262
|
+
if (security === 'reality' && streamSettings?.realitySettings) {
|
|
263
|
+
const reality = streamSettings.realitySettings;
|
|
264
|
+
// Generate public key from private key
|
|
265
|
+
publicKey = generatePublicKeyFromPrivate(reality.privateKey);
|
|
266
|
+
serverName = reality.serverNames[0] || 'www.microsoft.com';
|
|
267
|
+
shortId = reality.shortIds[0] || '';
|
|
268
|
+
// Build REALITY link
|
|
269
|
+
// Format: vless://UUID@server:port?encryption=none&security=reality&type=tcp&flow=xtls-rprx-vision&pbk=PUBLIC_KEY&fp=chrome&sni=SNI&sid=SHORT_ID#name
|
|
270
|
+
const params = new url_1.URLSearchParams({
|
|
271
|
+
encryption,
|
|
272
|
+
security: 'reality',
|
|
273
|
+
type: network,
|
|
274
|
+
flow,
|
|
275
|
+
pbk: publicKey,
|
|
276
|
+
fp: 'chrome',
|
|
277
|
+
sni: serverName,
|
|
278
|
+
sid: shortId,
|
|
279
|
+
spx: '/',
|
|
280
|
+
});
|
|
281
|
+
vlessLink = `vless://${user.id}@${serverAddress}:${port}?${params.toString()}#${name}`;
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
// Build standard TLS link
|
|
285
|
+
vlessLink = `vless://${user.id}@${serverAddress}:${port}?encryption=${encryption}&security=${security}&type=${network}&flow=${flow}#${name}`;
|
|
286
|
+
}
|
|
226
287
|
return {
|
|
227
288
|
user,
|
|
228
289
|
shareLink: vlessLink,
|
|
@@ -230,7 +291,10 @@ class UserManager {
|
|
|
230
291
|
serverPort: port,
|
|
231
292
|
protocol: inboundProtocol || 'vless',
|
|
232
293
|
security,
|
|
233
|
-
|
|
294
|
+
serverName,
|
|
295
|
+
publicKey,
|
|
296
|
+
shortId,
|
|
297
|
+
qrCode: vlessLink,
|
|
234
298
|
};
|
|
235
299
|
}
|
|
236
300
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-manager.js","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"user-manager.js","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"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"}
|