mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-24 03:47:15 +00:00
feat(mtproto): enforce per-client quota & expiry via mtg-multi limits
Map each mtproto client's totalGB and expiryTime onto mtg-multi's new
[secret-limits] (quota/expires): emit them into the generated config and
hot-apply through PUT /secrets so live connections survive. Quota is
written as an exact "<n>B" byte count that round-trips through both the
config and API parsers without the precision loss of a base-2 unit.
The sidecar's quota counter is not pruned when a secret is dropped, so a
panel-side traffic reset re-pushes the client's secret and then calls
POST /secrets/{name}/reset-quota (wired into every reset path) so a
renewed client is not immediately re-blocked.
Resolve the mtg-multi binary from the fork's latest release tag in
DockerInit.sh and release.yml instead of a hardcoded version pin, so the
panel no longer needs a manual bump per fork release.
This commit is contained in:
@@ -15,10 +15,13 @@ file locations when it can answer in one hop.
|
||||
(`github.com/mhsanaei/mtg-multi`, a multi-secret fork built from source;
|
||||
`internal/mtproto/`) — outside Xray, one process per inbound serving each
|
||||
client's FakeTLS secret via the fork's `[secrets]` section (plus per-client
|
||||
ad-tags via `[secret-ad-tags]`). Client and ad-tag edits are hot-applied
|
||||
through the fork's management API (`PUT /secrets`, bearer-token guarded) so
|
||||
connections survive; the manager falls back to a process restart on older
|
||||
binaries.
|
||||
ad-tags via `[secret-ad-tags]` and per-client data quota / expiry via
|
||||
`[secret-limits]`, mapped from the client's `totalGB`/`expiryTime`). Client,
|
||||
ad-tag and quota/expiry edits are hot-applied through the fork's management API
|
||||
(`PUT /secrets`, bearer-token guarded) so connections survive; the manager
|
||||
falls back to a process restart on older binaries. A client's panel-side
|
||||
traffic reset also calls `POST /secrets/{name}/reset-quota` so a renewed client
|
||||
is not re-blocked by the sidecar's quota counter.
|
||||
- Storage: SQLite by default (`/etc/x-ui/x-ui.db` on Linux; the executable dir on
|
||||
Windows), PostgreSQL optional (`XUI_DB_TYPE` / `XUI_DB_DSN`). The CGo SQLite
|
||||
driver (`mattn/go-sqlite3`) needs a C compiler — `CGO_ENABLED=0` builds fail.
|
||||
|
||||
Reference in New Issue
Block a user