Commit 46d2537d authored by ibuler's avatar ibuler

[Update] 修改结构

parent f8bee143
...@@ -17,17 +17,25 @@ import ( ...@@ -17,17 +17,25 @@ import (
type Client struct { type Client struct {
Timeout time.Duration Timeout time.Duration
Headers map[string]string Headers map[string]string
BaseHost string
basicAuth []string basicAuth []string
authorization string authorization string
cookie map[string]string cookie map[string]string
http *http.Client
UrlParsers []UrlParser
} }
func NewClient() *Client { type UrlParser interface {
parse(url string, params ...map[string]string) string
}
func NewClient(timeout time.Duration) *Client {
headers := make(map[string]string, 1) headers := make(map[string]string, 1)
client := http.DefaultClient
client.Timeout = timeout * time.Second
return &Client{ return &Client{
Timeout: 30, Timeout: timeout * time.Second,
Headers: headers, Headers: headers,
http: client,
cookie: make(map[string]string, 0), cookie: make(map[string]string, 0),
} }
} }
...@@ -54,44 +62,49 @@ func (c *Client) marshalData(data interface{}) (reader io.Reader, error error) { ...@@ -54,44 +62,49 @@ func (c *Client) marshalData(data interface{}) (reader io.Reader, error error) {
return return
} }
func (c *Client) ParseUrl(url string) string { func (c *Client) ParseUrlQuery(url string, query map[string]string) string {
return url var paramSlice []string
} for k, v := range query {
paramSlice = append(paramSlice, fmt.Sprintf("%s=%s", k, v))
func (c *Client) ConstructUrl(url string) string { }
if c.BaseHost != "" { param := strings.Join(paramSlice, "&")
url = strings.TrimRight(c.BaseHost, "/") + url if strings.Contains(url, "?") {
url += "&" + param
} else {
url += "?" + param
} }
return url return url
} }
func (c *Client) NewRequest(method, url string, body interface{}) (req *http.Request, err error) { func (c *Client) ParseUrl(url string, params ...map[string]string) string {
url = c.ConstructUrl(url) if len(params) == 1 {
reader, err := c.marshalData(body) url = c.ParseUrlQuery(url, params[0])
if err != nil { }
return for _, parser := range c.UrlParsers {
url = parser.parse(url, params...)
} }
return http.NewRequest(method, url, reader) return url
} }
// Do wrapper http.Client Do() for using auth and error handle func (c *Client) SetAuthHeader(r *http.Request, params ...map[string]string) {
func (c *Client) Do(req *http.Request, res interface{}) (err error) {
// Custom our client
client := http.DefaultClient
client.Timeout = c.Timeout * time.Second
if len(c.basicAuth) == 2 { if len(c.basicAuth) == 2 {
req.SetBasicAuth(c.basicAuth[0], c.basicAuth[1]) r.SetBasicAuth(c.basicAuth[0], c.basicAuth[1])
return
} }
if c.authorization != "" { if c.authorization != "" {
req.Header.Add("Authorization", c.authorization) r.Header.Add("Authorization", c.authorization)
return
} }
if len(c.cookie) != 0 { if len(c.cookie) != 0 {
cookie := make([]string, 0) cookie := make([]string, 0)
for k, v := range c.cookie { for k, v := range c.cookie {
cookie = append(cookie, fmt.Sprintf("%s=%s", k, v)) cookie = append(cookie, fmt.Sprintf("%s=%s", k, v))
} }
req.Header.Add("Cookie", strings.Join(cookie, ";")) r.Header.Add("Cookie", strings.Join(cookie, ";"))
} }
}
func (c *Client) SetReqHeaders(req *http.Request, params ...map[string]string) {
if len(c.Headers) != 0 { if len(c.Headers) != 0 {
for k, v := range c.Headers { for k, v := range c.Headers {
req.Header.Set(k, v) req.Header.Set(k, v)
...@@ -101,9 +114,26 @@ func (c *Client) Do(req *http.Request, res interface{}) (err error) { ...@@ -101,9 +114,26 @@ func (c *Client) Do(req *http.Request, res interface{}) (err error) {
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
} }
req.Header.Set("User-Agent", "coco-client") req.Header.Set("User-Agent", "coco-client")
c.SetAuthHeader(req)
}
func (c *Client) NewRequest(method, url string, body interface{}, params ...map[string]string) (req *http.Request, err error) {
url = c.ParseUrl(url, params...)
reader, err := c.marshalData(body)
if err != nil {
return
}
req, err = http.NewRequest(method, url, reader)
c.SetReqHeaders(req, params...)
return req, err
}
// Request it // Do wrapper http.Client Do() for using auth and error handle
resp, err := client.Do(req) // params:
// 1. query string if set {"name": "ibuler"}
func (c *Client) Do(method, url string, data, res interface{}, params ...map[string]string) (err error) {
req, err := c.NewRequest(method, url, data, params...)
resp, err := c.http.Do(req)
if err != nil { if err != nil {
return return
} }
...@@ -111,7 +141,8 @@ func (c *Client) Do(req *http.Request, res interface{}) (err error) { ...@@ -111,7 +141,8 @@ func (c *Client) Do(req *http.Request, res interface{}) (err error) {
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
if resp.StatusCode >= 400 { if resp.StatusCode >= 400 {
err = errors.New(fmt.Sprintf("%s %s failed, get code: %d, %s", req.Method, req.URL, resp.StatusCode, string(body))) msg := fmt.Sprintf("%s %s failed, get code: %d, %s", req.Method, req.URL, resp.StatusCode, string(body))
err = errors.New(msg)
return return
} }
...@@ -119,65 +150,32 @@ func (c *Client) Do(req *http.Request, res interface{}) (err error) { ...@@ -119,65 +150,32 @@ func (c *Client) Do(req *http.Request, res interface{}) (err error) {
if res != nil { if res != nil {
err = json.Unmarshal(body, res) err = json.Unmarshal(body, res)
if err != nil { if err != nil {
msg := fmt.Sprintf("Failed %s %s, unmarshal `%s` response failed", req.Method, req.URL, string(body)[:50]) msg := fmt.Sprintf("%s %s failed, unmarshal `%s` response failed", req.Method, req.URL, string(body)[:50])
return errors.New(msg) err = errors.New(msg)
return
} }
} }
return nil return
} }
func (c *Client) Get(url string, res interface{}, params ...map[string]string) (err error) { func (c *Client) Get(url string, res interface{}, params ...map[string]string) (err error) {
if len(params) == 1 { return c.Do("GET", url, nil, res, params...)
paramSlice := make([]string, 1)
for k, v := range params[0] {
paramSlice = append(paramSlice, fmt.Sprintf("%s=%s", k, v))
}
param := strings.Join(paramSlice, "&")
if strings.Contains(url, "?") {
url += "&" + param
} else {
url += "?" + param
}
}
req, err := c.NewRequest("GET", url, nil)
if err != nil {
return
}
err = c.Do(req, res)
return err
} }
func (c *Client) Post(url string, data interface{}, res interface{}) (err error) { func (c *Client) Post(url string, data interface{}, res interface{}) (err error) {
req, err := c.NewRequest("POST", url, data) return c.Do("POST", url, data, res)
if err != nil {
return
}
err = c.Do(req, res)
return err
} }
func (c *Client) Delete(url string, res interface{}) (err error) { func (c *Client) Delete(url string, res interface{}) (err error) {
req, err := c.NewRequest("DELETE", url, nil) return c.Do("DELETE", url, nil, res)
err = c.Do(req, res)
return err
} }
func (c *Client) Put(url string, data interface{}, res interface{}) (err error) { func (c *Client) Put(url string, data interface{}, res interface{}) (err error) {
req, err := c.NewRequest("PUT", url, data) return c.Do("PUT", url, data, res)
if err != nil {
return
}
err = c.Do(req, res)
return err
} }
func (c *Client) Patch(url string, data interface{}, res interface{}) (err error) { func (c *Client) Patch(url string, data interface{}, res interface{}) (err error) {
req, err := c.NewRequest("PATCH", url, data) return c.Do("PATCH", url, data, res)
if err != nil {
return
}
err = c.Do(req, res)
return err
} }
func (c *Client) PostForm(url string, data interface{}, res interface{}) (err error) { func (c *Client) PostForm(url string, data interface{}, res interface{}) (err error) {
...@@ -196,7 +194,7 @@ func (c *Client) PostForm(url string, data interface{}, res interface{}) (err er ...@@ -196,7 +194,7 @@ func (c *Client) PostForm(url string, data interface{}, res interface{}) (err er
default: default:
attr, err := json.Marshal(val.Field(i).Interface()) attr, err := json.Marshal(val.Field(i).Interface())
if err != nil { if err != nil {
return err return nil
} }
v = string(attr) v = string(attr)
} }
...@@ -207,6 +205,5 @@ func (c *Client) PostForm(url string, data interface{}, res interface{}) (err er ...@@ -207,6 +205,5 @@ func (c *Client) PostForm(url string, data interface{}, res interface{}) (err er
reader := strings.NewReader(values.Encode()) reader := strings.NewReader(values.Encode())
req, err := http.NewRequest("POST", url, reader) req, err := http.NewRequest("POST", url, reader)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
err = c.Do(req, res) return nil
return err
} }
...@@ -26,29 +26,24 @@ var user = User{ID: 2, Name: "Jumpserver", Age: 5} ...@@ -26,29 +26,24 @@ var user = User{ID: 2, Name: "Jumpserver", Age: 5}
var userDeleteUrl = fmt.Sprintf("%s/%d", usersUrl, user.ID) var userDeleteUrl = fmt.Sprintf("%s/%d", usersUrl, user.ID)
func TestClient_Do(t *testing.T) { func TestClient_Do(t *testing.T) {
c := NewClient() c := NewClient(10)
req, err := http.NewRequest("GET", usersUrl, nil) err := c.Do("GET", usersUrl, nil, nil)
if err != nil {
t.Error("Failed NewRequest() ...")
}
err = c.Do(req, nil)
if err == nil { if err == nil {
t.Error("Failed Do(), want get err but not") t.Error("Failed Do(), want get err but not")
} }
c.SetBasicAuth(username, password) c.SetBasicAuth(username, password)
var res []User var res []User
err = c.Do(req, &res) err = c.Do("GET", usersUrl, nil, &res)
if err != nil { if err != nil {
t.Errorf("Failed Do(), %s", err.Error()) t.Errorf("Failed Do() error: %s", err.Error())
} }
if len(res) != 2 { if len(res) != 2 {
t.Errorf("User not equal 2") t.Errorf("User not equal 2: %d", len(res))
} }
} }
func TestClient_Get(t *testing.T) { func TestClient_Get(t *testing.T) {
c := NewClient() c := NewClient(10)
err := c.Get(usersUrl, nil) err := c.Get(usersUrl, nil)
if err == nil { if err == nil {
t.Errorf("Failed Get(%s): want get err but not", usersUrl) t.Errorf("Failed Get(%s): want get err but not", usersUrl)
...@@ -61,7 +56,7 @@ func TestClient_Get(t *testing.T) { ...@@ -61,7 +56,7 @@ func TestClient_Get(t *testing.T) {
} }
func TestClient_Post(t *testing.T) { func TestClient_Post(t *testing.T) {
c := NewClient() c := NewClient(10)
var userCreated User var userCreated User
err := c.Post(usersUrl, user, &userCreated) err := c.Post(usersUrl, user, &userCreated)
if err != nil { if err != nil {
...@@ -73,7 +68,7 @@ func TestClient_Post(t *testing.T) { ...@@ -73,7 +68,7 @@ func TestClient_Post(t *testing.T) {
} }
func TestClient_Put(t *testing.T) { func TestClient_Put(t *testing.T) {
c := NewClient() c := NewClient(10)
var userUpdated User var userUpdated User
err := c.Put(usersUrl, user, &userUpdated) err := c.Put(usersUrl, user, &userUpdated)
if err != nil { if err != nil {
...@@ -85,7 +80,7 @@ func TestClient_Put(t *testing.T) { ...@@ -85,7 +80,7 @@ func TestClient_Put(t *testing.T) {
} }
func TestClient_Delete(t *testing.T) { func TestClient_Delete(t *testing.T) {
c := NewClient() c := NewClient(10)
c.SetBasicAuth(username, password) c.SetBasicAuth(username, password)
err := c.Delete(userDeleteUrl, nil) err := c.Delete(userDeleteUrl, nil)
if err != nil { if err != nil {
......
package service package service
import ( import (
"cocogo/pkg/logger"
"errors" "errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
"path"
"path/filepath"
"strings" "strings"
"cocogo/pkg/common" "cocogo/pkg/common"
) )
var (
AccessKeyNotFound = errors.New("access key not found")
AccessKeyFileNotFound = errors.New("access key file not found")
AccessKeyInvalid = errors.New("access key not valid")
)
type AccessKey struct { type AccessKey struct {
Id string Id string
Secret string Secret string
Path string
Context string
} }
func (ak *AccessKey) Signature(date string) string { func (ak AccessKey) Sign() string {
date := common.HTTPGMTDate()
signature := common.MakeSignature(ak.Secret, date) signature := common.MakeSignature(ak.Secret, date)
return fmt.Sprintf("Sign %s:%s", ak.Id, signature) return fmt.Sprintf("Sign %s:%s", ak.Id, signature)
} }
// LoadAccessKey 加载AccessKey用来与 Core Api 交互 func (ak *AccessKey) LoadAccessKeyFromStr(key string) error {
func (s *Service) LoadAccessKey() { if key == "" {
/* return AccessKeyNotFound
1. 查看配置文件是否包含accessKey,解析不正确则退出程序 }
2. 检查是否已经注册过accessKey, keySlice := strings.Split(strings.TrimSpace(key), ":")
1)已经注册过则进行解析,解析不正确则退出程序 if len(ak.Context) != 2 {
2)未注册则新注册 return AccessKeyInvalid
*/
if s.Conf.AccessKey != "" {
fmt.Println(s.Conf.AccessKey)
keyAndSecret := strings.Split(s.Conf.AccessKey, ":")
if len(keyAndSecret) == 2 {
s.auth = accessAuth{
accessKey: keyAndSecret[0],
accessSecret: keyAndSecret[1],
}
} else {
fmt.Println("ACCESS_KEY format err")
os.Exit(1)
}
return
} }
var configPath string ak.Id = keySlice[0]
ak.Secret = keySlice[1]
return nil
}
if !path.IsAbs(s.Conf.AccessKeyFile) { func (ak *AccessKey) LoadAccessKeyFromFile(keyPath string) error {
configPath = filepath.Join(s.Conf.RootPath, s.Conf.AccessKeyFile) if keyPath == "" {
} else { return AccessKeyNotFound
configPath = s.Conf.AccessKeyFile
} }
_, err := os.Stat(configPath) _, err := os.Stat(keyPath)
if err != nil { if err != nil {
if os.IsNotExist(err) { return AccessKeyFileNotFound
fmt.Println("Do not have access key, register it!") }
err := s.registerTerminalAndSave() buf, err := ioutil.ReadFile(keyPath)
if err != nil { if err != nil {
log.Info("register Failed:", err) msg := fmt.Sprintf("read access key failed: %s", err)
os.Exit(1) return errors.New(msg)
}
return
} else {
fmt.Println("sys err:", err)
os.Exit(1)
}
} }
return ak.LoadAccessKeyFromStr(string(buf))
}
buf, err := ioutil.ReadFile(configPath) func (ak *AccessKey) SaveToFile() error {
return nil
}
func (ak *AccessKey) Register(times int) error {
return nil
}
// LoadAccessKey 加载AccessKey用来与 Core Api 交互
func (ak *AccessKey) Load() (err error) {
err = ak.LoadAccessKeyFromStr(ak.Context)
if err == nil {
return
}
err = ak.LoadAccessKeyFromFile(ak.Path)
if err == nil {
return
}
err = ak.Register(10)
if err != nil { if err != nil {
fmt.Println("read Access key Failed:", err) msg := "register access key failed"
os.Exit(1) logger.Error(msg)
return errors.New(msg)
} }
keyAndSecret := strings.Split(string(buf), ":") err = ak.SaveToFile()
if len(keyAndSecret) == 2 { if err != nil {
s.auth = accessAuth{ msg := fmt.Sprintf("save to access key to file error: %s", err)
accessKey: keyAndSecret[0], logger.Error(msg)
accessSecret: keyAndSecret[1], return errors.New(msg)
}
} else {
fmt.Println("ACCESS_KEY format err")
os.Exit(1)
} }
return nil
} }
package service package service
import ( //
"encoding/json" //func GetSystemUserAssetAuthInfo(systemUserID, assetID string) (authInfo model.SystemUserAuthInfo, err error) {
"fmt" //
//
"cocogo/pkg/model" // err = json.Unmarshal(buf, &authInfo)
) // if err != nil {
// log.Info(err)
func (s *Service) GetSystemUserAssetAuthInfo(systemUserID, assetID string) (authInfo model.SystemUserAuthInfo, err error) { // return authInfo, err
// }
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, // return authInfo, err
fmt.Sprintf(SystemUserAssetAuthUrl, systemUserID, assetID), //
) //}
buf, err := s.SendHTTPRequest("GET", url, nil) //
if err != nil { //func (s *Service) GetSystemUserAuthInfo(systemUserID string) {
log.Info("get User Assets Groups err:", err) //
return authInfo, err // url := fmt.Sprintf("%s%s", s.Conf.CoreHost,
} // fmt.Sprintf(SystemUserAuthUrl, systemUserID))
err = json.Unmarshal(buf, &authInfo) // buf, err := s.SendHTTPRequest("GET", url, nil)
if err != nil { // if err != nil {
log.Info(err) // log.Info("get User Assets Groups err:", err)
return authInfo, err // return
} // }
return authInfo, err // //err = json.Unmarshal(buf, &authInfo)
// fmt.Printf("%s", buf)
} // if err != nil {
// log.Info(err)
func (s *Service) GetSystemUserAuthInfo(systemUserID string) { // return
// }
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, // return
fmt.Sprintf(SystemUserAuthUrl, systemUserID)) //
buf, err := s.SendHTTPRequest("GET", url, nil) //}
if err != nil {
log.Info("get User Assets Groups err:", err)
return
}
//err = json.Unmarshal(buf, &authInfo)
fmt.Printf("%s", buf)
if err != nil {
log.Info(err)
return
}
return
}
package service
import (
"cocogo/pkg/model"
"net/http"
"path"
"path/filepath"
"strings"
"cocogo/pkg/common"
"cocogo/pkg/config"
)
type ClientAuth interface {
Sign() string
}
type WrapperClient struct {
*common.Client
Auth ClientAuth
BaseHost string
}
func (c *WrapperClient) SetAuthHeader(r *http.Request) {
if c.Auth != nil {
signature := c.Auth.Sign()
r.Header.Add("Authorization", signature)
}
}
func (c *WrapperClient) ExpandUrl(url string, query map[string]string) string {
}
func (c *WrapperClient) ParseUrl(url string, params ...map[string]string) string {
var newUrl = ""
if url, ok := urls[url]; ok {
newUrl = url
}
if c.BaseHost != "" {
newUrl = strings.TrimRight(c.BaseHost, "/") + newUrl
}
if len(params) == 1 {
url = c.ParseUrlQuery(url, params[0])
}
if len(params) == 2 {
url =
}
return newUrl
}
func (c *WrapperClient) LoadAuth() error {
keyPath := config.Conf.AccessKeyFile
if !path.IsAbs(config.Conf.AccessKeyFile) {
keyPath = filepath.Join(config.Conf.RootPath, keyPath)
}
ak := AccessKey{Context: config.Conf.AccessKey, Path: keyPath}
err := ak.Load()
if err != nil {
return err
}
c.Auth = ak
return nil
}
func (c *WrapperClient) CheckAuth() error {
var user model.User
err := c.Get("UserProfileUrl", &user)
if err != nil {
return err
}
return nil
}
package service package service
import (
"os"
"cocogo/pkg/logger"
)
var client = WrapperClient{}
func init() {
err := client.LoadAuth()
if err != nil {
logger.Error("Load client access key error: %s", err)
os.Exit(10)
}
err = client.CheckAuth()
if err != nil {
logger.Error("Check client auth error: %s", err)
os.Exit(11)
}
}
package service package service
import ( //
"cocogo/pkg/model" //func (s *Service) GetUserAssets(uid string) (resp []model.Asset, err error) {
"encoding/json" //
"fmt" // url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(UserAssetsUrl, uid))
) //
// buf, err := s.SendHTTPRequest("GET", url, nil)
func (s *Service) GetUserAssets(uid string) (resp []model.Asset, err error) { // if err != nil {
// log.Info("get User Assets err:", err)
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(UserAssetsUrl, uid)) // return resp, err
// }
buf, err := s.SendHTTPRequest("GET", url, nil) // err = json.Unmarshal(buf, &resp)
if err != nil { // if err != nil {
log.Info("get User Assets err:", err) // log.Info(err)
return resp, err // return resp, err
} // }
err = json.Unmarshal(buf, &resp) // return resp, nil
if err != nil { //
log.Info(err) //}
return resp, err //
} //func (s *Service) GetUserAssetNodes(uid string) ([]model.AssetNode, error) {
return resp, nil //
// var resp []model.AssetNode
} //
// url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(UserNodesAssetsUrl, uid))
func (s *Service) GetUserAssetNodes(uid string) ([]model.AssetNode, error) { //
// buf, err := s.SendHTTPRequest("GET", url, nil)
var resp []model.AssetNode // if err != nil {
// log.Info("get User Assets Groups err:", err)
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(UserNodesAssetsUrl, uid)) // return resp, err
// }
buf, err := s.SendHTTPRequest("GET", url, nil) // err = json.Unmarshal(buf, &resp)
if err != nil { // if err != nil {
log.Info("get User Assets Groups err:", err) // log.Info(err)
return resp, err // return resp, err
} // }
err = json.Unmarshal(buf, &resp) // return resp, err
if err != nil { //}
log.Info(err) //
return resp, err //func (s *Service) ValidateUserAssetPermission(userID, systemUserID, AssetID string) bool {
} // // cache_policy 0:不使用缓存 1:使用缓存 2: 刷新缓存
return resp, err //
} // baseUrl, _ := neturl.Parse(fmt.Sprintf("%s%s", s.Conf.CoreHost, ValidateUserAssetPermission))
// params := neturl.Values{}
func (s *Service) ValidateUserAssetPermission(userID, systemUserID, AssetID string) bool { // params.Add("user_id", userID)
// cache_policy 0:不使用缓存 1:使用缓存 2: 刷新缓存 // params.Add("asset_id", AssetID)
// params.Add("system_user_id", systemUserID)
baseUrl, _ := neturl.Parse(fmt.Sprintf("%s%s", s.Conf.CoreHost, ValidateUserAssetPermission)) // params.Add("cache_policy", "1")
params := neturl.Values{} //
params.Add("user_id", userID) // baseUrl.RawQuery = params.Encode()
params.Add("asset_id", AssetID) // buf, err := s.SendHTTPRequest("GET", baseUrl.String(), nil)
params.Add("system_user_id", systemUserID) // if err != nil {
params.Add("cache_policy", "1") // log.Error("Check User Asset Permission err:", err)
// return false
baseUrl.RawQuery = params.Encode() // }
buf, err := s.SendHTTPRequest("GET", baseUrl.String(), nil) // var res struct {
if err != nil { // Msg bool `json:"msg"'`
log.Error("Check User Asset Permission err:", err) // }
return false // if err = json.Unmarshal(buf, &res); err != nil {
} // return false
var res struct { // }
Msg bool `json:"msg"'` // return res.Msg
} //}
if err = json.Unmarshal(buf, &res); err != nil {
return false
}
return res.Msg
}
This diff is collapsed.
package service package service
import ( //
"bytes" //func (s *Service) PushSessionReplay(gZipFile, sessionID string) error {
"encoding/json" // fp, err := os.Open(gZipFile)
"fmt" // if err != nil {
"io" // return err
"mime/multipart" // }
"net/http" // defer fp.Close()
"os" // fi, err := fp.Stat()
) // if err != nil {
// return err
func (s *Service) PushSessionReplay(gZipFile, sessionID string) error { // }
fp, err := os.Open(gZipFile) //
if err != nil { // body := &bytes.Buffer{}
return err // writer := multipart.NewWriter(body)
} // part, err := writer.CreateFormFile("file", fi.Name())
defer fp.Close() // if err != nil {
fi, err := fp.Stat() // return err
if err != nil { // }
return err // _, _ = io.Copy(part, fp)
} // err = writer.Close() // close writer before POST request
// if err != nil {
body := &bytes.Buffer{} // return err
writer := multipart.NewWriter(body) // }
part, err := writer.CreateFormFile("file", fi.Name()) //
if err != nil { // url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(SessionReplay, sessionID))
return err // req, err := http.NewRequest("POST", url, body)
} // currentDate := HTTPGMTDate()
_, _ = io.Copy(part, fp) // req.Header.Add("Content-Type", writer.FormDataContentType())
err = writer.Close() // close writer before POST request // req.Header.Set("Date", currentDate)
if err != nil { // req.Header.Set("Authorization", s.auth.Signature(currentDate))
return err // resp, err := s.http.Do(req)
} // defer resp.Body.Close()
// if err != nil {
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(SessionReplay, sessionID)) // log.Info("Send HTTP Request failed:", err)
req, err := http.NewRequest("POST", url, body) // return err
currentDate := HTTPGMTDate() // }
req.Header.Add("Content-Type", writer.FormDataContentType()) //
req.Header.Set("Date", currentDate) // log.Info("PushSessionReplay:", err)
req.Header.Set("Authorization", s.auth.Signature(currentDate)) // return err
resp, err := s.http.Do(req) //}
defer resp.Body.Close() //
if err != nil { //func (s *Service) CreateSession(data []byte) bool {
log.Info("Send HTTP Request failed:", err) // url := fmt.Sprintf("%s%s", s.Conf.CoreHost, SessionList)
return err //
} // req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
// req.Header.Set("Content-Type", "application/json")
log.Info("PushSessionReplay:", err) // currentDate := HTTPGMTDate()
return err // req.Header.Set("Date", currentDate)
} // req.Header.Set("Authorization", s.auth.Signature(currentDate))
// resp, err := s.http.Do(req)
func (s *Service) CreateSession(data []byte) bool { // defer resp.Body.Close()
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, SessionList) // if err != nil {
// log.Error("create Session err: ", err)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) // return false
req.Header.Set("Content-Type", "application/json") // }
currentDate := HTTPGMTDate() // if resp.StatusCode == 201 {
req.Header.Set("Date", currentDate) // log.Info("create Session 201")
req.Header.Set("Authorization", s.auth.Signature(currentDate)) // return true
resp, err := s.http.Do(req) // }
defer resp.Body.Close() // return false
if err != nil { //
log.Error("create Session err: ", err) //}
return false //
} //func (s *Service) FinishSession(id string, jsonData []byte) bool {
if resp.StatusCode == 201 { //
log.Info("create Session 201") // url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(SessionDetail, id))
return true // res, err := s.SendHTTPRequest("PATCH", url, jsonData)
} // fmt.Printf("%s", res)
return false // if err != nil {
// log.Error(err)
} // return false
// }
func (s *Service) FinishSession(id string, jsonData []byte) bool { // return true
//}
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(SessionDetail, id)) //
res, err := s.SendHTTPRequest("PATCH", url, jsonData) //func (s *Service) FinishReply(id string) bool {
fmt.Printf("%s", res) // data := map[string]bool{"has_replay": true}
if err != nil { // jsonData, _ := json.Marshal(data)
log.Error(err) // url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(SessionDetail, id))
return false // _, err := s.SendHTTPRequest("PATCH", url, jsonData)
} // if err != nil {
return true // log.Error(err)
} // return false
// }
func (s *Service) FinishReply(id string) bool { // return true
data := map[string]bool{"has_replay": true} //}
jsonData, _ := json.Marshal(data) //
url := fmt.Sprintf("%s%s", s.Conf.CoreHost, fmt.Sprintf(SessionDetail, id)) //func (s *Service) LoadTerminalConfig() {
_, err := s.SendHTTPRequest("PATCH", url, jsonData) // url := fmt.Sprintf("%s%s", s.Conf.CoreHost, TerminalConfigUrl)
if err != nil { // req, err := http.NewRequest(http.MethodGet, url, nil)
log.Error(err) // if err != nil {
return false // log.Info(err)
} // }
return true // currentDate := HTTPGMTDate()
} // req.Header.Set("Content-Type", "application/json")
// req.Header.Set("Date", currentDate)
// req.Header.Set("Authorization", s.auth.Signature(currentDate))
// resp, err := s.http.Do(req)
// if err != nil {
// log.Info("client http request failed:", err)
// }
//
// defer resp.Body.Close()
// body, err := ioutil.ReadAll(resp.Body)
// if err != nil {
// log.Info("Read response Body err:", err)
// return
// }
// fmt.Printf("%s\n", body)
// resBody := config.TerminalConfig{}
// err = json.Unmarshal(body, &resBody)
// if err != nil {
// log.Info("json.Unmarshal", err)
// return
// }
// s.Conf.TermConfig = &resBody
// fmt.Println(resBody)
//
//}
package service
//
//func (s *Service) CheckAuth(username, password, publicKey, remoteAddr, loginType string) (model.User, error) {
// /*
// {
// 'token': '0191970b1f5b414bbae42ec8fbb2a2ad',
// 'user':{'id': '34987591-bf75-4e5f-a102-6d59a1103431',
// 'name': 'softwareuser1', 'username': 'softwareuser1',
// 'email': 'xplz@hotmail.com',
// 'groups': ['bdc861f9-f476-4554-9bd4-13c3112e469d'],
// 'groups_display': '研发组', 'role': 'User',
// 'role_display': '用户', 'avatar_url': '/static/img/avatar/user.png',
// 'wechat': '', 'phone': None, 'otp_level': 0, 'comment': '',
// 'source': 'local', 'source_display': 'Local', 'is_valid': True,
// 'is_expired': False, 'is_active': True, 'created_by': 'admin',
// 'is_first_login': True, 'date_password_last_updated': '2019-03-08 11:47:04 +0800',
// 'date_expired': '2089-02-18 09:37:00 +0800'}}
// */
//
// postMap := map[string]string{
// "username": username,
// "password": password,
// "public_key": publicKey,
// "remote_addr": remoteAddr,
// "login_type": loginType,
// }
//
// data, err := json.Marshal(postMap)
// if err != nil {
// log.Info(err)
// return model.User{}, err
// }
//
// url := fmt.Sprintf("%s%s", s.Conf.CoreHost, UserAuthUrl)
// body, err := s.SendHTTPRequest(http.MethodPost, url, data)
//
// if err != nil {
// log.Info("read body failed:", err)
// return model.User{}, err
// }
// var result struct {
// Token string `json:"token"`
// User model.User `json:"user"`
// }
//
// err = json.Unmarshal(body, &result)
// if err != nil {
// log.Info("json decode failed:", err)
// return model.User{}, err
// }
//
// return result.User, nil
//}
//
//func (s *Service) CheckSSHPassword(ctx ssh.Context, password string) bool {
//
// username := ctx.User()
// remoteAddr := ctx.RemoteAddr().String()
// authUser, err := s.CheckAuth(username, password, "", remoteAddr, "T")
// if err != nil {
// return false
// }
// ctx.SetValue("LoginUser", authUser)
// return true
//}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment