From b8bce69ca2d989b54addd89bf067ba0a54b2da02 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期一, 23 十一月 2020 19:14:34 +0800 Subject: [PATCH] add security --- EsClient.go | 91 +++++++---------- swfs.go | 193 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+), 54 deletions(-) diff --git a/EsClient.go b/EsClient.go index a35533c..f63abff 100644 --- a/EsClient.go +++ b/EsClient.go @@ -3,60 +3,18 @@ import ( "basic.com/pubsub/protomsg.git" "bytes" + "encoding/base64" "encoding/json" "errors" "fmt" - "io" + "github.com/spf13/viper" "io/ioutil" + "log" "math" "net/http" - "strings" "time" ) -func GetEsDataReq(url string, parama string, isSource bool) map[string]interface{} { - //fmt.Println("es 鏌ヨ璇锋眰璺緞" + url) // 閰嶇疆淇℃伅 鑾峰彇 - var dat map[string]interface{} - req, err := http.NewRequest("POST", url, strings.NewReader(parama)) - req.Header.Add("Content-Type", "application/json") - timeout := time.Duration(10 * time.Second) //瓒呮椂鏃堕棿50ms - client := &http.Client{Timeout: timeout} - resp, err := client.Do(req) - if err != nil { - fmt.Println(err) - return dat - } - defer resp.Body.Close() - dec := json.NewDecoder(resp.Body) - if err := dec.Decode(&dat); err == io.EOF { - fmt.Println(err.Error()) - return dat - } else if err != nil { - fmt.Println(err.Error()) - return dat - } - // 鏄惁闇�瑕� 瑙f瀽 es 杩斿洖鐨� source - if isSource { - dat = dat["hits"].(map[string]interface{}) - var data = make(map[string]interface{}, 2) - data["total"] = dat["total"] - sources := []interface{}{} - for _, value := range dat["hits"].([]interface{}) { - source := value.(map[string]interface{})["_source"].(map[string]interface{}) - //source["id"] = source["id"] - /*sdkType := source["sdkType"] - if sdkType != nil { - sdk, _ := strconv.Atoi(sdkType.(string)) - source["sdkType"] = sdkTypeToValue(sdk) - }*/ - sources = append(sources, source) - } - data["datalist"] = sources - return data - } else { - return dat - } -} func Parsesources(sources []map[string]interface{}) (multiInfos []*protomsg.MultiFeaCache) { var ok bool @@ -556,14 +514,14 @@ realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) - if sinTime.Sub(mTime).Seconds() == 0{ + if sinTime.Sub(mTime).Seconds() == 0 { sinTime.Add(time.Second * 1) sinTime.Format("2006-01-02 15:04:05") hitsSources[len(hitsSources)-1]["endTime"] = tmpTime stayTime = 1 - } else if stayTime == 0{ + } else if stayTime == 0 { stayTime = 1 - hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") } hitsSources[len(hitsSources)-1]["stayTime"] = stayTime if point == indexLength { @@ -730,14 +688,14 @@ realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) - if sinTime.Sub(mTime).Seconds() == 0{ + if sinTime.Sub(mTime).Seconds() == 0 { sinTime.Add(time.Second * 1) sinTime.Format("2006-01-02 15:04:05") hitsSources[len(hitsSources)-1]["endTime"] = tmpTime stayTime = 1 - } else if stayTime == 0{ + } else if stayTime == 0 { stayTime = 1 - hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") } hitsSources[len(hitsSources)-1]["stayTime"] = stayTime if point == indexLength { @@ -863,14 +821,14 @@ realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) - if sinTime.Sub(mTime).Seconds() == 0{ + if sinTime.Sub(mTime).Seconds() == 0 { sinTime.Add(time.Second * 1) sinTime.Format("2006-01-02 15:04:05") hitsSources[len(hitsSources)-1]["endTime"] = tmpTime stayTime = 1 - } else if stayTime == 0{ + } else if stayTime == 0 { stayTime = 1 - hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") } hitsSources[len(hitsSources)-1]["stayTime"] = stayTime if point == indexLength { @@ -1088,6 +1046,7 @@ } request, err := http.NewRequest(method, url, bytes.NewBuffer(parama)) request.Header.Set("Content-type", "application/json") + request.Header.Set("Authorization",Token) if err != nil { fmt.Println("build request fail !") @@ -1123,3 +1082,27 @@ // fmt.Println(key, "is nil can not asign") // } //} + +type account struct { + Username string `mapstructure: "username"` + Userpassword string `mapstructure: "userpassword"` +} + + +var Account = &account{} + +var Token string + +func init() { + v := viper.New() + v.SetConfigType("yaml") + v.SetConfigName("pro") + v.AddConfigPath("/opt/vasystem/config/") + err := v.ReadInConfig() + if err != nil { + log.Fatal("err on parsing configuration file!",err) + } + v.UnmarshalKey("es.account",Account) + + Token = "Basic "+base64.StdEncoding.EncodeToString([]byte(Account.Username+":"+Account.Userpassword)) +} diff --git a/swfs.go b/swfs.go new file mode 100644 index 0000000..d3a9b39 --- /dev/null +++ b/swfs.go @@ -0,0 +1,193 @@ +package esutil + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "github.com/golang/glog" + "io" + "io/ioutil" + "net/http" + "os" + "strings" + "time" +) + +//鍚姩鏈嶅姟 +func StartSServer(binPath string) bool { + resultMsg := CMDSC("sh " + binPath + "/seaweedfs_start.sh") + if resultMsg == "杩愯澶辫触" { + return false + } + return true +} + +//鍏抽棴鏈嶅姟 +func StopSServer(binPath string) bool { + resultMsg := CMDSC("sh " + binPath + "/seaweedfs_stop.sh") + if resultMsg == "杩愯澶辫触" { + return false + } + return true +} + +type SWFSInfo struct { + Ip string + DefaultReplication string + Peers []string +} + +//楠岃瘉鏈嶅姟 +func VerifyServer(ip string) (bool, error) { + masterUrl := "http://" + ip + ":6333/ui/index.html" + volumeUrl := "http://" + ip + ":6700/ui/index.html" + _, mErr := HttpRC("GET", masterUrl, nil) + if mErr != nil { + return false, errors.New("master 鍚姩澶辫触") + } + _, vErr := HttpRC("GET", volumeUrl, nil) + if vErr != nil { + return false, errors.New("volume 鍚姩澶辫触") + } + return true, nil + +} + +//璇诲彇閰嶇疆鏂囦欢 +func GetConfig(configPath string) (SWFSInfo, error) { + var info SWFSInfo + cp := configPath + "/seaweedfs_start.sh" + file, err := os.OpenFile(cp, os.O_RDWR, 0666) + if err != nil { + glog.Error("open config file fail, err: ", err) + return info, err + } + defer file.Close() + + buf := bufio.NewReader(file) + peers := make([]string, 0) + ip := "" + defaultReplication := "" + for { + line, _, c := buf.ReadLine() + if c == io.EOF { + break + } + if strings.Contains(string(line), "peers=") { + rt := strings.Split(string(line), "=")[1] + if len(rt) < 1 { + continue + } + p := strings.Split(rt, ",") + peers = append(peers, p...) + } + if strings.Contains(string(line), "ip=") { + ip = strings.Split(string(line), "=")[1] + continue + } + if strings.Contains(string(line), "defaultReplication=") { + defaultReplication = strings.Split(string(line), "=")[1] + continue + } + } + info.Ip = ip + info.DefaultReplication = defaultReplication + info.Peers = peers + return info, nil +} + +//璁剧疆閰嶇疆鏂囦欢 +func SetConfig(configPath string, ip string, peers []string, defaultReplication string) bool { + cp := configPath + "/seaweedfs_start.sh" + file, err := os.OpenFile(cp, os.O_RDWR, 0666) + if err != nil { + glog.Error("open config file fail, err: ", err) + return false + } + defer file.Close() + + buf := bufio.NewReader(file) + output := make([]byte, 0) + for { + line, _, c := buf.ReadLine() + if c == io.EOF { + break + } + if strings.Contains(string(line), "ip=") { + newline := "ip=" + ip + line = []byte(newline) + } + if strings.Contains(string(line), "peers=") { + newline := "peers=" + strings.Replace(strings.Trim(fmt.Sprint(peers), "[]"), " ", ",", -1) + line = []byte(newline) + } + if strings.Contains(string(line), "defaultReplication=") { + newline := "defaultReplication=" + defaultReplication + line = []byte(newline) + } + output = append(output, line...) + output = append(output, []byte("\n")...) + } + + if err := writeToFile(cp, output); err != nil { + glog.Errorf("write config file err: %v", err) + return false + } + return true +} + +func writeToFile(filePath string, outPut []byte) error { + f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_TRUNC, 0600) + defer f.Close() + if err != nil { + return err + } + writer := bufio.NewWriter(f) + _, err = writer.Write(outPut) + if err != nil { + return err + } + writer.Flush() + return nil +} + +func HttpRCT(method string, url string, parama []byte) (buf []byte, err error) { + timeout := time.Duration(10 * time.Second) + client := http.Client{ + Timeout: timeout, + } + request, err := http.NewRequest(method, url, bytes.NewBuffer(parama)) + request.Header.Set("Content-type", "application/json") + request.Header.Add("x-auth-token", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3ND"+ + "UwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW"+ + "9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYW"+ + "RtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG"+ + "1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW"+ + "5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1"+ + "wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd2"+ + "5sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbW"+ + "luTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2"+ + "R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcIm"+ + "NvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3Mj"+ + "pY3SQ7j6AlTXnQDG8") + + if err != nil { + fmt.Println("build request fail !") + return nil, err + } + + resp, err := client.Do(request) + if err != nil { + fmt.Println("request error: ", err) + return nil, err + } + + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + fmt.Println(err) + return nil, err + } + return body, nil +} -- Gitblit v1.8.0