Documentation
¶
Overview ¶
Package sub builds the per-user subscription: the machine payload consumed by VPN clients and the human-facing page (QR + one-tap import buttons).
Index ¶
- func AppRedirect(href template.URL) ([]byte, error)
- func Base64Payload(links []string) string
- func ClashWithTemplate(u model.User, set *model.Settings, template string) string
- func ClashWithTemplateMulti(u model.User, sets []*model.Settings, template string) string
- func ClashYAML(u model.User, set *model.Settings) string
- func ClashYAMLMulti(u model.User, sets []*model.Settings) string
- func Logo() []byte
- func Page(u model.User, sets []*model.Settings, billing Billing) ([]byte, error)
- func ShareLinks(u model.User, set *model.Settings) []string
- func ShareLinksAll(u model.User, sets []*model.Settings) []string
- func SingBoxJSON(u model.User, set *model.Settings) string
- func SingBoxJSONMulti(u model.User, sets []*model.Settings) string
- func SubTitle(u model.User, set *model.Settings) string
- func URL(set *model.Settings, token string) string
- type Billing
- type BillingPay
- type BillingPlan
- type DeepLink
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AppRedirect ¶ added in v0.11.0
AppRedirect renders the deep-link hand-off page for one client's share link.
func Base64Payload ¶
Base64Payload is the universal v2ray-style subscription body: the links joined by newlines, base64-encoded. Consumed by v2rayNG, Hiddify, Streisand, NekoBox, Shadowrocket, etc.
func ClashWithTemplate ¶
ClashWithTemplate injects the user's proxies into a RoscomVPN-style Mihomo routing template. The template carries two "# LEAVE THIS LINE!" markers: the `proxies:` line (full proxy definitions) and a slot inside the main select group (proxy node names). Falls back to the plain config if the template has no proxies marker.
func ClashWithTemplateMulti ¶ added in v1.0.0
ClashWithTemplateMulti is ClashWithTemplate across every server.
func ClashYAMLMulti ¶ added in v1.0.0
ClashYAMLMulti renders a Clash-Meta (Mihomo) config spanning every server: all proxies under one select group. sets[0] is the local server (group title + rules).
func Page ¶
Page renders the human-facing subscription page (usage stats, QR of the sub URL, copy button, per-client import buttons, and the raw links). Page renders the human-facing subscription page. sets spans every server the user is on — the local one plus each enabled node — so the "individual configs" list shows one labelled entry per protocol × server (with a single server it's unchanged). sets[0] is the local server, used for the sub URL, branding and billing.
func ShareLinks ¶
ShareLinks returns the enabled protocol links for a user, in client-import order. Protocols switched off in the Connections panel are omitted.
func ShareLinksAll ¶ added in v1.0.0
ShareLinksAll concatenates the protocol links for a user across every server — the local one plus each enabled node — so a subscription carries one entry per protocol × server. Each settings clone carries its own host/ports/keys and a NodeLabel that disambiguates the links. With a single (local) server the output is identical to ShareLinks.
func SingBoxJSON ¶
SingBoxJSON renders an importable sing-box configuration for a single server.
func SingBoxJSONMulti ¶ added in v1.0.0
SingBoxJSONMulti renders a sing-box config spanning every server (local + each node): one outbound per protocol × server, all gathered under the selector/ urltest groups. sets[0] is the local server, used for the group title + DNS bootstrap anchor.
Types ¶
type Billing ¶ added in v0.11.0
type Billing struct {
Show bool
CurrentPlan string // active plan name ("" = none / manual)
ExpireText string // "до DD.MM.YYYY" for a paid expiry, else ""
Plans []BillingPlan // paid plans offered for purchase/renewal
Providers []BillingPay // enabled payment methods (empty ⇒ manual only)
Manual bool // no automatic provider ⇒ pay button creates a manual order
Note string // manual-payment instructions when no provider is set
PayPath string // POST target that starts a payment (<SubURL>/pay)
OrderPath string // GET target that reports a pending provider payment (<SubURL>/order)
// Locked is true while a paid plan is active: only that plan (renewal) is shown,
// switching to another is blocked, and Cancelable offers cancellation instead.
Locked bool
Cancelable bool
CancelPath string // POST target that cancels the active plan (<SubURL>/cancel)
}
Billing is the optional "renew / pay" block on the subscription page. It's built by the server (which has plan + payment-provider access) and left zero (Show false) when billing is off or no paid plans exist.
type BillingPay ¶ added in v0.11.0
BillingPay is one payment method the user can choose.
type BillingPlan ¶ added in v0.11.0
type BillingPlan struct {
ID int64
Name string
Label string // price + period, e.g. "199 ₽ / 30 дн."
Current bool // the user's currently active plan
}
BillingPlan is one purchasable paid tariff shown on the page.