github.com/kotovmak/go-admin@v1.1.1/modules/remote_server/remote_server.go (about) 1 package remote_server 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "net/http" 7 "strings" 8 9 "github.com/kotovmak/go-admin/modules/system" 10 11 "github.com/kotovmak/go-admin/modules/logger" 12 ) 13 14 const ( 15 // ServerHost = "http://localhost:8055" 16 // ServerHostApi = "http://localhost:8055/api" 17 18 ServerHost = "https://www.go-admin.cn" 19 ServerHostApi = "https://www.go-admin.cn/api" 20 ) 21 22 type LoginRes struct { 23 Code int `json:"code"` 24 Data struct { 25 Token string `json:"token"` 26 Name string `json:"name"` 27 Expire int64 `json:"expire"` 28 } `json:"data"` 29 Msg string `json:"msg"` 30 } 31 32 func Login(account, password string) LoginRes { 33 var resData LoginRes 34 35 req, err := http.NewRequest("POST", ServerHostApi+"/signin", strings.NewReader(`{"account":"`+account+ 36 `","password":"`+password+`"}`)) 37 38 if err != nil { 39 logger.Error("login: ", err) 40 resData.Code = 500 41 resData.Msg = "request error" 42 return resData 43 } 44 45 req.Header.Add("Content-Type", "application/json") 46 47 res, err := http.DefaultClient.Do(req) 48 49 if err != nil { 50 logger.Error("login: ", err) 51 resData.Code = 500 52 resData.Msg = "request error" 53 return resData 54 } 55 defer func() { 56 _ = res.Body.Close() 57 }() 58 body, err := ioutil.ReadAll(res.Body) 59 if err != nil { 60 logger.Error("login: ", err) 61 resData.Code = 500 62 resData.Msg = "request error" 63 return resData 64 } 65 66 err = json.Unmarshal(body, &resData) 67 if err != nil { 68 logger.Error("login: ", err) 69 resData.Code = 500 70 resData.Msg = "request error" 71 return resData 72 } 73 if resData.Code != 0 { 74 logger.Error("login to remote GoAdmin server error: ", resData.Msg) 75 return resData 76 } 77 return resData 78 } 79 80 type GetDownloadURLRes struct { 81 Code int `json:"code"` 82 Data struct { 83 Url string `json:"url"` 84 ExtraUrl string `json:"extra_url"` 85 } `json:"data"` 86 Msg string `json:"msg"` 87 } 88 89 func GetDownloadURL(uuid, token string) (string, string, error) { 90 var resData GetDownloadURLRes 91 92 req, err := http.NewRequest("GET", ServerHostApi+"/plugin/download", strings.NewReader(`{"uuid":"`+uuid+`", "version":"`+system.Version()+`"}`)) 93 94 if err != nil { 95 logger.Error("get plugin download url error: ", err) 96 return "", "", err 97 } 98 99 req.Header.Add(TokenKey, token) 100 req.Header.Add("Content-Type", "application/json") 101 102 res, err := http.DefaultClient.Do(req) 103 104 if err != nil { 105 return "", "", err 106 } 107 defer func() { 108 _ = res.Body.Close() 109 }() 110 body, err := ioutil.ReadAll(res.Body) 111 if err != nil { 112 return "", "", err 113 } 114 115 err = json.Unmarshal(body, &resData) 116 if err != nil { 117 return "", "", err 118 } 119 if resData.Code != 0 { 120 return "", "", err 121 } 122 return resData.Data.Url, resData.Data.ExtraUrl, nil 123 } 124 125 const TokenKey = "GOADMIN_OFFICIAL_SESS" 126 127 type GetOnlineReq struct { 128 Page string `json:"page"` 129 Free string `json:"free"` 130 PageSize string `json:"page_size"` 131 Filter string `json:"filter"` 132 Order string `json:"order"` 133 Lang string `json:"lang"` 134 CategoryId string `json:"category_id"` 135 Version string `json:"version"` 136 } 137 138 func (req GetOnlineReq) Format() string { 139 res := "" 140 if req.Page != "" { 141 res += "page=" + req.Page + "&" 142 } 143 if req.PageSize != "" { 144 res += "page_size=" + req.PageSize + "&" 145 } 146 if req.Lang != "" { 147 res += "lang=" + req.Lang + "&" 148 } 149 if req.Filter != "" { 150 res += "filter=" + req.Filter + "&" 151 } 152 if req.Order != "" { 153 res += "order=" + req.Order + "&" 154 } 155 if req.CategoryId != "" { 156 res += "category_id=" + req.CategoryId + "&" 157 } 158 if req.Free != "" { 159 res += "free=" + req.Free + "&" 160 } 161 if req.Version != "" { 162 res += "version=" + req.Version + "&" 163 } 164 if res != "" { 165 return res[:len(res)-1] 166 } 167 return res 168 } 169 170 func GetOnline(reqData GetOnlineReq, token string) ([]byte, error) { 171 // TODO: add cache 172 req, err := http.NewRequest("GET", ServerHostApi+"/plugin/list?"+reqData.Format(), nil) 173 174 if err != nil { 175 logger.Error("get online plugins: ", err) 176 return nil, err 177 } 178 179 if token != "" { 180 req.Header.Add(TokenKey, token) 181 } 182 183 res, err := http.DefaultClient.Do(req) 184 185 if err != nil { 186 logger.Error("get online plugins: ", err) 187 return nil, err 188 } 189 defer func() { 190 _ = res.Body.Close() 191 }() 192 body, err := ioutil.ReadAll(res.Body) 193 if err != nil { 194 logger.Error("get online plugins: ", err) 195 return nil, err 196 } 197 198 return body, nil 199 }