Siavash Sameni
4cdcc4e6c4
Public btest server: byte budget, multi-conn, web dashboard, quotas
...
- Inline byte budget in BandwidthState prevents quota overshoot at any
link speed (TX/RX loops check per-packet, not per-interval)
- TCP multi-connection support for server-pro (session tokens, secondary
connection joins, delegates to standard multi-conn handler)
- MD5 password verification against stored raw passwords in user DB
- Web dashboard: quota progress bars (daily/weekly/monthly), JSON export
endpoint (/api/ip/{ip}/export), quota API (/api/ip/{ip}/quota)
- Landing page with usage instructions, UDP NAT warning, credentials
- Fix IP usage double-counting bug in QuotaManager::record_usage
- UserDb now stores DB path and raw passwords for MD5 auth
- 10 enforcer tests (4 new: budget calc, budget stop, budget exhausted,
unlimited passthrough)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-01 18:43:09 +04:00
Siavash Sameni
2087e5a75f
Public server: separate in/out IP quotas, web dashboard scaffold, test intervals
...
3 agents worked in parallel:
1. DB schema (user_db.rs):
- ip_usage: inbound_bytes/outbound_bytes columns (renamed from tx/rx)
- test_intervals table for per-second graphing data
- Directional methods: get_ip_daily_inbound/outbound, record_ip_inbound/outbound
- Query methods: get_session_intervals, get_ip_sessions, get_ip_stats
- New structs: IntervalData, SessionSummary, IpStats
2. Quota (quota.rs):
- Direction enum (Inbound/Outbound/Both)
- 6 new directional IP limits (daily/weekly/monthly × in/out)
- check_ip() now takes direction parameter
- record_usage() takes (inbound_bytes, outbound_bytes)
3. Web dashboard (web/):
- Stub router with axum (will be expanded)
- Templates: index.html + dashboard.html with Chart.js
- Dependencies: axum, tower-http, serde, serde_json, askama (optional, pro feature)
CLI additions:
--ip-daily-in, --ip-daily-out, --web-port, --shared-password
64 tests, all passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-01 16:30:18 +04:00
Siavash Sameni
d61fdb1b94
Add monthly quotas, per-IP limits, user management CLI
...
Quota system now supports:
- Per-user: daily, weekly, monthly limits
- Per-IP: daily, weekly, monthly limits (abuse prevention)
- Per-IP connection limit
- Max test duration
New CLI flags:
--monthly-quota, --ip-daily, --ip-weekly, --ip-monthly
User management subcommands:
btest-server-pro useradd <user> <pass>
btest-server-pro userdel <user>
btest-server-pro userlist
btest-server-pro userset <user> --enabled true/false --daily N --weekly N
New DB tables: ip_usage (per-IP daily tracking)
New methods: get_monthly_usage, get_ip_*_usage, start/end_session,
delete_user, set_user_enabled, set_user_quota
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-01 14:58:19 +04:00
Siavash Sameni
d2fdc9c6ae
Scaffold btest-server-pro: multi-user, quotas, LDAP
...
New binary `btest-server-pro` (build with --features pro):
cargo build --release --features pro --bin btest-server-pro
Modules:
- server_pro/user_db.rs: SQLite user database with usage tracking
- Users table (username, password_hash, quotas, enabled)
- Usage table (daily bytes per user)
- Sessions table (per-connection tracking)
- server_pro/quota.rs: bandwidth quota enforcement
- Per-user daily/weekly limits
- Per-IP connection limits
- Max test duration
- server_pro/ldap_auth.rs: LDAP/AD authentication via ldap3
- Simple bind authentication
- Service account search for user DN
CLI flags: --users-db, --ldap-url, --ldap-base-dn, --ldap-bind-dn,
--ldap-bind-pass, --daily-quota, --weekly-quota, --max-conn-per-ip,
--max-duration
Binary sizes: btest=1.8MB, btest-server-pro=3.4MB (SQLite bundled)
Standard btest binary unchanged, 58 tests pass.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-01 14:33:36 +04:00