mirror of
https://github.com/MirageNetwork/MirageServer.git
synced 2025-09-26 20:41:34 +08:00
121 lines
2.7 KiB
Go
121 lines
2.7 KiB
Go
package controller
|
|
|
|
import (
|
|
_ "embed"
|
|
"net/http"
|
|
)
|
|
|
|
// 网络设置响应Data体
|
|
type SubscriptionResData struct {
|
|
BillingUsage BillingUsageData `json:"billingUsage"`
|
|
}
|
|
|
|
type BillingUsageData struct {
|
|
Usage UsageList `json:"usage"`
|
|
Allowance AllowanceList `json:"allowance"`
|
|
ReferralDeviceCredit int `json:"referralDeviceCredit"`
|
|
}
|
|
|
|
type UsageList struct {
|
|
Users int `json:"users"`
|
|
AdminUsers int `json:"admin_users"`
|
|
AclNamedUsers int `json:"acl_named_users"`
|
|
Devices int `json:"devices"`
|
|
Subnets int `json:"subnets"`
|
|
}
|
|
|
|
type AllowanceList struct {
|
|
Users Allowance `json:"users"`
|
|
AdminUsers Allowance `json:"admin_users"`
|
|
AclNamedUsers Allowance `json:"acl_named_users"`
|
|
Devices Allowance `json:"devices"`
|
|
Subnets Allowance `json:"subnets"`
|
|
}
|
|
|
|
type Allowance struct {
|
|
Total struct {
|
|
Amount int `json:"amount"`
|
|
Unlimited bool `json:"unlimited"`
|
|
} `json:"total"`
|
|
}
|
|
|
|
// 查询订阅用量API
|
|
func (h *Mirage) CAPIGetSubscription(
|
|
w http.ResponseWriter,
|
|
r *http.Request,
|
|
) {
|
|
user, err := h.verifyTokenIDandGetUser(w, r)
|
|
if err != nil || user.CheckEmpty() {
|
|
h.doAPIResponse(w, "用户信息核对失败:"+err.Error(), nil)
|
|
return
|
|
}
|
|
|
|
unlimitAllowance := Allowance{
|
|
Total: struct {
|
|
Amount int `json:"amount"`
|
|
Unlimited bool `json:"unlimited"`
|
|
}{
|
|
Amount: 65535,
|
|
Unlimited: true,
|
|
},
|
|
}
|
|
|
|
allowanceList := AllowanceList{
|
|
Users: unlimitAllowance,
|
|
AdminUsers: unlimitAllowance,
|
|
AclNamedUsers: unlimitAllowance,
|
|
Devices: unlimitAllowance,
|
|
Subnets: unlimitAllowance,
|
|
}
|
|
|
|
orgUsers, err := h.ListOrgUsers(user.OrganizationID)
|
|
if err != nil {
|
|
h.doAPIResponse(w, "获取组织用户信息失败", nil)
|
|
return
|
|
}
|
|
orgMachines, err := h.ListMachinesByOrgID(user.OrganizationID)
|
|
if err != nil {
|
|
h.doAPIResponse(w, "获取组织设备信息失败", nil)
|
|
return
|
|
}
|
|
|
|
userNum := 0
|
|
adminUserNum := 0
|
|
devNum := 0
|
|
subnetNum := 0
|
|
if orgUsers != nil {
|
|
userNum = len(orgUsers)
|
|
for _, u := range orgUsers {
|
|
if u.Role == RoleOwner { //TODO
|
|
adminUserNum++
|
|
}
|
|
}
|
|
}
|
|
if orgMachines != nil {
|
|
devNum = len(orgMachines)
|
|
for _, m := range orgMachines {
|
|
routes, err := h.GetEnabledRoutes(&m)
|
|
if err != nil && routes != nil && len(routes) > 0 {
|
|
subnetNum++
|
|
}
|
|
}
|
|
}
|
|
|
|
usageList := UsageList{
|
|
Users: userNum,
|
|
AdminUsers: adminUserNum,
|
|
AclNamedUsers: 0, //TODO
|
|
Devices: devNum,
|
|
Subnets: subnetNum,
|
|
}
|
|
|
|
subscriptionData := SubscriptionResData{
|
|
BillingUsage: BillingUsageData{
|
|
Usage: usageList,
|
|
Allowance: allowanceList,
|
|
ReferralDeviceCredit: 0,
|
|
},
|
|
}
|
|
h.doAPIResponse(w, "", subscriptionData)
|
|
}
|