diff --git a/cli/logger/index.go b/cli/logger/index.go index 00be79a..04c3363 100644 --- a/cli/logger/index.go +++ b/cli/logger/index.go @@ -8,7 +8,7 @@ import ( "github.com/gookit/color" ) -type Logger struct { +type L struct { Level Level // 日志级别 HideTime bool // 是否隐藏时间戳 LengthLimit int // 设置logger消息长度限制 @@ -47,15 +47,15 @@ var ( } ) -func New(opts ...Option) *Logger { - logger := &Logger{} +func New(opts ...Option) *L { + logger := &L{} for _, opt := range opts { opt(logger) } return logger } -func (l Logger) Info(msgs ...string) *Logger { +func (l L) Info(msgs ...string) *L { msg := str.Join(msgs...) if l.Level < LevelInfo { return &l @@ -71,7 +71,7 @@ func (l Logger) Info(msgs ...string) *Logger { return &l } -func (l Logger) Debug(msgs ...string) *Logger { +func (l L) Debug(msgs ...string) *L { msg := str.Join(msgs...) if l.Level < LevelDebug { return &l @@ -87,7 +87,7 @@ func (l Logger) Debug(msgs ...string) *Logger { return &l } -func (l Logger) Warn(msgs ...string) *Logger { +func (l L) Warn(msgs ...string) *L { msg := str.Join(msgs...) if l.Level < LevelWarn { return &l @@ -103,7 +103,7 @@ func (l Logger) Warn(msgs ...string) *Logger { return &l } -func (l Logger) Error(msgs ...string) *Logger { +func (l L) Error(msgs ...string) *L { msg := str.Join(msgs...) if l.Level < LevelError { return &l diff --git a/cli/logger/options.go b/cli/logger/options.go index b397413..4fdbaed 100644 --- a/cli/logger/options.go +++ b/cli/logger/options.go @@ -1,21 +1,21 @@ package logger -type Option func(*Logger) +type Option func(*L) func WithLevel(level Level) Option { - return func(logger *Logger) { + return func(logger *L) { logger.Level = level } } func WithHideTime() Option { - return func(logger *Logger) { + return func(logger *L) { logger.HideTime = true } } func WithLengthLimit(limit int) Option { - return func(logger *Logger) { + return func(logger *L) { logger.LengthLimit = limit } } diff --git a/cli/logger/writer.go b/cli/logger/writer.go index 22b5c82..faf5f6f 100644 --- a/cli/logger/writer.go +++ b/cli/logger/writer.go @@ -5,11 +5,11 @@ import ( ) type ErrorWriter struct { - logger *Logger + logger *L } // ToErrorWriter 将记录器转换为io.Writer -func (l Logger) ToErrorWriter() *ErrorWriter { +func (l L) ToErrorWriter() *ErrorWriter { return &ErrorWriter{logger: &l} } diff --git a/cli/spinner/internal.go b/cli/spinner/internal.go index d234d20..9f3bac1 100644 --- a/cli/spinner/internal.go +++ b/cli/spinner/internal.go @@ -43,7 +43,7 @@ func upzero(i int) int { } func render(s *Spinner, content string) { s.lock.Lock() - fmt.Print(content) + fmt.Print(str.TrimMiddle(content, s.Conf.MsgMaxLength)) s.lock.Unlock() } func launch(s *Spinner) { diff --git a/go.mod b/go.mod index d5e0942..cf5f62e 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( github.com/PuerkitoBio/goquery v1.9.1 github.com/dustin/go-humanize v1.0.1 github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203 + github.com/fsnotify/fsnotify v1.7.0 github.com/gookit/color v1.5.4 - github.com/k0kubun/pp/v3 v3.2.0 github.com/parnurzeal/gorequest v0.3.0 github.com/rs/xid v1.5.0 github.com/stretchr/testify v1.8.4 @@ -21,8 +21,6 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect github.com/moul/http2curl v1.0.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -31,6 +29,5 @@ require ( github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect golang.org/x/net v0.22.0 // indirect golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 2d65220..96be1e6 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203/go.mod h1:E1jcSv github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 h1:m62nsMU279qRD9PQSWD1l66kmkXzuYcnVJqL4XLeV2M= github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -54,12 +56,6 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs= -github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/parnurzeal/gorequest v0.3.0 h1:SoFyqCDC9COr1xuS6VA8fC8RU7XyrJZN2ona1kEX7FI= @@ -140,7 +136,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= @@ -156,8 +151,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/net/apis/cookiecloud/index.go b/net/apis/cookiecloud/index.go new file mode 100644 index 0000000..88c69c2 --- /dev/null +++ b/net/apis/cookiecloud/index.go @@ -0,0 +1,97 @@ +package cookiecloud + +import ( + "bytes" + "encoding/json" + "io" + "net/http" + "net/url" + "strings" + + "git.realxlfd.cc/RealXLFD/golib/utils/str" +) + +var ( + data *Data +) + +type Data struct { + CookieData map[string][]CookieDatum `json:"cookie_data"` + LocalStorageData struct{} `json:"local_storage_data"` + UpdateTime string `json:"update_time"` +} + +type CookieDatum struct { + Domain string `json:"domain"` + ExpirationDate *float64 `json:"expirationDate,omitempty"` + HostOnly bool `json:"hostOnly"` + HTTPOnly bool `json:"httpOnly"` + Name string `json:"name"` + Path string `json:"path"` + SameSite SameSite `json:"sameSite"` + Secure bool `json:"secure"` + Session bool `json:"session"` + StoreID string `json:"storeId"` + Value string `json:"value"` +} + +type SameSite string + +const ( + Lax SameSite = "lax" + NoRestriction SameSite = "no_restriction" + Strict SameSite = "strict" + Unspecified SameSite = "unspecified" +) + +func GetData(URL, id, pwd string, proxy ...string) error { + var proxyURL *url.URL + var err error + if len(proxy) != 0 { + proxyURL, err = url.Parse(proxy[0]) + } + if err != nil { + panic(str.T("invalid proxy url: {}", URL)) + } + target, err := url.Parse(URL) + if err != nil { + panic(str.T("invalid url: {}", URL)) + } + requestData := str.Map{"password": pwd}.Json() + request, err := http.NewRequest( + "POST", + target.JoinPath("/get", id).String(), + bytes.NewBuffer(requestData), + ) + if err != nil { + return err + } + request.Header.Set("Content-Type", "application/json") + client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}} + resp, err := client.Do(request) + if err != nil { + return err + } + body, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + data = &Data{} + return json.Unmarshal(body, data) +} + +func Get(site string) (cookie string, ok bool) { + if len(data.CookieData) == 0 { + return "", false + } + cookies, ok := data.CookieData[str.Join(".", site)] + if !ok { + return "", ok + } + builder := &strings.Builder{} + for i := range cookies { + k, v := cookies[i].Name, cookies[i].Value + builder.WriteString(str.T("{}={};", k, v)) + } + return builder.String(), true +} diff --git a/net/apps/reverse_proxy/logger.go b/net/apps/reverse_proxy/logger.go index 8e0909d..53fa406 100644 --- a/net/apps/reverse_proxy/logger.go +++ b/net/apps/reverse_proxy/logger.go @@ -7,7 +7,7 @@ import ( ) var ( - Logger = &logger.Logger{} + Logger = &logger.L{} ) func SetLogLevel(level logger.Level) { diff --git a/utils/str/types.go b/utils/str/types.go new file mode 100644 index 0000000..32d4212 --- /dev/null +++ b/utils/str/types.go @@ -0,0 +1,55 @@ +package str + +import ( + "encoding/json" + "sync" +) + +type Map map[string]string + +func (m Map) Json() []byte { + result, err := json.Marshal(m) + if err != nil { + panic(err) + } + return result +} + +func KeyFrom(args ...string) *Key { + key := &Key{ + data: map[string]struct{}{}, + lock: &sync.Mutex{}, + } + for i := range args { + key.data[args[i]] = struct{}{} + } + return key +} + +type Key struct { + data map[string]struct{} + lock *sync.Mutex +} + +func (k *Key) Add(args ...string) *Key { + k.lock.Lock() + defer k.lock.Unlock() + for i := range args { + k.data[args[i]] = struct{}{} + } + return k +} + +func (k *Key) Has(key string) bool { + _, ok := k.data[key] + return ok +} + +func (k *Key) Del(keys ...string) *Key { + k.lock.Lock() + defer k.lock.Unlock() + for i := range keys { + delete(k.data, keys[i]) + } + return k +}