From 2d9836885b9a189f255f62e71cd67fe2d7599bd4 Mon Sep 17 00:00:00 2001 From: DacongDA Date: Sun, 12 May 2024 01:31:44 +0800 Subject: [PATCH 1/5] feat: add webhook response for record --- go.mod | 2 +- go.sum | 2 ++ object/record.go | 36 ++++++++++++++++++++++++++++--- object/webhook_util.go | 41 ++++++++++++++++++++++++++++++++---- web/src/RecordListPage.js | 8 +++++++ web/src/locales/ar/data.json | 4 +++- web/src/locales/de/data.json | 4 +++- web/src/locales/en/data.json | 4 +++- web/src/locales/es/data.json | 4 +++- web/src/locales/fa/data.json | 4 +++- web/src/locales/fi/data.json | 4 +++- web/src/locales/fr/data.json | 4 +++- web/src/locales/he/data.json | 4 +++- web/src/locales/id/data.json | 4 +++- web/src/locales/it/data.json | 4 +++- web/src/locales/ja/data.json | 4 +++- web/src/locales/kk/data.json | 4 +++- web/src/locales/ko/data.json | 4 +++- web/src/locales/ms/data.json | 4 +++- web/src/locales/nl/data.json | 4 +++- web/src/locales/pl/data.json | 4 +++- web/src/locales/pt/data.json | 4 +++- web/src/locales/ru/data.json | 4 +++- web/src/locales/sv/data.json | 4 +++- web/src/locales/tr/data.json | 4 +++- web/src/locales/uk/data.json | 12 +++++++++-- web/src/locales/vi/data.json | 4 +++- web/src/locales/zh/data.json | 4 +++- 28 files changed, 157 insertions(+), 32 deletions(-) diff --git a/go.mod b/go.mod index 3acab6badbc..ffd4dfdda3a 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/casdoor/notify v0.45.0 github.com/casdoor/oss v1.6.0 github.com/casdoor/xorm-adapter/v3 v3.1.0 - github.com/casvisor/casvisor-go-sdk v1.3.0 + github.com/casvisor/casvisor-go-sdk v1.4.0 github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f github.com/denisenkom/go-mssqldb v0.9.0 github.com/elazarl/go-bindata-assetfs v1.0.1 // indirect diff --git a/go.sum b/go.sum index 6c8d1bf3d5e..a7ec8aadab2 100644 --- a/go.sum +++ b/go.sum @@ -1097,6 +1097,8 @@ github.com/casdoor/xorm-adapter/v3 v3.1.0 h1:NodWayRtSLVSeCvL9H3Hc61k0G17KhV9Iym github.com/casdoor/xorm-adapter/v3 v3.1.0/go.mod h1:4WTcUw+bTgBylGHeGHzTtBvuTXRS23dtwzFLl9tsgFM= github.com/casvisor/casvisor-go-sdk v1.3.0 h1:HVgm2g3lWpNX2wBNidzR743QY4O5kAjLUJ9tS2juO8g= github.com/casvisor/casvisor-go-sdk v1.3.0/go.mod h1:frnNtH5GA0wxzAQLyZxxfL0RSsSub9GQPi2Ybe86ocE= +github.com/casvisor/casvisor-go-sdk v1.4.0 h1:hbZEGGJ1cwdHFAxeXrMoNw6yha6Oyg2F0qQhBNCN/dg= +github.com/casvisor/casvisor-go-sdk v1.4.0/go.mod h1:frnNtH5GA0wxzAQLyZxxfL0RSsSub9GQPi2Ybe86ocE= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= diff --git a/object/record.go b/object/record.go index 9fbe1563fe4..d7b20e693e0 100644 --- a/object/record.go +++ b/object/record.go @@ -90,6 +90,7 @@ func NewRecord(ctx *context.Context) (*casvisorsdk.Record, error) { Action: action, Language: languageCode, Object: object, + StatusCode: 200, Response: fmt.Sprintf("{status:\"%s\", msg:\"%s\"}", resp.Status, resp.Msg), IsTriggered: false, } @@ -108,7 +109,6 @@ func AddRecord(record *casvisorsdk.Record) bool { } record.Owner = record.Organization - record.Object = maskPassword(record.Object) errWebhook := SendWebhooks(record) @@ -248,10 +248,40 @@ func SendWebhooks(record *casvisorsdk.Record) error { } } - err = sendWebhook(webhook, record, user) + statusCode, respBody, err := sendWebhook(webhook, record, user) + + if len(respBody) > 300 { + respBody = respBody[0:300] + } + + webhookRecord := &casvisorsdk.Record{ + Owner: record.Owner, + Name: record.Name, + Organization: record.Organization, + User: record.User, + + Method: webhook.Method, + Action: "send-webhook", + RequestUri: webhook.Url, + StatusCode: statusCode, + Response: respBody, + Language: record.Language, + IsTriggered: false, + } + if err != nil { + webhookRecord.Response = err.Error() errs = append(errs, err) - continue + } + + if err != nil || statusCode != 200 { + affected, insertError := ormer.Engine.Insert(webhookRecord) + if affected == 0 { + fmt.Printf("AddRecord() error") + } + if insertError != nil { + fmt.Printf("AddRecord() error: %s", insertError.Error()) + } } } diff --git a/object/webhook_util.go b/object/webhook_util.go index da30ace68e6..dedb461f950 100644 --- a/object/webhook_util.go +++ b/object/webhook_util.go @@ -15,6 +15,7 @@ package object import ( + "io" "net/http" "strings" @@ -22,7 +23,7 @@ import ( "github.com/casvisor/casvisor-go-sdk/casvisorsdk" ) -func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *User) error { +func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *User) (int, string, error) { client := &http.Client{} type RecordEx struct { @@ -38,7 +39,7 @@ func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *Use req, err := http.NewRequest(webhook.Method, webhook.Url, body) if err != nil { - return err + return 0, "", err } req.Header.Set("Content-Type", webhook.ContentType) @@ -47,6 +48,38 @@ func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *Use req.Header.Set(header.Name, header.Value) } - _, err = client.Do(req) - return err + resp, err := client.Do(req) + if resp != nil { + defer resp.Body.Close() + var respBody []byte + + isChunked := false + for _, val := range resp.TransferEncoding { + if val == "chunked" { + isChunked = true + } + } + + if resp.ContentLength > 0 { + respBody = make([]byte, resp.ContentLength) + _, err = resp.Body.Read(respBody) + } else if isChunked { + data := make([]byte, 8) + for { + readN, err := resp.Body.Read(data) + if readN > 0 { + respBody = append(respBody, data...) + } + if err == io.EOF { + break + } + if err != nil { + panic(err) + } + } + } + + return resp.StatusCode, string(respBody), err + } + return 0, "", err } diff --git a/web/src/RecordListPage.js b/web/src/RecordListPage.js index c74390e3149..ffa712251af 100644 --- a/web/src/RecordListPage.js +++ b/web/src/RecordListPage.js @@ -151,6 +151,14 @@ class RecordListPage extends BaseListPage { sorter: true, ...this.getColumnSearchProps("language"), }, + { + title: i18next.t("record:Status code"), + dataIndex: "statusCode", + key: "statusCode", + width: "90px", + sorter: true, + ...this.getColumnSearchProps("statusCode"), + }, { title: i18next.t("record:Response"), dataIndex: "response", diff --git a/web/src/locales/ar/data.json b/web/src/locales/ar/data.json index fe373c9dcd9..a5d81e16abb 100644 --- a/web/src/locales/ar/data.json +++ b/web/src/locales/ar/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/de/data.json b/web/src/locales/de/data.json index 58d31229ec9..f4b14fb8b7c 100644 --- a/web/src/locales/de/data.json +++ b/web/src/locales/de/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Kopiere den Link", @@ -1171,6 +1172,7 @@ "input password": "Eingabe des Passworts" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/en/data.json b/web/src/locales/en/data.json index 08991ed4549..ebcd3141366 100644 --- a/web/src/locales/en/data.json +++ b/web/src/locales/en/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/es/data.json b/web/src/locales/es/data.json index 835de072edc..7b7e4a18516 100644 --- a/web/src/locales/es/data.json +++ b/web/src/locales/es/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copiar enlace", @@ -1171,6 +1172,7 @@ "input password": "Ingresar contraseña" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/fa/data.json b/web/src/locales/fa/data.json index f0f822c6156..e172546d11a 100644 --- a/web/src/locales/fa/data.json +++ b/web/src/locales/fa/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/fi/data.json b/web/src/locales/fi/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/fi/data.json +++ b/web/src/locales/fi/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/fr/data.json b/web/src/locales/fr/data.json index 69a2498cec6..384b000dc7a 100644 --- a/web/src/locales/fr/data.json +++ b/web/src/locales/fr/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copier le lien", @@ -1171,6 +1172,7 @@ "input password": "saisir le mot de passe" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/he/data.json b/web/src/locales/he/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/he/data.json +++ b/web/src/locales/he/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/id/data.json b/web/src/locales/id/data.json index a5def5ff65d..554b49e28fe 100644 --- a/web/src/locales/id/data.json +++ b/web/src/locales/id/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Salin Tautan", @@ -1171,6 +1172,7 @@ "input password": "masukkan kata sandi" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/it/data.json b/web/src/locales/it/data.json index 97dbb542cc5..629ae03245a 100644 --- a/web/src/locales/it/data.json +++ b/web/src/locales/it/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/ja/data.json b/web/src/locales/ja/data.json index 96666b60694..395f9f5b4f6 100644 --- a/web/src/locales/ja/data.json +++ b/web/src/locales/ja/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "コピー リンク", @@ -1171,6 +1172,7 @@ "input password": "パスワードを入力してください" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/kk/data.json b/web/src/locales/kk/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/kk/data.json +++ b/web/src/locales/kk/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/ko/data.json b/web/src/locales/ko/data.json index f7aa04fac4d..8cbef645729 100644 --- a/web/src/locales/ko/data.json +++ b/web/src/locales/ko/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "링크 복사하기", @@ -1171,6 +1172,7 @@ "input password": "비밀번호를 입력해주세요" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/ms/data.json b/web/src/locales/ms/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/ms/data.json +++ b/web/src/locales/ms/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/nl/data.json b/web/src/locales/nl/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/nl/data.json +++ b/web/src/locales/nl/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/pl/data.json b/web/src/locales/pl/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/pl/data.json +++ b/web/src/locales/pl/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/pt/data.json b/web/src/locales/pt/data.json index 448c414abdd..2091b56bc1b 100644 --- a/web/src/locales/pt/data.json +++ b/web/src/locales/pt/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copiar Link", @@ -1171,6 +1172,7 @@ "input password": "Digite a senha" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/ru/data.json b/web/src/locales/ru/data.json index fb290cacd4a..b539c3087df 100644 --- a/web/src/locales/ru/data.json +++ b/web/src/locales/ru/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Копировать ссылку", @@ -1171,6 +1172,7 @@ "input password": "введите пароль" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/sv/data.json b/web/src/locales/sv/data.json index e2111d27ba4..c396713e6f3 100644 --- a/web/src/locales/sv/data.json +++ b/web/src/locales/sv/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "input password" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/tr/data.json b/web/src/locales/tr/data.json index 866a360e9a1..9372f1f8253 100644 --- a/web/src/locales/tr/data.json +++ b/web/src/locales/tr/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Copy Link", @@ -1171,6 +1172,7 @@ "input password": "şifreyi girin" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/uk/data.json b/web/src/locales/uk/data.json index 99bd7f296d7..24540d9bfe6 100644 --- a/web/src/locales/uk/data.json +++ b/web/src/locales/uk/data.json @@ -80,6 +80,7 @@ "Only signup": "Тільки реєстрація", "Org choice mode": "Режим вибору організації", "Org choice mode - Tooltip": "Режим вибору організації – підказка", + "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"": "Please enable \\\"Signin session\\\" first before enabling \\\"Auto signin\\\"", "Please input your application!": "Будь ласка, введіть свою заявку!", "Please input your organization!": "Будь ласка, введіть вашу організацію!", "Please select a HTML file": "Виберіть файл HTML", @@ -229,6 +230,7 @@ "Email": "Електронна пошта", "Email - Tooltip": "Дійсна електронна пошта", "Email only": "Лише електронна пошта", + "Email or Phone": "Email or Phone", "Enable": "Увімкнути", "Enable dark logo": "Увімкнути темний логотип", "Enable dark logo - Tooltip": "Увімкнути темний логотип", @@ -311,6 +313,7 @@ "Phone": "Телефон", "Phone - Tooltip": "Номер телефону", "Phone only": "Тільки телефон", + "Phone or Email": "Phone or Email", "Plan": "План", "Plan - Tooltip": "План – підказка", "Plans": "Плани", @@ -391,6 +394,7 @@ "User type": "Тип користувача", "User type - Tooltip": "Теги, до яких належить користувач, за умовчанням \"звичайний користувач\"", "Users": "Користувачі", + "Users - Tooltip": "Users - Tooltip", "Users under all organizations": "Користувачі в усіх організаціях", "Verifications": "Перевірки", "Webhooks": "Веб-хуки", @@ -473,7 +477,6 @@ "LDAP username, Email or phone": "Ім’я користувача LDAP, електронна пошта або телефон", "Loading": "Завантаження", "Logging out...": "Вихід...", - "Login button": "Кнопка входу", "MetaMask plugin not detected": "Плагін MetaMask не виявлено", "Model loading failure": "Помилка завантаження моделі", "No account?": "Немає облікового запису?", @@ -498,6 +501,7 @@ "Sign in with Face ID": "Увійдіть за допомогою Face ID", "Sign in with WebAuthn": "Увійдіть за допомогою WebAuthn", "Sign in with {type}": "Увійдіть за допомогою {type}", + "Signin button": "Signin button", "Signing in...": "Вхід...", "Successfully logged in with WebAuthn credentials": "Успішно ввійшли за допомогою облікових даних WebAuthn", "The camera is currently in use by another webpage": "Камера зараз використовується іншою веб-сторінкою", @@ -893,7 +897,8 @@ "record": { "Is triggered": "Спрацьовує", "Object": "Об'єкт", - "Response": "Відповідь" + "Response": "Відповідь", + "Status code": "Status code" }, "resource": { "Copy Link": "Копіювати посилання", @@ -941,6 +946,7 @@ "Please select your country code!": "Виберіть код країни!", "Please select your country/region!": "Виберіть свою країну/регіон!", "Regex": "Регулярний вираз", + "Signup button": "Signup button", "Terms of Use": "Умови використання", "Terms of Use - Tooltip": "Умови використання, з якими користувачі повинні ознайомитися та погодитися під час реєстрації", "Text 1": "Текст 1", @@ -1162,9 +1168,11 @@ "Values": "Цінності", "Verification code sent": "Код підтвердження надіслано", "WebAuthn credentials": "Облікові дані WebAuthn", + "You have changed the username, please save your change first before modifying the password": "You have changed the username, please save your change first before modifying the password", "input password": "введіть пароль" }, "verification": { + "Is used": "Is used", "Receiver": "Приймач" }, "webhook": { diff --git a/web/src/locales/vi/data.json b/web/src/locales/vi/data.json index 65a084d2afd..0bfd2fe32eb 100644 --- a/web/src/locales/vi/data.json +++ b/web/src/locales/vi/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "Is triggered", "Object": "Object", - "Response": "Response" + "Response": "Response", + "Status code": "Status code" }, "resource": { "Copy Link": "Sao chép liên kết", @@ -1171,6 +1172,7 @@ "input password": "Nhập mật khẩu" }, "verification": { + "Is used": "Is used", "Receiver": "Receiver" }, "webhook": { diff --git a/web/src/locales/zh/data.json b/web/src/locales/zh/data.json index 1a28a3625ba..d1e6d8d24b5 100644 --- a/web/src/locales/zh/data.json +++ b/web/src/locales/zh/data.json @@ -897,7 +897,8 @@ "record": { "Is triggered": "是否触发", "Object": "实体", - "Response": "响应" + "Response": "响应", + "Status code": "状态码" }, "resource": { "Copy Link": "复制链接", @@ -1171,6 +1172,7 @@ "input password": "输入密码" }, "verification": { + "Is used": "已使用", "Receiver": "接收者" }, "webhook": { From f092f7d86e11abc4b705b33d4e14e91aae0c5a66 Mon Sep 17 00:00:00 2001 From: DacongDA Date: Sun, 12 May 2024 13:59:32 +0800 Subject: [PATCH 2/5] refactor: refactor SendWebhook and use readall to read response body --- go.sum | 2 -- object/record.go | 71 +++++++++++++++++++++++++----------------- object/webhook_util.go | 31 ++---------------- 3 files changed, 45 insertions(+), 59 deletions(-) diff --git a/go.sum b/go.sum index a7ec8aadab2..ebc658002cb 100644 --- a/go.sum +++ b/go.sum @@ -1095,8 +1095,6 @@ github.com/casdoor/oss v1.6.0 h1:IOWrGLJ+VO82qS796eaRnzFPPA1Sn3cotYTi7O/VIlQ= github.com/casdoor/oss v1.6.0/go.mod h1:rJAWA0hLhtu94t6IRpotLUkXO1NWMASirywQYaGizJE= github.com/casdoor/xorm-adapter/v3 v3.1.0 h1:NodWayRtSLVSeCvL9H3Hc61k0G17KhV9IymTCNfh3kk= github.com/casdoor/xorm-adapter/v3 v3.1.0/go.mod h1:4WTcUw+bTgBylGHeGHzTtBvuTXRS23dtwzFLl9tsgFM= -github.com/casvisor/casvisor-go-sdk v1.3.0 h1:HVgm2g3lWpNX2wBNidzR743QY4O5kAjLUJ9tS2juO8g= -github.com/casvisor/casvisor-go-sdk v1.3.0/go.mod h1:frnNtH5GA0wxzAQLyZxxfL0RSsSub9GQPi2Ybe86ocE= github.com/casvisor/casvisor-go-sdk v1.4.0 h1:hbZEGGJ1cwdHFAxeXrMoNw6yha6Oyg2F0qQhBNCN/dg= github.com/casvisor/casvisor-go-sdk v1.4.0/go.mod h1:frnNtH5GA0wxzAQLyZxxfL0RSsSub9GQPi2Ybe86ocE= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= diff --git a/object/record.go b/object/record.go index d7b20e693e0..64fa221557a 100644 --- a/object/record.go +++ b/object/record.go @@ -97,6 +97,11 @@ func NewRecord(ctx *context.Context) (*casvisorsdk.Record, error) { return &record, nil } +func addRecord(record *casvisorsdk.Record) (int64, error) { + affected, err := ormer.Engine.Insert(record) + return affected, err +} + func AddRecord(record *casvisorsdk.Record) bool { if logPostOnly { if record.Method == "GET" { @@ -119,7 +124,7 @@ func AddRecord(record *casvisorsdk.Record) bool { } if casvisorsdk.GetClient() == nil { - affected, err := ormer.Engine.Insert(record) + affected, err := addRecord(record) if err != nil { panic(err) } @@ -224,6 +229,40 @@ func getFilteredWebhooks(webhooks []*Webhook, organization string, action string return res } +func addWebhookRecord(webhook *Webhook, record *casvisorsdk.Record, statusCode int, respBody string, sendError error) error { + if statusCode == 200 { + return nil + } + + if len(respBody) > 300 { + respBody = respBody[0:300] + } + + webhookRecord := &casvisorsdk.Record{ + Owner: record.Owner, + Name: util.GenerateId(), + CreatedTime: util.GetCurrentTime(), + Organization: record.Organization, + User: record.User, + + Method: webhook.Method, + Action: "send-webhook", + RequestUri: webhook.Url, + StatusCode: statusCode, + Response: respBody, + Language: record.Language, + IsTriggered: false, + } + + if sendError != nil { + webhookRecord.Response = sendError.Error() + } + + _, err := addRecord(webhookRecord) + + return err +} + func SendWebhooks(record *casvisorsdk.Record) error { webhooks, err := getWebhooksByOrganization("") if err != nil { @@ -250,39 +289,15 @@ func SendWebhooks(record *casvisorsdk.Record) error { statusCode, respBody, err := sendWebhook(webhook, record, user) - if len(respBody) > 300 { - respBody = respBody[0:300] - } - - webhookRecord := &casvisorsdk.Record{ - Owner: record.Owner, - Name: record.Name, - Organization: record.Organization, - User: record.User, - - Method: webhook.Method, - Action: "send-webhook", - RequestUri: webhook.Url, - StatusCode: statusCode, - Response: respBody, - Language: record.Language, - IsTriggered: false, + if err != nil { + errs = append(errs, err) } + err = addWebhookRecord(webhook, record, statusCode, respBody, err) if err != nil { - webhookRecord.Response = err.Error() errs = append(errs, err) } - if err != nil || statusCode != 200 { - affected, insertError := ormer.Engine.Insert(webhookRecord) - if affected == 0 { - fmt.Printf("AddRecord() error") - } - if insertError != nil { - fmt.Printf("AddRecord() error: %s", insertError.Error()) - } - } } if len(errs) > 0 { diff --git a/object/webhook_util.go b/object/webhook_util.go index dedb461f950..9e2d0ebf3cd 100644 --- a/object/webhook_util.go +++ b/object/webhook_util.go @@ -51,35 +51,8 @@ func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *Use resp, err := client.Do(req) if resp != nil { defer resp.Body.Close() - var respBody []byte - - isChunked := false - for _, val := range resp.TransferEncoding { - if val == "chunked" { - isChunked = true - } - } - - if resp.ContentLength > 0 { - respBody = make([]byte, resp.ContentLength) - _, err = resp.Body.Read(respBody) - } else if isChunked { - data := make([]byte, 8) - for { - readN, err := resp.Body.Read(data) - if readN > 0 { - respBody = append(respBody, data...) - } - if err == io.EOF { - break - } - if err != nil { - panic(err) - } - } - } - - return resp.StatusCode, string(respBody), err + bodyBytes, err := io.ReadAll(resp.Body) + return resp.StatusCode, string(bodyBytes), err } return 0, "", err } From 2ea6112d4ea59a74e68a3ffdff1c806d58d6ba31 Mon Sep 17 00:00:00 2001 From: DacongDA Date: Sun, 12 May 2024 14:00:17 +0800 Subject: [PATCH 3/5] fix: improve code format --- object/webhook_util.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/object/webhook_util.go b/object/webhook_util.go index 9e2d0ebf3cd..18e2ceabd1f 100644 --- a/object/webhook_util.go +++ b/object/webhook_util.go @@ -49,10 +49,11 @@ func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *Use } resp, err := client.Do(req) - if resp != nil { - defer resp.Body.Close() - bodyBytes, err := io.ReadAll(resp.Body) - return resp.StatusCode, string(bodyBytes), err + if err != nil { + return 0, "", err } - return 0, "", err + + defer resp.Body.Close() + bodyBytes, err := io.ReadAll(resp.Body) + return resp.StatusCode, string(bodyBytes), err } From e21c0ca76ed1d1fb9c86adfd81e41ae3736c5e0b Mon Sep 17 00:00:00 2001 From: DacongDA Date: Sun, 12 May 2024 14:01:53 +0800 Subject: [PATCH 4/5] fix: improve code format --- object/webhook_util.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/object/webhook_util.go b/object/webhook_util.go index 18e2ceabd1f..0335c0f4bee 100644 --- a/object/webhook_util.go +++ b/object/webhook_util.go @@ -55,5 +55,8 @@ func sendWebhook(webhook *Webhook, record *casvisorsdk.Record, extendedUser *Use defer resp.Body.Close() bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + return 0, "", err + } return resp.StatusCode, string(bodyBytes), err } From 8f8f41e8afecf99ce90eebc59cb0bddf4b3146d3 Mon Sep 17 00:00:00 2001 From: DacongDA Date: Sun, 12 May 2024 14:15:14 +0800 Subject: [PATCH 5/5] fix: improve code format --- object/record.go | 1 - 1 file changed, 1 deletion(-) diff --git a/object/record.go b/object/record.go index 64fa221557a..a213917a184 100644 --- a/object/record.go +++ b/object/record.go @@ -288,7 +288,6 @@ func SendWebhooks(record *casvisorsdk.Record) error { } statusCode, respBody, err := sendWebhook(webhook, record, user) - if err != nil { errs = append(errs, err) }