update
This commit is contained in:
@@ -0,0 +1 @@
|
||||
config.yaml
|
||||
@@ -0,0 +1 @@
|
||||
package qinglong
|
||||
@@ -0,0 +1 @@
|
||||
package qinglong
|
||||
@@ -0,0 +1,129 @@
|
||||
package qinglong
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/beego/beego/v2/adapter/httplib"
|
||||
"github.com/buger/jsonparser"
|
||||
)
|
||||
|
||||
type EnvResponse struct {
|
||||
Code int `json:"code"`
|
||||
Data []Env `json:"data"`
|
||||
}
|
||||
|
||||
type Env struct {
|
||||
Value string `json:"value"`
|
||||
ID string `json:"_id"`
|
||||
Status int `json:"status"`
|
||||
Name string `json:"name"`
|
||||
Remarks string `json:"remarks"`
|
||||
}
|
||||
|
||||
func GetEnv(searchValue string) ([]Env, error) {
|
||||
er := EnvResponse{}
|
||||
if err := req(PUT, ENVS, &er, "?searchValue="+searchValue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return er.Data, nil
|
||||
}
|
||||
|
||||
func SetEnv(e *Env) error {
|
||||
es, err := GetEnv(e.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(es) == 0 {
|
||||
return AddEnv(e)
|
||||
}
|
||||
e.ID = es[0].ID
|
||||
return req(PUT, ENVS, e)
|
||||
}
|
||||
|
||||
func AddEnv(e *Env) error {
|
||||
return req(POST, ENVS, []Env{*e})
|
||||
}
|
||||
|
||||
func RemEnv(e *Env) error {
|
||||
es, err := GetEnv(e.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(es) == 0 {
|
||||
return nil
|
||||
}
|
||||
td := []string{}
|
||||
for _, e := range es {
|
||||
td = append(td, e.ID)
|
||||
}
|
||||
return req(DELETE, ENVS, td)
|
||||
}
|
||||
|
||||
func req(ps ...interface{}) error {
|
||||
token, err := getToken()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
method := GET
|
||||
body := []byte{}
|
||||
api := ENVS
|
||||
apd := ""
|
||||
var toParse interface{}
|
||||
for _, p := range ps {
|
||||
switch p.(type) {
|
||||
case string:
|
||||
switch p.(string) {
|
||||
case GET, POST, DELETE, PUT:
|
||||
method = p.(string)
|
||||
case ENVS:
|
||||
method = p.(string)
|
||||
default:
|
||||
apd = p.(string)
|
||||
}
|
||||
case []byte:
|
||||
body = p.([]byte)
|
||||
default:
|
||||
if strings.Contains(reflect.TypeOf(&p).String(), "*") {
|
||||
toParse = p
|
||||
} else {
|
||||
body, _ = json.Marshal(p)
|
||||
}
|
||||
}
|
||||
}
|
||||
var req *httplib.BeegoHTTPRequest
|
||||
api += apd
|
||||
switch method {
|
||||
case GET:
|
||||
req = httplib.Get(Config.Host + "/open/" + api)
|
||||
case POST:
|
||||
req = httplib.Delete(Config.Host + "/open/" + api)
|
||||
case DELETE:
|
||||
req = httplib.Delete(Config.Host + "/open/" + api)
|
||||
case PUT:
|
||||
req = httplib.Put(Config.Host + "/open/" + api)
|
||||
}
|
||||
if method != GET && len(body) > 0 {
|
||||
req.Body(body)
|
||||
}
|
||||
req.Header("Authorization", fmt.Sprintf("Bearer %s", token))
|
||||
data, _ := json.Marshal(body)
|
||||
req.Body(data)
|
||||
data, err = req.Bytes()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
code, _ := jsonparser.GetInt(data, "code")
|
||||
if code != 200 {
|
||||
return errors.New(string(data))
|
||||
}
|
||||
if toParse != nil {
|
||||
if err := json.Unmarshal(data, toParse); err != nil {
|
||||
return errors.New(fmt.Sprintf("解析错误:%v,%v", err, string(data)))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package qinglong
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/adapter/httplib"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/buger/jsonparser"
|
||||
"github.com/cdle/sillyGirl/core"
|
||||
)
|
||||
|
||||
type Yaml struct {
|
||||
Host string
|
||||
ClientID string `yaml:"client_id"`
|
||||
ClientSecret string `yaml:"client_secret"`
|
||||
}
|
||||
|
||||
var Config Yaml
|
||||
|
||||
var token string
|
||||
var expiration int64
|
||||
var GET = "GET"
|
||||
var PUT = "PUT"
|
||||
var POST = "POST"
|
||||
var DELETE = "DELETE"
|
||||
var ENVS = "envs"
|
||||
|
||||
func init() {
|
||||
core.ReadYaml(core.ExecPath+"/develop/qinglong/conf/", &Config, "https://raw.githubusercontent.com/cdle/sillyGirl/main/develop/qinglong/conf/config.yaml")
|
||||
token, err := getToken()
|
||||
if err == nil {
|
||||
logs.Info("青龙可及%v", token)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func getToken() (string, error) {
|
||||
if token != "" && expiration > time.Now().Unix() {
|
||||
return token, nil
|
||||
}
|
||||
req := httplib.Get(fmt.Sprintf("%s/open/auth/token?client_id=%s&client_secret=%s", Config.Host, Config.ClientID, Config.ClientSecret))
|
||||
data, err := req.Bytes()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("青龙链接失败:%v", err)
|
||||
logs.Warn(msg)
|
||||
return "", errors.New(msg)
|
||||
}
|
||||
code, _ := jsonparser.GetInt(data, "code")
|
||||
if code != 200 {
|
||||
msg := fmt.Sprintf("青龙登录失败:%v", string(data))
|
||||
logs.Warn(msg)
|
||||
return "", errors.New(msg)
|
||||
}
|
||||
token, _ = jsonparser.GetString(data, "data", "token")
|
||||
expiration, _ = jsonparser.GetInt(data, "data", "expiration")
|
||||
return token, nil
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
package qinglong
|
||||
Reference in New Issue
Block a user