mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-05-23 04:39:52 +03:00
138 lines
3.4 KiB
Go
138 lines
3.4 KiB
Go
package server
|
|
|
|
import (
|
|
CM "github.com/sagernet/sing-box/service/manager/constant"
|
|
pb "github.com/sagernet/sing-box/service/manager_api/grpc/manager"
|
|
)
|
|
|
|
func toIntSlice(values []int32) []int {
|
|
out := make([]int, len(values))
|
|
for i, v := range values {
|
|
out[i] = int(v)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func toInt32Slice(values []int) []int32 {
|
|
out := make([]int32, len(values))
|
|
for i, v := range values {
|
|
out[i] = int32(v)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func convertSquad(v CM.Squad) *pb.Squad {
|
|
return &pb.Squad{
|
|
Id: int32(v.ID),
|
|
Name: v.Name,
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertNode(v CM.Node) *pb.Node {
|
|
return &pb.Node{
|
|
Uuid: v.UUID,
|
|
Name: v.Name,
|
|
SquadIds: toInt32Slice(v.SquadIDs),
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertUser(v CM.User) *pb.User {
|
|
return &pb.User{
|
|
Id: int32(v.ID),
|
|
SquadIds: toInt32Slice(v.SquadIDs),
|
|
Username: v.Username,
|
|
Inbound: v.Inbound,
|
|
Type: v.Type,
|
|
Uuid: v.UUID,
|
|
Password: v.Password,
|
|
Secret: v.Secret,
|
|
Flow: v.Flow,
|
|
AlterId: int32(v.AlterID),
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertBandwidthLimiter(v CM.BandwidthLimiter) *pb.BandwidthLimiter {
|
|
return &pb.BandwidthLimiter{
|
|
Id: int32(v.ID),
|
|
SquadIds: toInt32Slice(v.SquadIDs),
|
|
Username: v.Username,
|
|
Outbound: v.Outbound,
|
|
Strategy: v.Strategy,
|
|
ConnectionType: v.ConnectionType,
|
|
Mode: v.Mode,
|
|
FlowKeys: v.FlowKeys,
|
|
Speed: v.Speed,
|
|
RawSpeed: v.RawSpeed,
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertTrafficLimiter(v CM.TrafficLimiter) *pb.TrafficLimiter {
|
|
return &pb.TrafficLimiter{
|
|
Id: int32(v.ID),
|
|
SquadIds: toInt32Slice(v.SquadIDs),
|
|
Username: v.Username,
|
|
Outbound: v.Outbound,
|
|
Strategy: v.Strategy,
|
|
Mode: v.Mode,
|
|
RawUsed: v.RawUsed,
|
|
Quota: v.Quota,
|
|
RawQuota: v.RawQuota,
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertConnectionLimiter(v CM.ConnectionLimiter) *pb.ConnectionLimiter {
|
|
return &pb.ConnectionLimiter{
|
|
Id: int32(v.ID),
|
|
SquadIds: toInt32Slice(v.SquadIDs),
|
|
Username: v.Username,
|
|
Outbound: v.Outbound,
|
|
Strategy: v.Strategy,
|
|
ConnectionType: v.ConnectionType,
|
|
LockType: v.LockType,
|
|
Count: v.Count,
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertRateLimiter(v CM.RateLimiter) *pb.RateLimiter {
|
|
return &pb.RateLimiter{
|
|
Id: int32(v.ID),
|
|
SquadIds: toInt32Slice(v.SquadIDs),
|
|
Username: v.Username,
|
|
Outbound: v.Outbound,
|
|
Strategy: v.Strategy,
|
|
ConnectionType: v.ConnectionType,
|
|
Count: v.Count,
|
|
Interval: v.Interval,
|
|
CreatedAt: v.CreatedAt.UnixNano(),
|
|
UpdatedAt: v.UpdatedAt.UnixNano(),
|
|
}
|
|
}
|
|
|
|
func convertFilters(req *pb.Filters) map[string][]string {
|
|
filters := map[string][]string{}
|
|
for k, v := range req.GetValues() {
|
|
filters[k] = append([]string(nil), v.GetValues()...)
|
|
}
|
|
return filters
|
|
}
|
|
|
|
func convertListFilters(req *pb.Filters) map[string][]string {
|
|
filters := convertFilters(req)
|
|
if _, ok := filters["limit"]; !ok {
|
|
filters["limit"] = []string{"100"}
|
|
}
|
|
return filters
|
|
}
|