A CLI client for PKU's campus card system (Synjones platform at bdcard.pku.edu.cn).
crates/campuscard/app_id="portal2017") → portal → berserker-auth → JWTsynjones-auth headerPKUANDROID) and http1_only() (server rejects HTTP/2)src/main.rs — Clap CLI with subcommandssrc/commands.rs — Command implementationssrc/api.rs — API client with synjones-auth header injectionsrc/display.rs — Terminal output, QR code renderingsrc/client.rs — reqwest client with mobile UA and HTTP/1.1 enforcementCommandAliasFunctionlogin / logout / statusIAAA → portal → berserker → JWTinfoCard balance and detailspayDisplay payment QR code in terminalrechargeTop up card balancebills``lsTransaction history (pagination, monthly filter)statsMonthly spending statisticsotpTOTP 2FA management
bash
# Check session status
info-auth check
# Auto-login (reads credentials from OS keyring, no password needed)
campuscard login -p
PKUANDROID) or requests will be rejectedhttp1_only() — the Synjones server does not support HTTP/2info_common::qr (viuer or system viewer)anyhow::Result with .context("中文描述")~/.config/info/campuscard/info_common::credential (keyring → env → interactive)