github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/service/admin/aria2.go (about) 1 package admin 2 3 import ( 4 "bytes" 5 "encoding/json" 6 model "github.com/cloudreve/Cloudreve/v3/models" 7 "net/url" 8 "time" 9 10 "github.com/cloudreve/Cloudreve/v3/pkg/aria2" 11 "github.com/cloudreve/Cloudreve/v3/pkg/auth" 12 "github.com/cloudreve/Cloudreve/v3/pkg/request" 13 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 14 ) 15 16 // Aria2TestService aria2连接测试服务 17 type Aria2TestService struct { 18 Server string `json:"server"` 19 RPC string `json:"rpc" binding:"required"` 20 Secret string `json:"secret"` 21 Token string `json:"token"` 22 Type model.ModelType `json:"type"` 23 } 24 25 // Test 测试aria2连接 26 func (service *Aria2TestService) TestMaster() serializer.Response { 27 res, err := aria2.TestRPCConnection(service.RPC, service.Token, 5) 28 if err != nil { 29 return serializer.ParamErr("Failed to connect to RPC server: "+err.Error(), err) 30 } 31 32 if res.Version == "" { 33 return serializer.ParamErr("RPC server returns unexpected response", nil) 34 } 35 36 return serializer.Response{Data: res.Version} 37 } 38 39 func (service *Aria2TestService) TestSlave() serializer.Response { 40 slave, err := url.Parse(service.Server) 41 if err != nil { 42 return serializer.ParamErr("Cannot parse slave server URL, "+err.Error(), nil) 43 } 44 45 controller, _ := url.Parse("/api/v3/slave/ping/aria2") 46 47 // 请求正文 48 service.Type = model.MasterNodeType 49 bodyByte, _ := json.Marshal(service) 50 51 r := request.NewClient() 52 res, err := r.Request( 53 "POST", 54 slave.ResolveReference(controller).String(), 55 bytes.NewReader(bodyByte), 56 request.WithTimeout(time.Duration(10)*time.Second), 57 request.WithCredential( 58 auth.HMACAuth{SecretKey: []byte(service.Secret)}, 59 int64(model.GetIntSetting("slave_api_timeout", 60)), 60 ), 61 ).DecodeResponse() 62 if err != nil { 63 return serializer.ParamErr("Failed to connect to slave node, "+err.Error(), nil) 64 } 65 66 if res.Code != 0 { 67 return serializer.ParamErr("Successfully connected to slave, but slave returns: "+res.Msg, nil) 68 } 69 70 return serializer.Response{Data: res.Data.(string)} 71 }