Files
EdgeAdmin/internal/web/actions/default/servers/ipbox/index.go
2023-08-24 12:22:16 +08:00

140 lines
3.4 KiB
Go

// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package ipbox
import (
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/iplibrary"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/maps"
timeutil "github.com/iwind/TeaGo/utils/time"
"time"
)
type IndexAction struct {
actionutils.ParentAction
}
func (this *IndexAction) Init() {
this.Nav("", "", "")
}
func (this *IndexAction) RunGet(params struct {
Ip string
}) {
this.Data["ip"] = params.Ip
// IP信息
this.Data["regions"] = ""
this.Data["isp"] = ""
var ipRegion = iplibrary.LookupIP(params.Ip)
if ipRegion != nil && ipRegion.IsOk() {
this.Data["regions"] = ipRegion.RegionSummary()
this.Data["isp"] = ipRegion.ProviderName()
}
// IP列表
ipListResp, err := this.RPC().IPListRPC().FindEnabledIPListContainsIP(this.AdminContext(), &pb.FindEnabledIPListContainsIPRequest{
Ip: params.Ip,
})
if err != nil {
this.ErrorPage(err)
return
}
var ipListMaps = []maps.Map{}
for _, ipList := range ipListResp.IpLists {
itemsResp, err := this.RPC().IPItemRPC().ListIPItemsWithListId(this.AdminContext(), &pb.ListIPItemsWithListIdRequest{
IpListId: ipList.Id,
Keyword: "",
IpFrom: params.Ip,
IpTo: "",
Offset: 0,
Size: 1,
})
if err != nil {
this.ErrorPage(err)
return
}
var items = itemsResp.IpItems
if len(items) == 0 {
continue
}
var item = items[0]
var expiredTime = ""
if item.ExpiredAt > 0 {
expiredTime = timeutil.FormatTime("Y-m-d H:i:s", item.ExpiredAt)
}
ipListMaps = append(ipListMaps, maps.Map{
"id": ipList.Id,
"name": ipList.Name,
"type": ipList.Type,
"itemExpiredTime": expiredTime,
"itemId": item.Id,
})
}
this.Data["ipLists"] = ipListMaps
// 所有公用的IP列表
publicBlackIPListResp, err := this.RPC().IPListRPC().ListEnabledIPLists(this.AdminContext(), &pb.ListEnabledIPListsRequest{
Type: "black",
IsPublic: true,
Keyword: "",
Offset: 0,
Size: 20, // TODO 将来考虑到支持更多的黑名单
})
if err != nil {
this.ErrorPage(err)
return
}
var publicBlackIPListMaps = []maps.Map{}
for _, ipList := range publicBlackIPListResp.IpLists {
publicBlackIPListMaps = append(publicBlackIPListMaps, maps.Map{
"id": ipList.Id,
"name": ipList.Name,
"type": ipList.Type,
})
}
this.Data["publicBlackIPLists"] = publicBlackIPListMaps
// 访问日志
var hasAccessLogs = false
Loop:
for _, day := range []string{timeutil.Format("Ymd"), timeutil.Format("Ymd", time.Now().AddDate(0, 0, -1))} {
partitionsResp, err := this.RPC().HTTPAccessLogRPC().FindHTTPAccessLogPartitions(this.AdminContext(), &pb.FindHTTPAccessLogPartitionsRequest{Day: day})
if err != nil {
this.ErrorPage(err)
return
}
for _, partition := range partitionsResp.ReversePartitions {
accessLogsResp, err := this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
Partition: partition,
Day: day,
Ip: params.Ip,
Size: 20,
})
if err != nil {
this.ErrorPage(err)
return
}
var accessLogs = accessLogsResp.HttpAccessLogs
if len(accessLogs) > 0 {
this.Data["accessLogs"] = accessLogs
hasAccessLogs = true
break Loop
}
}
}
if !hasAccessLogs {
this.Data["accessLogs"] = []interface{}{}
}
this.Show()
}