mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-05-19 11:00:38 +03:00
466 lines
14 KiB
Go
466 lines
14 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
|
|
CM "github.com/sagernet/sing-box/service/manager/constant"
|
|
pb "github.com/sagernet/sing-box/service/manager_api/grpc/manager"
|
|
)
|
|
|
|
func (s *Server) CreateSquad(_ context.Context, req *pb.SquadCreate) (*pb.Squad, error) {
|
|
v, err := s.manager.CreateSquad(CM.SquadCreate{Name: req.GetName()})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertSquad(v), nil
|
|
}
|
|
|
|
func (s *Server) GetSquads(_ context.Context, req *pb.Filters) (*pb.SquadList, error) {
|
|
items, err := s.manager.GetSquads(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.Squad, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertSquad(v)
|
|
}
|
|
return &pb.SquadList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetSquadsCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetSquadsCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetSquad(_ context.Context, req *pb.IdRequest) (*pb.Squad, error) {
|
|
v, err := s.manager.GetSquad(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertSquad(v), nil
|
|
}
|
|
|
|
func (s *Server) UpdateSquad(_ context.Context, req *pb.SquadUpdateRequest) (*pb.Squad, error) {
|
|
v, err := s.manager.UpdateSquad(int(req.GetId()), CM.SquadUpdate{Name: req.GetUpdate().GetName()})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertSquad(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteSquad(_ context.Context, req *pb.IdRequest) (*pb.Squad, error) {
|
|
v, err := s.manager.DeleteSquad(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertSquad(v), nil
|
|
}
|
|
|
|
func (s *Server) CreateNode(_ context.Context, req *pb.NodeCreate) (*pb.Node, error) {
|
|
v, err := s.manager.CreateNode(CM.NodeCreate{
|
|
UUID: req.GetUuid(),
|
|
Name: req.GetName(),
|
|
SquadIDs: toIntSlice(req.GetSquadIds()),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertNode(v), nil
|
|
}
|
|
|
|
func (s *Server) GetNodes(_ context.Context, req *pb.Filters) (*pb.NodeList, error) {
|
|
items, err := s.manager.GetNodes(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.Node, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertNode(v)
|
|
}
|
|
return &pb.NodeList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetNodesCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetNodesCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetNode(_ context.Context, req *pb.UuidRequest) (*pb.Node, error) {
|
|
v, err := s.manager.GetNode(req.GetUuid())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertNode(v), nil
|
|
}
|
|
|
|
func (s *Server) GetNodeStatus(_ context.Context, req *pb.UuidRequest) (*pb.NodeStatusReply, error) {
|
|
status, err := s.manager.GetNodeStatus(req.GetUuid())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.NodeStatusReply{Status: status}, nil
|
|
}
|
|
|
|
func (s *Server) UpdateNode(_ context.Context, req *pb.NodeUpdateRequest) (*pb.Node, error) {
|
|
v, err := s.manager.UpdateNode(req.GetUuid(), CM.NodeUpdate{Name: req.GetUpdate().GetName()})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertNode(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteNode(_ context.Context, req *pb.UuidRequest) (*pb.Node, error) {
|
|
v, err := s.manager.DeleteNode(req.GetUuid())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertNode(v), nil
|
|
}
|
|
|
|
func (s *Server) CreateUser(_ context.Context, req *pb.UserCreate) (*pb.User, error) {
|
|
v, err := s.manager.CreateUser(CM.UserCreate{
|
|
SquadIDs: toIntSlice(req.GetSquadIds()),
|
|
Username: req.GetUsername(),
|
|
Inbound: req.GetInbound(),
|
|
Type: req.GetType(),
|
|
UUID: req.GetUuid(),
|
|
Password: req.GetPassword(),
|
|
Secret: req.GetSecret(),
|
|
Flow: req.GetFlow(),
|
|
AlterID: int(req.GetAlterId()),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertUser(v), nil
|
|
}
|
|
|
|
func (s *Server) GetUsers(_ context.Context, req *pb.Filters) (*pb.UserList, error) {
|
|
items, err := s.manager.GetUsers(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.User, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertUser(v)
|
|
}
|
|
return &pb.UserList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetUsersCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetUsersCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetUser(_ context.Context, req *pb.IdRequest) (*pb.User, error) {
|
|
v, err := s.manager.GetUser(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertUser(v), nil
|
|
}
|
|
|
|
func (s *Server) UpdateUser(_ context.Context, req *pb.UserUpdateRequest) (*pb.User, error) {
|
|
u := req.GetUpdate()
|
|
v, err := s.manager.UpdateUser(int(req.GetId()), CM.UserUpdate{
|
|
UUID: u.GetUuid(),
|
|
Password: u.GetPassword(),
|
|
Secret: u.GetSecret(),
|
|
Flow: u.GetFlow(),
|
|
AlterID: int(u.GetAlterId()),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertUser(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteUser(_ context.Context, req *pb.IdRequest) (*pb.User, error) {
|
|
v, err := s.manager.DeleteUser(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertUser(v), nil
|
|
}
|
|
|
|
func (s *Server) CreateBandwidthLimiter(_ context.Context, req *pb.BandwidthLimiterCreate) (*pb.BandwidthLimiter, error) {
|
|
v, err := s.manager.CreateBandwidthLimiter(CM.BandwidthLimiterCreate{
|
|
SquadIDs: toIntSlice(req.GetSquadIds()),
|
|
Username: req.GetUsername(),
|
|
Outbound: req.GetOutbound(),
|
|
Strategy: req.GetStrategy(),
|
|
ConnectionType: req.GetConnectionType(),
|
|
Mode: req.GetMode(),
|
|
FlowKeys: req.GetFlowKeys(),
|
|
Speed: req.GetSpeed(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertBandwidthLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) GetBandwidthLimiters(_ context.Context, req *pb.Filters) (*pb.BandwidthLimiterList, error) {
|
|
items, err := s.manager.GetBandwidthLimiters(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.BandwidthLimiter, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertBandwidthLimiter(v)
|
|
}
|
|
return &pb.BandwidthLimiterList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetBandwidthLimitersCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetBandwidthLimitersCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetBandwidthLimiter(_ context.Context, req *pb.IdRequest) (*pb.BandwidthLimiter, error) {
|
|
v, err := s.manager.GetBandwidthLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertBandwidthLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) UpdateBandwidthLimiter(_ context.Context, req *pb.BandwidthLimiterUpdateRequest) (*pb.BandwidthLimiter, error) {
|
|
u := req.GetUpdate()
|
|
v, err := s.manager.UpdateBandwidthLimiter(int(req.GetId()), CM.BandwidthLimiterUpdate{
|
|
Username: u.GetUsername(),
|
|
Outbound: u.GetOutbound(),
|
|
Strategy: u.GetStrategy(),
|
|
ConnectionType: u.GetConnectionType(),
|
|
Mode: u.GetMode(),
|
|
FlowKeys: u.GetFlowKeys(),
|
|
Speed: u.GetSpeed(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertBandwidthLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteBandwidthLimiter(_ context.Context, req *pb.IdRequest) (*pb.BandwidthLimiter, error) {
|
|
v, err := s.manager.DeleteBandwidthLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertBandwidthLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) CreateTrafficLimiter(_ context.Context, req *pb.TrafficLimiterCreate) (*pb.TrafficLimiter, error) {
|
|
v, err := s.manager.CreateTrafficLimiter(CM.TrafficLimiterCreate{
|
|
SquadIDs: toIntSlice(req.GetSquadIds()),
|
|
Username: req.GetUsername(),
|
|
Outbound: req.GetOutbound(),
|
|
Strategy: req.GetStrategy(),
|
|
Mode: req.GetMode(),
|
|
Quota: req.GetQuota(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertTrafficLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) GetTrafficLimiters(_ context.Context, req *pb.Filters) (*pb.TrafficLimiterList, error) {
|
|
items, err := s.manager.GetTrafficLimiters(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.TrafficLimiter, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertTrafficLimiter(v)
|
|
}
|
|
return &pb.TrafficLimiterList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetTrafficLimitersCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetTrafficLimitersCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetTrafficLimiter(_ context.Context, req *pb.IdRequest) (*pb.TrafficLimiter, error) {
|
|
v, err := s.manager.GetTrafficLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertTrafficLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) UpdateTrafficLimiter(_ context.Context, req *pb.TrafficLimiterUpdateRequest) (*pb.TrafficLimiter, error) {
|
|
u := req.GetUpdate()
|
|
v, err := s.manager.UpdateTrafficLimiter(int(req.GetId()), CM.TrafficLimiterUpdate{
|
|
Username: u.GetUsername(),
|
|
Outbound: u.GetOutbound(),
|
|
Strategy: u.GetStrategy(),
|
|
Mode: u.GetMode(),
|
|
Quota: u.GetQuota(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertTrafficLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteTrafficLimiter(_ context.Context, req *pb.IdRequest) (*pb.TrafficLimiter, error) {
|
|
v, err := s.manager.DeleteTrafficLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertTrafficLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) CreateConnectionLimiter(_ context.Context, req *pb.ConnectionLimiterCreate) (*pb.ConnectionLimiter, error) {
|
|
v, err := s.manager.CreateConnectionLimiter(CM.ConnectionLimiterCreate{
|
|
SquadIDs: toIntSlice(req.GetSquadIds()),
|
|
Username: req.GetUsername(),
|
|
Outbound: req.GetOutbound(),
|
|
Strategy: req.GetStrategy(),
|
|
ConnectionType: req.GetConnectionType(),
|
|
LockType: req.GetLockType(),
|
|
Count: req.GetCount(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertConnectionLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) GetConnectionLimiters(_ context.Context, req *pb.Filters) (*pb.ConnectionLimiterList, error) {
|
|
items, err := s.manager.GetConnectionLimiters(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.ConnectionLimiter, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertConnectionLimiter(v)
|
|
}
|
|
return &pb.ConnectionLimiterList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetConnectionLimitersCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetConnectionLimitersCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetConnectionLimiter(_ context.Context, req *pb.IdRequest) (*pb.ConnectionLimiter, error) {
|
|
v, err := s.manager.GetConnectionLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertConnectionLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) UpdateConnectionLimiter(_ context.Context, req *pb.ConnectionLimiterUpdateRequest) (*pb.ConnectionLimiter, error) {
|
|
u := req.GetUpdate()
|
|
v, err := s.manager.UpdateConnectionLimiter(int(req.GetId()), CM.ConnectionLimiterUpdate{
|
|
Username: u.GetUsername(),
|
|
Outbound: u.GetOutbound(),
|
|
Strategy: u.GetStrategy(),
|
|
ConnectionType: u.GetConnectionType(),
|
|
LockType: u.GetLockType(),
|
|
Count: u.GetCount(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertConnectionLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteConnectionLimiter(_ context.Context, req *pb.IdRequest) (*pb.ConnectionLimiter, error) {
|
|
v, err := s.manager.DeleteConnectionLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertConnectionLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) CreateRateLimiter(_ context.Context, req *pb.RateLimiterCreate) (*pb.RateLimiter, error) {
|
|
v, err := s.manager.CreateRateLimiter(CM.RateLimiterCreate{
|
|
SquadIDs: toIntSlice(req.GetSquadIds()),
|
|
Username: req.GetUsername(),
|
|
Outbound: req.GetOutbound(),
|
|
Strategy: req.GetStrategy(),
|
|
ConnectionType: req.GetConnectionType(),
|
|
Count: req.GetCount(),
|
|
Interval: req.GetInterval(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertRateLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) GetRateLimiters(_ context.Context, req *pb.Filters) (*pb.RateLimiterList, error) {
|
|
items, err := s.manager.GetRateLimiters(convertListFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]*pb.RateLimiter, len(items))
|
|
for i, v := range items {
|
|
out[i] = convertRateLimiter(v)
|
|
}
|
|
return &pb.RateLimiterList{Values: out}, nil
|
|
}
|
|
|
|
func (s *Server) GetRateLimitersCount(_ context.Context, req *pb.Filters) (*pb.CountReply, error) {
|
|
n, err := s.manager.GetRateLimitersCount(convertFilters(req))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pb.CountReply{Count: int64(n)}, nil
|
|
}
|
|
|
|
func (s *Server) GetRateLimiter(_ context.Context, req *pb.IdRequest) (*pb.RateLimiter, error) {
|
|
v, err := s.manager.GetRateLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertRateLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) UpdateRateLimiter(_ context.Context, req *pb.RateLimiterUpdateRequest) (*pb.RateLimiter, error) {
|
|
u := req.GetUpdate()
|
|
v, err := s.manager.UpdateRateLimiter(int(req.GetId()), CM.RateLimiterUpdate{
|
|
Username: u.GetUsername(),
|
|
Outbound: u.GetOutbound(),
|
|
Strategy: u.GetStrategy(),
|
|
ConnectionType: u.GetConnectionType(),
|
|
Count: u.GetCount(),
|
|
Interval: u.GetInterval(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertRateLimiter(v), nil
|
|
}
|
|
|
|
func (s *Server) DeleteRateLimiter(_ context.Context, req *pb.IdRequest) (*pb.RateLimiter, error) {
|
|
v, err := s.manager.DeleteRateLimiter(int(req.GetId()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return convertRateLimiter(v), nil
|
|
}
|