mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-21 10:27:14 +00:00
feat(sub): add per-client subscription HWID limits (#5802)
* feat(sub): add per-client subscription HWID limits * fix(sub): address HWID review on shared subId and bulk create * fix(sub): store HWID devices by sub_id and drop anchor client workaround * fix(sub): restore UA auto-detect and HTML page routing in subs() The cherry-pick of the HWID gate onto main's refactored SUBController had dropped main's UA-based format auto-detection and sub-page handling from subs(). Restore those branches, slotting enforceHwid after the HTML page and before format detection so the gate only applies to machine-readable subscription bodies. Also adapt tests to main's options-struct constructor and to the ClientService.Update signature extended with limitHwid. * fix(frontend): drop axios from HttpUtil.delete The bulk-delete rework's committed version still referenced axios, which this file no longer imports, breaking typecheck in CI. Use the httpRequest wrapper like the other verbs. --------- Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
@@ -68,6 +68,36 @@ var ErrClientNotInInbound = errors.New("client not found in inbound")
|
||||
type ClientCreatePayload struct {
|
||||
Client model.Client `json:"client"`
|
||||
InboundIds []int `json:"inboundIds"`
|
||||
LimitHwid int `json:"-"`
|
||||
}
|
||||
|
||||
const sqlInChunk = 400
|
||||
|
||||
type clientPayloadWithHwid struct {
|
||||
model.Client
|
||||
LimitHwid int `json:"limitHwid"`
|
||||
}
|
||||
|
||||
func (p *ClientCreatePayload) UnmarshalJSON(data []byte) error {
|
||||
var raw struct {
|
||||
Client clientPayloadWithHwid `json:"client"`
|
||||
InboundIds []int `json:"inboundIds"`
|
||||
}
|
||||
if err := json.Unmarshal(data, &raw); err != nil {
|
||||
return err
|
||||
}
|
||||
p.Client = raw.Client.Client
|
||||
p.InboundIds = raw.InboundIds
|
||||
p.LimitHwid = raw.Client.LimitHwid
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p ClientCreatePayload) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(struct {
|
||||
Client clientPayloadWithHwid `json:"client"`
|
||||
InboundIds []int `json:"inboundIds"`
|
||||
}{
|
||||
Client: clientPayloadWithHwid{Client: p.Client, LimitHwid: p.LimitHwid},
|
||||
InboundIds: p.InboundIds,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user