| | 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 |
| | } |
| |
|