Browse Source

[fix] middleware

main v0.1.24
loveckiy.ivan 3 months ago
parent
commit
028f734e95
  1. 2
      go.mod
  2. 2
      go.sum
  3. 7
      vendor/git.lowcodeplatform.net/fabric/lib/async.go
  4. 4
      vendor/git.lowcodeplatform.net/fabric/lib/crypto.go
  5. 75
      vendor/git.lowcodeplatform.net/fabric/lib/http.go
  6. 2
      vendor/modules.txt

2
go.mod

@ -17,7 +17,7 @@ require (
cloud.google.com/go/compute/metadata v0.2.3 // indirect
cloud.google.com/go/iam v0.13.0 // indirect
cloud.google.com/go/storage v1.28.1 // indirect
git.lowcodeplatform.net/fabric/lib v0.2.14 // indirect
git.lowcodeplatform.net/fabric/lib v0.2.23 // indirect
git.lowcodeplatform.net/fabric/logbox v0.2.15 // indirect
git.lowcodeplatform.net/fabric/models v0.1.27 // indirect
git.lowcodeplatform.net/packages/grpcbalancer v0.0.0-20230625153511-db2331a573d5 // indirect

2
go.sum

@ -43,6 +43,8 @@ cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5og
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
git.lowcodeplatform.net/fabric/lib v0.2.14 h1:yktdOYeEPMtttIQbynoL3xUByXxMXlP1XAWOOTuTyyM=
git.lowcodeplatform.net/fabric/lib v0.2.14/go.mod h1:bDQ/TDL5Gzb+y2J4s2K7is5601DzyteDJu7nqSdTI/I=
git.lowcodeplatform.net/fabric/lib v0.2.23 h1:SCLxVubzzcQZvyFHKbZNIybcPAYKJBYy4E0Y0reAb7k=
git.lowcodeplatform.net/fabric/lib v0.2.23/go.mod h1:bDQ/TDL5Gzb+y2J4s2K7is5601DzyteDJu7nqSdTI/I=
git.lowcodeplatform.net/fabric/logbox v0.1.3 h1:2dcC3OSO+g9cTPWSNcXVPOmPw0FaQotzz/xz9imkdD0=
git.lowcodeplatform.net/fabric/logbox v0.1.3/go.mod h1:krjPWdYdwm0D9BqFy67FDJH9/j54UiJTKr8pmVuz938=
git.lowcodeplatform.net/fabric/logbox v0.2.15 h1:ov5DCgfdVJlqIartr7Cydqr4rcEnioZDggnZGhMog+w=

7
vendor/git.lowcodeplatform.net/fabric/lib/async.go

@ -31,11 +31,16 @@ func Recover(ctx context.Context) (flag bool, msg string) {
func Retrier[T any](
maxCountRetries int,
timeRetries time.Duration,
disableProgressCalc bool,
f func() (T, error),
) (res T, err error) {
for i := 0; i < maxCountRetries; i++ {
if i > 0 {
time.Sleep(sleepCalc(i, timeRetries))
if disableProgressCalc {
time.Sleep(timeRetries)
} else {
time.Sleep(sleepCalc(i, timeRetries))
}
}
res, err = f()

4
vendor/git.lowcodeplatform.net/fabric/lib/crypto.go

@ -127,6 +127,10 @@ func CheckXServiceKey(domain string, projectKey []byte, xServiceKey string) bool
var xsKeyValid bool
var xsKey models.XServiceKey
if xServiceKey == "" {
return false
}
v, err := Decrypt(projectKey, xServiceKey)
err = json.Unmarshal([]byte(v), &xsKey)
if err != nil {

75
vendor/git.lowcodeplatform.net/fabric/lib/http.go

@ -9,6 +9,7 @@ import (
"net"
"net/http"
"net/url"
"regexp"
"strings"
"time"
@ -18,6 +19,8 @@ import (
const clientHttpTimeout = 60 * time.Second
var reCrLf = regexp.MustCompile(`[\r\n]+`)
// Curl всегде возвращает результат в интерфейс + ошибка (полезно для внешних запросов с неизвестной структурой)
// сериализуем в объект, при передаче ссылки на переменную типа
func Curl(ctx context.Context, method, urlc, bodyJSON string, response interface{}, headers map[string]string, cookies []*http.Cookie) (result interface{}, err error) {
@ -58,8 +61,7 @@ func Curl(ctx context.Context, method, urlc, bodyJSON string, response interface
// только если в запросе не указаны передаваемые параметры
clearUrl := strings.Contains(urlc, "?")
bodyJSON = strings.Replace(bodyJSON, " ", "", -1)
err = json.Unmarshal([]byte(bodyJSON), &mapValues)
bodyJSON = reCrLf.ReplaceAllString(bodyJSON, "")
if method == "JSONTOGET" && bodyJSON != "" && clearUrl {
actionType = "JSONTOGET"
@ -70,36 +72,36 @@ func Curl(ctx context.Context, method, urlc, bodyJSON string, response interface
switch actionType {
case "JSONTOGET": // преобразуем параметры в json в строку запроса
if err == nil {
for k, v := range mapValues {
values.Set(k, v)
}
uri, _ := url.Parse(urlc)
uri.RawQuery = values.Encode()
urlc = uri.String()
req, err = http.NewRequest("GET", urlc, strings.NewReader(bodyJSON))
} else {
fmt.Println("Error! Fail parsed bodyJSON from GET Curl: ", err)
err = json.Unmarshal([]byte(bodyJSON), &mapValues)
if err != nil {
return nil, fmt.Errorf("error Unmarshal in Curl, bodyJSON: %s, err: %s", bodyJSON, err)
}
for k, v := range mapValues {
values.Set(k, v)
}
uri, _ := url.Parse(urlc)
uri.RawQuery = values.Encode()
urlc = uri.String()
req, err = http.NewRequest("GET", urlc, strings.NewReader(bodyJSON))
case "JSONTOPOST": // преобразуем параметры в json в тело запроса
if err == nil {
for k, v := range mapValues {
values.Set(k, v)
}
req, err = http.NewRequest("POST", urlc, strings.NewReader(values.Encode()))
req.PostForm = values
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
} else {
fmt.Println("Error! Fail parsed bodyJSON to POST: ", err)
err = json.Unmarshal([]byte(bodyJSON), &mapValues)
if err != nil {
return nil, fmt.Errorf("error Unmarshal in Curl, bodyJSON: %s, err: %s", bodyJSON, err)
}
for k, v := range mapValues {
values.Set(k, v)
}
req, err = http.NewRequest("POST", urlc, strings.NewReader(values.Encode()))
req.PostForm = values
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
default:
req, err = http.NewRequest(method, urlc, strings.NewReader(bodyJSON))
}
if err != nil {
return "", err
}
// дополняем переданными заголовками
httpClientHeaders(ctx, req, headers)
@ -125,11 +127,9 @@ func Curl(ctx context.Context, method, urlc, bodyJSON string, response interface
responseString := string(responseData)
// возвращаем объект ответа, если передано - в какой объект класть результат
// НА ОШИБКУ НЕ ПРОВЕРЯТЬ!!!!!!
if response != nil {
err = json.Unmarshal([]byte(responseString), &response)
if err != nil {
return "", err
}
json.Unmarshal([]byte(responseString), &response)
}
// всегда отдаем в интерфейсе результат (полезно, когда внешние запросы или сериализация на клиенте)
@ -201,7 +201,7 @@ func PortResolver(port string) (status bool) {
// ProxyPort свободный порт от прокси с проверкой доступности на локальной машине
// если занято - ретраим согласно заданным параметрам
func ProxyPort(addressProxy, interval string, maxCountRetries int, timeRetries time.Duration) (port string, err error) {
port, err = Retrier(maxCountRetries, timeRetries, func() (string, error) {
port, err = Retrier(maxCountRetries, timeRetries, true, func() (string, error) {
port, err = AddressProxy(addressProxy, interval)
if err != nil {
return "", err
@ -231,6 +231,9 @@ func ReadUserIP(r *http.Request) string {
// httpClientHeaders устанавливает заголовки реквеста из контекста и headers
func httpClientHeaders(ctx context.Context, req *http.Request, headers map[string]string) {
if req == nil {
return
}
for ctxField, headerField := range models.ProxiedHeaders {
if value := getFieldCtx(ctx, ctxField); value != "" {
req.Header.Add(headerField, value)
@ -245,8 +248,18 @@ func httpClientHeaders(ctx context.Context, req *http.Request, headers map[strin
}
func getFieldCtx(ctx context.Context, name string) string {
if ctx == nil {
return ""
}
nameKey := "logger." + name
requestID, _ := ctx.Value(nameKey).(string)
a := ctx.Value(nameKey)
if a == nil {
return ""
}
requestID, ok := a.(string)
if !ok {
return ""
}
return requestID
}

2
vendor/modules.txt

@ -20,7 +20,7 @@ cloud.google.com/go/storage
cloud.google.com/go/storage/internal
cloud.google.com/go/storage/internal/apiv2
cloud.google.com/go/storage/internal/apiv2/stubs
# git.lowcodeplatform.net/fabric/lib v0.2.14
# git.lowcodeplatform.net/fabric/lib v0.2.23
## explicit; go 1.18
git.lowcodeplatform.net/fabric/lib
git.lowcodeplatform.net/fabric/lib/pkg/s3

Loading…
Cancel
Save