package aisafety import ( "crypto/md5" "encoding/hex" "encoding/json" "fmt" "sort" "strings" "code.gitea.io/gitea/modules/log" "github.com/go-resty/resty/v2" ) var ( restyClient *resty.Client HOST string KEY string ) const ( APPID = "1" LogPageSize = 500 LogPageTokenExpired = "5m" pageSize = 15 Success = "S000" ) func getRestyClient() *resty.Client { if restyClient == nil { restyClient = resty.New() } return restyClient } func checkSetting() { if len(HOST) != 0 && len(KEY) != 0 { return } _ = loginCloudbrain() } func loginCloudbrain() error { HOST = "http://221.122.70.196:8081/atp-api" KEY = "1" return nil } func createSign(params map[string]interface{}, signKey string) string { var sceneList []string for k := range params { sceneList = append(sceneList, k) } sort.Strings(sceneList) re := "" for _, key := range sceneList { if params[key] != nil { re += key + "=" + fmt.Sprint(params[key]) + "&" } } re += "key=" + signKey log.Info("sign key:" + re) h := md5.New() h.Write([]byte(re)) return strings.ToUpper(hex.EncodeToString(h.Sum(nil))) } func CreateSafetyTask(jobName string, body interface{}) (string, error) { checkSetting() client := getRestyClient() var jobResult string reqPara, _ := json.Marshal(body) log.Warn("job req:", string(reqPara[:])) params := make(map[string]interface{}) //params["appId"] = APPID res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). SetBody(body). SetResult(&jobResult). Post(HOST + "/v1/external/eval-standard/create") log.Info("url=" + HOST + "/v1/external/eval-standard/create") if err != nil { return "", fmt.Errorf("resty create job: %s", err) } else { log.Info("result string=" + jobResult + " res code=" + fmt.Sprint(res.StatusCode())) } responseStr := string(res.Body()) log.Info("responseStr=" + responseStr) return jobResult, nil } func GetAlgorithmList() error { checkSetting() client := getRestyClient() var taskResult string params := make(map[string]interface{}) //params["appId"] = APPID sign := createSign(params, KEY) res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). SetHeader("sign", sign). SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/algorithmList") log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList" + " sign=" + sign + " appId=" + APPID) if err != nil { log.Info("error =" + err.Error()) return fmt.Errorf("resty GetJob: %v", err) } log.Info("taskResult=" + taskResult) responseStr := string(res.Body()) log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) return nil } func GetTaskStatus(jobID string) error { checkSetting() client := getRestyClient() var taskResult string params := make(map[string]interface{}) //params["appId"] = APPID res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). SetHeader("sign", createSign(params, KEY)). SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/query") log.Info("url=" + HOST + "/v1/external/eval-standard/query") if err != nil { return fmt.Errorf("resty GetJob: %v", err) } responseStr := string(res.Body()) log.Info("GetTaskStatus responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) return nil }