98 lines
1.9 KiB
Go
98 lines
1.9 KiB
Go
package requests
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func Decorate(req *http.Request) error {
|
|
req.Header.Set("tenant-id", TENANT_ID)
|
|
req.Header.Set("user-type", USER_TYPE)
|
|
req.Header.Set("app-content-encrypted", CONTENT_ENCRYPTED)
|
|
req.Header.Set("Authorization", PARAM_AUTHENTICATION)
|
|
|
|
return nil
|
|
}
|
|
|
|
func CreateRequest(
|
|
baseUrl string,
|
|
path string,
|
|
httpMethod string,
|
|
request string,
|
|
contentType string,
|
|
token string,
|
|
eventId string,
|
|
) (*http.Request, error) {
|
|
appSendDate := time.Now().UnixMilli()
|
|
|
|
endpoint := baseUrl + path
|
|
|
|
if len(request) != 0 {
|
|
request = EncryptRequest(
|
|
path,
|
|
appSendDate,
|
|
TENANT_ID,
|
|
token,
|
|
request,
|
|
contentType)
|
|
}
|
|
|
|
bodyReader := bytes.NewReader([]byte(request))
|
|
req, err := http.NewRequest(httpMethod, endpoint, bodyReader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
Decorate(req)
|
|
req.Header.Set("app-send-date", strconv.FormatInt(appSendDate, 10))
|
|
req.Header.Set("original-content-type", contentType)
|
|
|
|
if len(token) != 0 {
|
|
req.Header.Set("blade-auth", token)
|
|
}
|
|
if len(eventId) != 0 {
|
|
req.Header.Set("event-id", eventId)
|
|
}
|
|
|
|
replace := strings.Replace(endpoint, baseUrl, "/", -1)
|
|
|
|
req.Header.Set("app-verification-string",
|
|
CalculateRequestVerification(
|
|
replace,
|
|
appSendDate,
|
|
TENANT_ID,
|
|
contentType,
|
|
request,
|
|
token))
|
|
|
|
return req, nil
|
|
}
|
|
|
|
func DecryptAnswer(resp *http.Response) ([]byte, error) {
|
|
var body string
|
|
var bodyRaw []byte
|
|
var err error
|
|
if resp.StatusCode == http.StatusOK {
|
|
bodyRaw, err = io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return bodyRaw, err
|
|
}
|
|
if resp.Header.Get("app-content-encrypted") == "1" {
|
|
body = DecryptResponse(
|
|
resp.Header.Get("app-send-date"),
|
|
resp.Header.Get("original-content-type"),
|
|
string(bodyRaw))
|
|
} else {
|
|
body = string(bodyRaw)
|
|
}
|
|
} else {
|
|
err = errors.New(resp.Status)
|
|
}
|
|
|
|
return []byte(body), err
|
|
}
|