Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
bia-pain-bache committed Jan 10, 2025
2 parents becb1f8 + 80a379a commit 4792e4b
Show file tree
Hide file tree
Showing 28 changed files with 9,763 additions and 170 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,15 @@ jobs:
- name: Build project
run: |
npx wrangler deploy src/worker.js --name bpb-worker-panel --compatibility-flag [nodejs_compat] --compatibility-date 2024-10-26 --dry-run --outdir=dist
npx javascript-obfuscator --split-strings true --split-strings-chunk-length 2 dist/worker.js --output _worker.js
cp -f dist/worker.js unobfuscated/worker.js
npx javascript-obfuscator --config ./obfs-config.json dist/worker.js --output _worker.js
- name: Commit and push built worker
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add _worker.js
git add -f unobfuscated/worker.js
git commit -m "Automated build: update _worker.js"
git push
env:
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
!.github/**
!src/
!src/**
!package.json
!package.json
!obfs-config.json
2 changes: 1 addition & 1 deletion _worker.js

Large diffs are not rendered by default.

Binary file modified docs/assets/images/Generate_secrets.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/images/Nav_dash_kv.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/images/Pages_env_vars.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/images/Panel.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions docs/pages_installation_fa.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@
<img src="assets/images/Generate_secrets.jpg">
</p>

## قدم سوم - ساخت Cloudflare KV و تنظیم UUID و Trojan Password
## قدم سوم - ساخت Cloudflare KV و تنظیم UUID و پسورد Trojan
از منوی سمت چپ میریم به قسمت KV:

<p align="center">
<img src="assets/images/Nav_dash_kv.jpg">
</p>

روی `Create a namespace` کلیک میکنیم و یه اسم دلخواه بهش میدیم و Add میکنیم.
روی `Create` کلیک میکنیم و یه اسم دلخواه بهش میدیم و Add میکنیم.


برگردید به قسمت `Workers and Pages` و وارد اون پروژه‌ی Pages بشید که ساختید، با توجه به عکس زیر برید قسمت `Settings`:
Expand All @@ -61,15 +61,15 @@
</p>


اینجا مثل ورکر تو صفحه قسمت `Bindings` رو پیدا کنید، `Add` بزنید و `KV Namespace` رو انتخاب کنید، `Variable name` باید حتما `bpb` باشه (همینجوری که نوشتم) و `KV namespace` اون KV رو انتخاب میکنید که مرحله دو ساختید و `save` میکنید.
اینجا مثل ورکر تو صفحه قسمت `Bindings` رو پیدا کنید، `Add` بزنید و `KV Namespace` رو انتخاب کنید، `Variable name` باید حتما `kv` باشه (همینجوری که نوشتم) و `KV namespace` اون KV رو انتخاب میکنید که مرحله دو ساختید و `save` میکنید.

<p align="center">
<img src="assets/images/Pages_bind_kv.jpg">
</p>

خب کارمون با KV تموم شد.

تو همین قسمت `Settings` بخش `Variables and Secrets` رو میبینید، `Add variable` بزنید خونه اول `UUID` با حروف بزرگ، UUID رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید. یک بار دیگه `Add variable` بزنید خونه اول `TROJAN_PASS` با حروف بزرگ، پسورد Trojan رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید.
تو همین قسمت `Settings` بخش `Variables and Secrets` رو میبینید، `Add variable` بزنید خونه اول `UUID` با حروف بزرگ، UUID رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید. یک بار دیگه `Add variable` بزنید خونه اول `TR_PASS` با حروف بزرگ، پسورد Trojan رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید.

از نوار بالا به قسمت `Deployment` برگردید و از بخش `Production` برید به `view details`:

Expand Down
8 changes: 4 additions & 4 deletions docs/pages_upload_installation_fa.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
<img src="assets/images/Generate_secrets.jpg">
</p>

## قدم سوم - ساخت Cloudflare KV و تنظیم UUID و Trojan Password
## قدم سوم - ساخت Cloudflare KV و تنظیم UUID و پسورد Trojan
از منوی سمت چپ میریم به قسمت KV:

<p align="center">
<img src="assets/images/Nav_dash_kv.jpg">
</p>

روی `Create a namespace` کلیک میکنیم و یه اسم دلخواه بهش میدیم و Add میکنیم.
روی `Create` کلیک میکنیم و یه اسم دلخواه بهش میدیم و Add میکنیم.


برگردید به قسمت `Workers and Pages` و وارد اون پروژه‌ی Pages بشید که ساختید، با توجه به عکس زیر برید قسمت `Settings`:
Expand All @@ -40,15 +40,15 @@
</p>


اینجا مثل ورکر تو صفحه قسمت `Bindings` رو پیدا کنید، `Add` بزنید و `KV Namespace` رو انتخاب کنید، `Variable name` باید حتما `bpb` باشه (همینجوری که نوشتم) و `KV namespace` اون KV رو انتخاب میکنید که مرحله دو ساختید و `save` میکنید.
اینجا مثل ورکر تو صفحه قسمت `Bindings` رو پیدا کنید، `Add` بزنید و `KV Namespace` رو انتخاب کنید، `Variable name` باید حتما `kv` باشه (همینجوری که نوشتم) و `KV namespace` اون KV رو انتخاب میکنید که مرحله دو ساختید و `save` میکنید.

<p align="center">
<img src="assets/images/Pages_bind_kv.jpg">
</p>

خب کارمون با KV تموم شد.

تو همین قسمت `Settings` بخش `Variables and Secrets` رو میبینید، `Add variable` بزنید خونه اول `UUID` با حروف بزرگ، UUID رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید. یک بار دیگه `Add variable` بزنید خونه اول `TROJAN_PASS` با حروف بزرگ، پسورد Trojan رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید.
تو همین قسمت `Settings` بخش `Variables and Secrets` رو میبینید، `Add variable` بزنید خونه اول `UUID` با حروف بزرگ، UUID رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید. یک بار دیگه `Add variable` بزنید خونه اول `TR_PASS` با حروف بزرگ، پسورد Trojan رو هم میتونید از همون لینک مرحله قبل بگیرید و کپی کنید قسمت Value و `Save` کنید.

خب حالا از بالای صفحه `Create deployment` رو بزنید و دوباره مثل قبل همون فایل zip رو آپلود کنید.

Expand Down
6 changes: 3 additions & 3 deletions docs/worker_installation_fa.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@
<img src="assets/images/Nav_dash_kv.jpg">
</p>

تو قسمت KV بزنید `Create a namespace` و یه اسم دلخواه وارد کنید مثلا Test و `Add` کنید.
تو قسمت KV بزنید `Create` و یه اسم دلخواه وارد کنید مثلا Test و `Add` کنید.

دوباره از منوی سمت چپ به قسمت `Workers & Pages` برید، ورکری که ساختید رو باز کنید، برید به قسمت `Settings` و `Bindings` رو پیدا کنید. `Add` بزنید و `KV Namespace` رو انتخاب کنید، مطابق تصویر زیر از کشویی پایینی اون KV که ساخته بودید انتخاب کنید (در مثال Test بود). چیزی که مهمه کشویی بالاییه، حتما باید مقدارش رو بذارید `bpb` و `Deploy` کنید.
دوباره از منوی سمت چپ به قسمت `Workers & Pages` برید، ورکری که ساختید رو باز کنید، برید به قسمت `Settings` و `Bindings` رو پیدا کنید. `Add` بزنید و `KV Namespace` رو انتخاب کنید، مطابق تصویر زیر از کشویی پایینی اون KV که ساخته بودید انتخاب کنید (در مثال Test بود). چیزی که مهمه کشویی بالاییه، حتما باید مقدارش رو بذارید `kv` و `Deploy` کنید.
<p align="center">
<img src="assets/images/Bind_kv.jpg">
</p>

تو همین قسمت `Settings` بخش `Variables and Secrets` رو میبینید، `Add variable` بزنید خونه اول `UUID` با حروف بزرگ، UUID رو هم میتونید از همون لینکی که باز کرده بودید کپی کنید قسمت Value و `Deploy` کنید. یک بار دیگه `Add variable` بزنید خونه اول `TROJAN_PASS` با حروف بزرگ، پسورد Trojan رو هم میتونید از همون لینک بگیرید و کپی کنید قسمت Value و `Deploy` کنید.
تو همین قسمت `Settings` بخش `Variables and Secrets` رو میبینید، `Add variable` بزنید خونه اول `UUID` با حروف بزرگ، UUID رو هم میتونید از همون لینکی که باز کرده بودید کپی کنید قسمت Value و `Deploy` کنید. یک بار دیگه `Add variable` بزنید خونه اول `TR_PASS` با حروف بزرگ، پسورد Trojan رو هم میتونید از همون لینک بگیرید و کپی کنید قسمت Value و `Deploy` کنید.

برای مثال، فرض کنید دامنه‌ی ورکر شما هست worker-polished-leaf-d022.workers.dev، یه `panel/` تهش اضافه کنید و وارد پنل بشید. مثال:

Expand Down
9 changes: 9 additions & 0 deletions obfs-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"deadCodeInjection": true,
"deadCodeInjectionThreshold": 0.4,
"renameGlobals": true,
"splitStrings": true,
"splitStringsChunkLength": 2,
"transformObjectKeys": true,
"target": "node"
}
12 changes: 6 additions & 6 deletions src/authentication/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import { renderLoginPage } from '../pages/login';

async function generateJWTToken (request, env) {
const password = await request.text();
const savedPass = await env.bpb.get('pwd');
const savedPass = await env.kv.get('pwd');
if (password !== savedPass) return new Response('Method Not Allowed', { status: 405 });
let secretKey = await env.bpb.get('secretKey');
let secretKey = await env.kv.get('secretKey');
if (!secretKey) {
secretKey = generateSecretKey();
await env.bpb.put('secretKey', secretKey);
await env.kv.put('secretKey', secretKey);
}
const secret = new TextEncoder().encode(secretKey);
const jwtToken = await new SignJWT({ userID: globalThis.userID })
Expand All @@ -34,7 +34,7 @@ function generateSecretKey () {

export async function Authenticate (request, env) {
try {
const secretKey = await env.bpb.get('secretKey');
const secretKey = await env.kv.get('secretKey');
const secret = new TextEncoder().encode(secretKey);
const cookie = request.headers.get('Cookie')?.match(/(^|;\s*)jwtToken=([^;]*)/);
const token = cookie ? cookie[2] : null;
Expand Down Expand Up @@ -65,11 +65,11 @@ export function logout() {

export async function resetPassword(request, env) {
let auth = await Authenticate(request, env);
const oldPwd = await env.bpb.get('pwd');
const oldPwd = await env.kv.get('pwd');
if (oldPwd && !auth) return new Response('Unauthorized!', { status: 401 });
const newPwd = await request.text();
if (newPwd === oldPwd) return new Response('Please enter a new Password!', { status: 400 });
await env.bpb.put('pwd', newPwd);
await env.kv.put('pwd', newPwd);
return new Response('Success', {
status: 200,
headers: {
Expand Down
37 changes: 18 additions & 19 deletions src/cores-configs/clash.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,21 @@ async function buildClashDNS (proxySettings, isChain, isWarp) {
const {
remoteDNS,
localDNS,
vlessTrojanFakeDNS,
VLTRFakeDNS,
outProxyParams,
enableIPv6,
warpFakeDNS,
warpEnableIPv6,
bypassIran,
bypassChina,
bypassRussia,
customBypassRules,
customBlockRules
customBypassRules
} = proxySettings;

const warpRemoteDNS = warpEnableIPv6
? ["1.1.1.1", "1.0.0.1", "[2606:4700:4700::1111]", "[2606:4700:4700::1001]"]
: ["1.1.1.1", "1.0.0.1"];
const isFakeDNS = (vlessTrojanFakeDNS && !isWarp) || (warpFakeDNS && isWarp);
const isFakeDNS = (VLTRFakeDNS && !isWarp) || (warpFakeDNS && isWarp);
const isIPv6 = (enableIPv6 && !isWarp) || (warpEnableIPv6 && isWarp);
const customBypassRulesDomains = customBypassRules.split(',').filter(address => isDomain(address));
const isBypass = bypassIran || bypassChina || bypassRussia;
Expand Down Expand Up @@ -248,7 +247,7 @@ function buildClashRoutingRules (proxySettings) {
return { rules, ruleProviders };
}

function buildClashVLESSOutbound (remark, address, port, host, sni, path, allowInsecure) {
function buildClashVLOutbound (remark, address, port, host, sni, path, allowInsecure) {
const tls = globalThis.defaultHttpsPorts.includes(port) ? true : false;
const addr = isIPv6(address) ? address.replace(/\[|\]/g, '') : address;
const outbound = {
Expand Down Expand Up @@ -280,14 +279,14 @@ function buildClashVLESSOutbound (remark, address, port, host, sni, path, allowI
return outbound;
}

function buildClashTrojanOutbound (remark, address, port, host, sni, path, allowInsecure) {
function buildClashTROutbound (remark, address, port, host, sni, path, allowInsecure) {
const addr = isIPv6(address) ? address.replace(/\[|\]/g, '') : address;
return {
"name": remark,
"type": "trojan",
"server": addr,
"port": +port,
"password": globalThis.trojanPassword,
"password": globalThis.TRPassword,
"network": "ws",
"udp": true,
"ws-opts": {
Expand Down Expand Up @@ -461,14 +460,14 @@ export async function getClashNormalConfig (request, env) {
cleanIPs,
proxyIP,
ports,
vlessConfigs,
trojanConfigs,
VLConfigs,
TRConfigs,
outProxy,
outProxyParams,
customCdnAddrs,
customCdnHost,
customCdnSni,
bestVLESSTrojanInterval,
bestVLTRInterval,
enableIPv6
} = proxySettings;

Expand All @@ -479,7 +478,7 @@ export async function getClashNormalConfig (request, env) {
} catch (error) {
console.log('An error occured while parsing chain proxy: ', error);
chainProxy = undefined;
await env.bpb.put("proxySettings", JSON.stringify({
await env.kv.put("proxySettings", JSON.stringify({
...proxySettings,
outProxy: '',
outProxyParams: {}
Expand All @@ -503,21 +502,21 @@ export async function getClashNormalConfig (request, env) {
const urlTest = config['proxy-groups'][1];
selector.proxies = ['💦 Best Ping 💥'];
urlTest.name = '💦 Best Ping 💥';
urlTest.interval = +bestVLESSTrojanInterval;
urlTest.interval = +bestVLTRInterval;
const Addresses = await getConfigAddresses(cleanIPs, enableIPv6);
const customCdnAddresses = customCdnAddrs ? customCdnAddrs.split(',') : [];
const totalAddresses = [...Addresses, ...customCdnAddresses];
let proxyIndex = 1, path;
const protocols = [
...(vlessConfigs ? ['VLESS'] : []),
...(trojanConfigs ? ['Trojan'] : [])
...(VLConfigs ? ['VLESS'] : []),
...(TRConfigs ? ['Trojan'] : [])
];

protocols.forEach ( protocol => {
let protocolIndex = 1;
ports.forEach ( port => {
totalAddresses.forEach( addr => {
let VLESSOutbound, TrojanOutbound;
let VLOutbound, TROutbound;
const isCustomAddr = customCdnAddresses.includes(addr);
const configType = isCustomAddr ? 'C' : '';
const sni = isCustomAddr ? customCdnSni : randomUpperCase(globalThis.hostName);
Expand All @@ -526,7 +525,7 @@ export async function getClashNormalConfig (request, env) {

if (protocol === 'VLESS') {
path = `/${getRandomPath(16)}${proxyIP ? `/${btoa(proxyIP)}` : ''}`;
VLESSOutbound = buildClashVLESSOutbound(
VLOutbound = buildClashVLOutbound(
chainProxy ? `proxy-${proxyIndex}` : remark,
addr,
port,
Expand All @@ -535,14 +534,14 @@ export async function getClashNormalConfig (request, env) {
path,
isCustomAddr
);
config.proxies.push(VLESSOutbound);
config.proxies.push(VLOutbound);
selector.proxies.push(remark);
urlTest.proxies.push(remark);
}

if (protocol === 'Trojan' && globalThis.defaultHttpsPorts.includes(port)) {
path = `/tr${getRandomPath(16)}${proxyIP ? `/${btoa(proxyIP)}` : ''}`;
TrojanOutbound = buildClashTrojanOutbound(
TROutbound = buildClashTROutbound(
chainProxy ? `proxy-${proxyIndex}` : remark,
addr,
port,
Expand All @@ -551,7 +550,7 @@ export async function getClashNormalConfig (request, env) {
path,
isCustomAddr
);
config.proxies.push(TrojanOutbound);
config.proxies.push(TROutbound);
selector.proxies.push(remark);
urlTest.proxies.push(remark);
}
Expand Down
Loading

0 comments on commit 4792e4b

Please sign in to comment.