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  }