diff options
Diffstat (limited to 'web/service')
| -rw-r--r-- | web/service/warp.go | 162 | ||||
| -rw-r--r-- | web/service/xray_setting.go | 144 |
2 files changed, 162 insertions, 144 deletions
diff --git a/web/service/warp.go b/web/service/warp.go new file mode 100644 index 00000000..a691d3c1 --- /dev/null +++ b/web/service/warp.go @@ -0,0 +1,162 @@ +package service + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "os" + "time" + "x-ui/logger" +) + +type WarpService struct { + SettingService +} + +func (s *WarpService) GetWarpData() (string, error) { + warp, err := s.SettingService.GetWarp() + if err != nil { + return "", err + } + return warp, nil +} + +func (s *WarpService) DelWarpData() error { + err := s.SettingService.SetWarp("") + if err != nil { + return err + } + return nil +} + +func (s *WarpService) GetWarpConfig() (string, error) { + var warpData map[string]string + warp, err := s.SettingService.GetWarp() + if err != nil { + return "", err + } + err = json.Unmarshal([]byte(warp), &warpData) + if err != nil { + return "", err + } + + url := fmt.Sprintf("https://api.cloudflareclient.com/v0a2158/reg/%s", warpData["device_id"]) + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return "", err + } + req.Header.Set("Authorization", "Bearer "+warpData["access_token"]) + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + buffer := bytes.NewBuffer(make([]byte, 8192)) + buffer.Reset() + _, err = buffer.ReadFrom(resp.Body) + if err != nil { + return "", err + } + + return buffer.String(), nil +} + +func (s *WarpService) RegWarp(secretKey string, publicKey string) (string, error) { + tos := time.Now().UTC().Format("2006-01-02T15:04:05.000Z") + hostName, _ := os.Hostname() + data := fmt.Sprintf(`{"key":"%s","tos":"%s","type": "PC","model": "x-ui", "name": "%s"}`, publicKey, tos, hostName) + + url := "https://api.cloudflareclient.com/v0a2158/reg" + + req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(data))) + if err != nil { + return "", err + } + + req.Header.Add("CF-Client-Version", "a-7.21-0721") + req.Header.Add("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + buffer := bytes.NewBuffer(make([]byte, 8192)) + buffer.Reset() + _, err = buffer.ReadFrom(resp.Body) + if err != nil { + return "", err + } + + var rspData map[string]interface{} + err = json.Unmarshal(buffer.Bytes(), &rspData) + if err != nil { + return "", err + } + + deviceId := rspData["id"].(string) + token := rspData["token"].(string) + license, ok := rspData["account"].(map[string]interface{})["license"].(string) + if !ok { + logger.Debug("Error accessing license value.") + return "", err + } + + warpData := fmt.Sprintf("{\n \"access_token\": \"%s\",\n \"device_id\": \"%s\",", token, deviceId) + warpData += fmt.Sprintf("\n \"license_key\": \"%s\",\n \"private_key\": \"%s\"\n}", license, secretKey) + + s.SettingService.SetWarp(warpData) + + result := fmt.Sprintf("{\n \"data\": %s,\n \"config\": %s\n}", warpData, buffer.String()) + + return result, nil +} + +func (s *WarpService) SetWarpLicense(license string) (string, error) { + var warpData map[string]string + warp, err := s.SettingService.GetWarp() + if err != nil { + return "", err + } + err = json.Unmarshal([]byte(warp), &warpData) + if err != nil { + return "", err + } + + url := fmt.Sprintf("https://api.cloudflareclient.com/v0a2158/reg/%s/account", warpData["device_id"]) + data := fmt.Sprintf(`{"license": "%s"}`, license) + + req, err := http.NewRequest("PUT", url, bytes.NewBuffer([]byte(data))) + if err != nil { + return "", err + } + req.Header.Set("Authorization", "Bearer "+warpData["access_token"]) + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + buffer := bytes.NewBuffer(make([]byte, 8192)) + buffer.Reset() + _, err = buffer.ReadFrom(resp.Body) + if err != nil { + return "", err + } + + warpData["license_key"] = license + newWarpData, err := json.MarshalIndent(warpData, "", " ") + if err != nil { + return "", err + } + s.SettingService.SetWarp(string(newWarpData)) + println(string(newWarpData)) + + return string(newWarpData), nil +} diff --git a/web/service/xray_setting.go b/web/service/xray_setting.go index 43d143db..f497bf84 100644 --- a/web/service/xray_setting.go +++ b/web/service/xray_setting.go @@ -1,13 +1,8 @@ package service import ( - "bytes" _ "embed" "encoding/json" - "fmt" - "net/http" - "os" - "time" "x-ui/util/common" "x-ui/xray" @@ -32,142 +27,3 @@ func (s *XraySettingService) CheckXrayConfig(XrayTemplateConfig string) error { } return nil } - -func (s *XraySettingService) GetWarpData() (string, error) { - warp, err := s.SettingService.GetWarp() - if err != nil { - return "", err - } - return warp, nil -} - -func (s *XraySettingService) GetWarpConfig() (string, error) { - var warpData map[string]string - warp, err := s.SettingService.GetWarp() - if err != nil { - return "", err - } - err = json.Unmarshal([]byte(warp), &warpData) - if err != nil { - return "", err - } - - url := fmt.Sprintf("https://api.cloudflareclient.com/v0a2158/reg/%s", warpData["device_id"]) - - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return "", err - } - req.Header.Set("Authorization", "Bearer "+warpData["access_token"]) - - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - return "", err - } - defer resp.Body.Close() - buffer := bytes.NewBuffer(make([]byte, 8192)) - buffer.Reset() - _, err = buffer.ReadFrom(resp.Body) - if err != nil { - return "", err - } - - return buffer.String(), nil -} - -func (s *XraySettingService) RegWarp(secretKey string, publicKey string) (string, error) { - tos := time.Now().UTC().Format("2006-01-02T15:04:05.000Z") - hostName, _ := os.Hostname() - data := fmt.Sprintf(`{"key":"%s","tos":"%s","type": "PC","model": "x-ui", "name": "%s"}`, publicKey, tos, hostName) - - url := "https://api.cloudflareclient.com/v0a2158/reg" - - req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(data))) - if err != nil { - return "", err - } - - req.Header.Add("CF-Client-Version", "a-7.21-0721") - req.Header.Add("Content-Type", "application/json") - - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - return "", err - } - defer resp.Body.Close() - buffer := bytes.NewBuffer(make([]byte, 8192)) - buffer.Reset() - _, err = buffer.ReadFrom(resp.Body) - if err != nil { - return "", err - } - - var rspData map[string]interface{} - err = json.Unmarshal(buffer.Bytes(), &rspData) - if err != nil { - return "", err - } - - deviceId := rspData["id"].(string) - token := rspData["token"].(string) - license, ok := rspData["account"].(map[string]interface{})["license"].(string) - if !ok { - fmt.Println("Error accessing license value.") - return "", err - } - - warpData := fmt.Sprintf("{\n \"access_token\": \"%s\",\n \"device_id\": \"%s\",", token, deviceId) - warpData += fmt.Sprintf("\n \"license_key\": \"%s\",\n \"private_key\": \"%s\"\n}", license, secretKey) - - s.SettingService.SetWarp(warpData) - - result := fmt.Sprintf("{\n \"data\": %s,\n \"config\": %s\n}", warpData, buffer.String()) - - return result, nil -} - -func (s *XraySettingService) SetWarpLicense(license string) (string, error) { - var warpData map[string]string - warp, err := s.SettingService.GetWarp() - if err != nil { - return "", err - } - err = json.Unmarshal([]byte(warp), &warpData) - if err != nil { - return "", err - } - - url := fmt.Sprintf("https://api.cloudflareclient.com/v0a2158/reg/%s/account", warpData["device_id"]) - data := fmt.Sprintf(`{"license": "%s"}`, license) - - req, err := http.NewRequest("PUT", url, bytes.NewBuffer([]byte(data))) - if err != nil { - return "", err - } - req.Header.Set("Authorization", "Bearer "+warpData["access_token"]) - - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - return "", err - } - defer resp.Body.Close() - buffer := bytes.NewBuffer(make([]byte, 8192)) - buffer.Reset() - _, err = buffer.ReadFrom(resp.Body) - if err != nil { - return "", err - } - - warpData["license_key"] = license - newWarpData, err := json.MarshalIndent(warpData, "", " ") - if err != nil { - return "", err - } - s.SettingService.SetWarp(string(newWarpData)) - println(string(newWarpData)) - - return string(newWarpData), nil -} |
