mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-04-19 21:42:24 +00:00
chore: refactoring RandomUtil
class
now we use window.crypto.getRandomValues to generate random values.
This commit is contained in:
parent
64fa0e97a3
commit
cedc7f0fb8
3 changed files with 27 additions and 38 deletions
|
@ -1050,7 +1050,7 @@ class Allocate extends XrayCommonClass {
|
||||||
|
|
||||||
class Inbound extends XrayCommonClass {
|
class Inbound extends XrayCommonClass {
|
||||||
constructor(
|
constructor(
|
||||||
port = RandomUtil.randomIntRange(10000, 60000),
|
port = RandomUtil.randomInteger(10000, 60000),
|
||||||
listen = '',
|
listen = '',
|
||||||
protocol = Protocols.VLESS,
|
protocol = Protocols.VLESS,
|
||||||
settings = null,
|
settings = null,
|
||||||
|
@ -1226,7 +1226,7 @@ class Inbound extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
this.port = RandomUtil.randomIntRange(10000, 60000);
|
this.port = RandomUtil.randomInteger(10000, 60000);
|
||||||
this.listen = '';
|
this.listen = '';
|
||||||
this.protocol = Protocols.VMESS;
|
this.protocol = Protocols.VMESS;
|
||||||
this.settings = Inbound.Settings.getSettings(Protocols.VMESS);
|
this.settings = Inbound.Settings.getSettings(Protocols.VMESS);
|
||||||
|
|
|
@ -80,59 +80,48 @@ class PromiseUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const seq = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
|
|
||||||
|
|
||||||
class RandomUtil {
|
class RandomUtil {
|
||||||
static randomIntRange(min, max) {
|
static getSeq({ hasNumbers = true, hasLowercase = true, hasUppercase = true } = {}) {
|
||||||
return Math.floor(Math.random() * (max - min) + min);
|
let seq = '';
|
||||||
|
if (hasNumbers) seq += "0123456789";
|
||||||
|
if (hasLowercase) seq += "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
if (hasUppercase) seq += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
return seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomInt(n) {
|
static randomInteger(min, max) {
|
||||||
return this.randomIntRange(0, n);
|
const range = max - min + 1;
|
||||||
|
const randomBuffer = new Uint32Array(1);
|
||||||
|
window.crypto.getRandomValues(randomBuffer);
|
||||||
|
return Math.floor((randomBuffer[0] / (0xFFFFFFFF + 1)) * range) + min;
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomSeq(count) {
|
static randomSeq(count, options = {}) {
|
||||||
let str = '';
|
const seq = this.getSeq(options);
|
||||||
for (let i = 0; i < count; ++i) {
|
const seqLength = seq.length;
|
||||||
str += seq[this.randomInt(62)];
|
const randomValues = new Uint32Array(count);
|
||||||
}
|
window.crypto.getRandomValues(randomValues);
|
||||||
return str;
|
return Array.from(randomValues, v => seq[v % seqLength]).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomShortIds() {
|
static randomShortIds() {
|
||||||
const lengths = [2, 4, 6, 8, 10, 12, 14, 16];
|
const lengths = [2, 4, 6, 8, 10, 12, 14, 16].sort(() => Math.random() - 0.5);
|
||||||
for (let i = lengths.length - 1; i > 0; i--) {
|
const seq = this.getSeq();
|
||||||
const j = Math.floor(Math.random() * (i + 1));
|
return lengths.map(len => this.randomSeq(len)).join(',');
|
||||||
[lengths[i], lengths[j]] = [lengths[j], lengths[i]];
|
|
||||||
}
|
|
||||||
|
|
||||||
let shortIds = [];
|
|
||||||
for (let length of lengths) {
|
|
||||||
let shortId = '';
|
|
||||||
for (let i = 0; i < length; i++) {
|
|
||||||
shortId += seq[this.randomInt(16)];
|
|
||||||
}
|
|
||||||
shortIds.push(shortId);
|
|
||||||
}
|
|
||||||
return shortIds.join(',');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomLowerAndNum(len) {
|
static randomLowerAndNum(len) {
|
||||||
let str = '';
|
return this.randomSeq(len, { hasUppercase: false });
|
||||||
for (let i = 0; i < len; ++i) {
|
|
||||||
str += seq[this.randomInt(36)];
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomUUID() {
|
static randomUUID() {
|
||||||
return window.crypto.randomUUID()
|
return window.crypto.randomUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomShadowsocksPassword() {
|
static randomShadowsocksPassword() {
|
||||||
let array = new Uint8Array(32);
|
const array = new Uint8Array(32);
|
||||||
window.crypto.getRandomValues(array);
|
window.crypto.getRandomValues(array);
|
||||||
return Base64.encode(String.fromCharCode.apply(null, array));
|
return Base64.encode(String.fromCharCode(...array));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -927,7 +927,7 @@
|
||||||
expiryTime: dbInbound.expiryTime,
|
expiryTime: dbInbound.expiryTime,
|
||||||
|
|
||||||
listen: '',
|
listen: '',
|
||||||
port: RandomUtil.randomIntRange(10000, 60000),
|
port: RandomUtil.randomInteger(10000, 60000),
|
||||||
protocol: baseInbound.protocol,
|
protocol: baseInbound.protocol,
|
||||||
settings: Inbound.Settings.getSettings(baseInbound.protocol).toString(),
|
settings: Inbound.Settings.getSettings(baseInbound.protocol).toString(),
|
||||||
streamSettings: baseInbound.stream.toString(),
|
streamSettings: baseInbound.stream.toString(),
|
||||||
|
|
Loading…
Reference in a new issue