|
@@ -48,6 +48,7 @@ func (a *ClientController) initRouter(g *gin.RouterGroup) {
|
|
|
g.GET("/list", a.list)
|
|
g.GET("/list", a.list)
|
|
|
g.GET("/list/paged", a.listPaged)
|
|
g.GET("/list/paged", a.listPaged)
|
|
|
g.GET("/get/:email", a.get)
|
|
g.GET("/get/:email", a.get)
|
|
|
|
|
+ g.GET("/get/tgId/:tgId", a.getByTgId)
|
|
|
g.GET("/traffic/:email", a.getTrafficByEmail)
|
|
g.GET("/traffic/:email", a.getTrafficByEmail)
|
|
|
g.GET("/subLinks/:subId", a.getSubLinks)
|
|
g.GET("/subLinks/:subId", a.getSubLinks)
|
|
|
g.GET("/links/:email", a.getClientLinks)
|
|
g.GET("/links/:email", a.getClientLinks)
|
|
@@ -105,6 +106,32 @@ func (a *ClientController) listPaged(c *gin.Context) {
|
|
|
jsonObj(c, resp, nil)
|
|
jsonObj(c, resp, nil)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (a *ClientController) buildClientPayload(rec *model.ClientRecord) (gin.H, error) {
|
|
|
|
|
+ inboundIds, err := a.clientService.GetInboundIdsForRecord(rec.Id)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ externalLinks, err := a.clientService.GetExternalLinksForRecord(rec.Id)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ flow, err := a.clientService.EffectiveFlow(nil, rec.Id)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ rec.Flow = flow
|
|
|
|
|
+ var usedTraffic int64
|
|
|
|
|
+ if t, tErr := a.inboundService.GetClientTrafficByEmail(rec.Email); tErr == nil && t != nil {
|
|
|
|
|
+ usedTraffic = t.Up + t.Down
|
|
|
|
|
+ }
|
|
|
|
|
+ return gin.H{
|
|
|
|
|
+ "client": rec,
|
|
|
|
|
+ "inboundIds": inboundIds,
|
|
|
|
|
+ "externalLinks": externalLinks,
|
|
|
|
|
+ "usedTraffic": usedTraffic,
|
|
|
|
|
+ }, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (a *ClientController) get(c *gin.Context) {
|
|
func (a *ClientController) get(c *gin.Context) {
|
|
|
email := c.Param("email")
|
|
email := c.Param("email")
|
|
|
rec, err := a.clientService.GetRecordByEmail(nil, email)
|
|
rec, err := a.clientService.GetRecordByEmail(nil, email)
|
|
@@ -112,30 +139,36 @@ func (a *ClientController) get(c *gin.Context) {
|
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- inboundIds, err := a.clientService.GetInboundIdsForRecord(rec.Id)
|
|
|
|
|
|
|
+ payload, err := a.buildClientPayload(rec)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- externalLinks, err := a.clientService.GetExternalLinksForRecord(rec.Id)
|
|
|
|
|
|
|
+ jsonObj(c, payload, nil)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (a *ClientController) getByTgId(c *gin.Context) {
|
|
|
|
|
+ tgIdStr := c.Param("tgId")
|
|
|
|
|
+ tgId, err := strconv.ParseInt(tgIdStr, 10, 64)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- flow, err := a.clientService.EffectiveFlow(nil, rec.Id)
|
|
|
|
|
|
|
+ records, err := a.clientService.GetRecordsByTgID(tgId)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.obtain"), err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- rec.Flow = flow
|
|
|
|
|
- // Consumed bytes (up+down, including cross-node global overlay) so API
|
|
|
|
|
- // consumers can pair usage with the client's totalGB quota (#4973).
|
|
|
|
|
- // Best-effort: a traffic lookup failure must not break the client fetch.
|
|
|
|
|
- var usedTraffic int64
|
|
|
|
|
- if t, tErr := a.inboundService.GetClientTrafficByEmail(email); tErr == nil && t != nil {
|
|
|
|
|
- usedTraffic = t.Up + t.Down
|
|
|
|
|
|
|
+ results := make([]gin.H, 0, len(records))
|
|
|
|
|
+ for _, rec := range records {
|
|
|
|
|
+ payload, err := a.buildClientPayload(rec)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ jsonMsg(c, I18nWeb(c, "get"), err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ results = append(results, payload)
|
|
|
}
|
|
}
|
|
|
- jsonObj(c, gin.H{"client": rec, "inboundIds": inboundIds, "externalLinks": externalLinks, "usedTraffic": usedTraffic}, nil)
|
|
|
|
|
|
|
+ jsonObj(c, results, nil)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (a *ClientController) create(c *gin.Context) {
|
|
func (a *ClientController) create(c *gin.Context) {
|