| package remote_server |
|
|
| import ( |
| "encoding/json" |
| "io/ioutil" |
| "net/http" |
| "strings" |
|
|
| "github.com/GoAdminGroup/go-admin/modules/system" |
|
|
| "github.com/GoAdminGroup/go-admin/modules/logger" |
| ) |
|
|
| const ( |
| |
| |
|
|
| ServerHost = "https://www.go-admin.cn" |
| ServerHostApi = "https://www.go-admin.cn/api" |
| ) |
|
|
| type LoginRes struct { |
| Code int `json:"code"` |
| Data struct { |
| Token string `json:"token"` |
| Name string `json:"name"` |
| Expire int64 `json:"expire"` |
| } `json:"data"` |
| Msg string `json:"msg"` |
| } |
|
|
| func Login(account, password string) LoginRes { |
| var resData LoginRes |
|
|
| req, err := http.NewRequest("POST", ServerHostApi+"/signin", strings.NewReader(`{"account":"`+account+ |
| `","password":"`+password+`"}`)) |
|
|
| if err != nil { |
| logger.Error("login: ", err) |
| resData.Code = 500 |
| resData.Msg = "request error" |
| return resData |
| } |
|
|
| req.Header.Add("Content-Type", "application/json") |
|
|
| res, err := http.DefaultClient.Do(req) |
|
|
| if err != nil { |
| logger.Error("login: ", err) |
| resData.Code = 500 |
| resData.Msg = "request error" |
| return resData |
| } |
| defer func() { |
| _ = res.Body.Close() |
| }() |
| body, err := ioutil.ReadAll(res.Body) |
| if err != nil { |
| logger.Error("login: ", err) |
| resData.Code = 500 |
| resData.Msg = "request error" |
| return resData |
| } |
|
|
| err = json.Unmarshal(body, &resData) |
| if err != nil { |
| logger.Error("login: ", err) |
| resData.Code = 500 |
| resData.Msg = "request error" |
| return resData |
| } |
| if resData.Code != 0 { |
| logger.Error("login to remote GoAdmin server error: ", resData.Msg) |
| return resData |
| } |
| return resData |
| } |
|
|
| type GetDownloadURLRes struct { |
| Code int `json:"code"` |
| Data struct { |
| Url string `json:"url"` |
| ExtraUrl string `json:"extra_url"` |
| } `json:"data"` |
| Msg string `json:"msg"` |
| } |
|
|
| func GetDownloadURL(uuid, token string) (string, string, error) { |
| var resData GetDownloadURLRes |
|
|
| req, err := http.NewRequest("GET", ServerHostApi+"/plugin/download", strings.NewReader(`{"uuid":"`+uuid+`", "version":"`+system.Version()+`"}`)) |
|
|
| if err != nil { |
| logger.Error("get plugin download url error: ", err) |
| return "", "", err |
| } |
|
|
| req.Header.Add(TokenKey, token) |
| req.Header.Add("Content-Type", "application/json") |
|
|
| res, err := http.DefaultClient.Do(req) |
|
|
| if err != nil { |
| return "", "", err |
| } |
| defer func() { |
| _ = res.Body.Close() |
| }() |
| body, err := ioutil.ReadAll(res.Body) |
| if err != nil { |
| return "", "", err |
| } |
|
|
| err = json.Unmarshal(body, &resData) |
| if err != nil { |
| return "", "", err |
| } |
| if resData.Code != 0 { |
| return "", "", err |
| } |
| return resData.Data.Url, resData.Data.ExtraUrl, nil |
| } |
|
|
| const TokenKey = "GOADMIN_OFFICIAL_SESS" |
|
|
| type GetOnlineReq struct { |
| Page string `json:"page"` |
| Free string `json:"free"` |
| PageSize string `json:"page_size"` |
| Filter string `json:"filter"` |
| Order string `json:"order"` |
| Lang string `json:"lang"` |
| CategoryId string `json:"category_id"` |
| Version string `json:"version"` |
| } |
|
|
| func (req GetOnlineReq) Format() string { |
| res := "" |
| if req.Page != "" { |
| res += "page=" + req.Page + "&" |
| } |
| if req.PageSize != "" { |
| res += "page_size=" + req.PageSize + "&" |
| } |
| if req.Lang != "" { |
| res += "lang=" + req.Lang + "&" |
| } |
| if req.Filter != "" { |
| res += "filter=" + req.Filter + "&" |
| } |
| if req.Order != "" { |
| res += "order=" + req.Order + "&" |
| } |
| if req.CategoryId != "" { |
| res += "category_id=" + req.CategoryId + "&" |
| } |
| if req.Free != "" { |
| res += "free=" + req.Free + "&" |
| } |
| if req.Version != "" { |
| res += "version=" + req.Version + "&" |
| } |
| if res != "" { |
| return res[:len(res)-1] |
| } |
| return res |
| } |
|
|
| func GetOnline(reqData GetOnlineReq, token string) ([]byte, error) { |
| |
| req, err := http.NewRequest("GET", ServerHostApi+"/plugin/list?"+reqData.Format(), nil) |
|
|
| if err != nil { |
| logger.Error("get online plugins: ", err) |
| return nil, err |
| } |
|
|
| if token != "" { |
| req.Header.Add(TokenKey, token) |
| } |
|
|
| res, err := http.DefaultClient.Do(req) |
|
|
| if err != nil { |
| logger.Error("get online plugins: ", err) |
| return nil, err |
| } |
| defer func() { |
| _ = res.Body.Close() |
| }() |
| body, err := ioutil.ReadAll(res.Body) |
| if err != nil { |
| logger.Error("get online plugins: ", err) |
| return nil, err |
| } |
|
|
| return body, nil |
| } |
|
|