summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroliverpool <git@olivier.pfad.fr>2024-03-22 16:02:48 +0100
committeroliverpool <git@olivier.pfad.fr>2024-03-30 15:59:56 +0100
commit120fa61a0a720de8d82c4bf9e65e77d8a0bddf87 (patch)
treea155db7810f4ecfdcd607e7beb3ccccf9e6e4453
parentMerge pull request 'Update module github.com/felixge/fgprof to v0.9.4' (#2805... (diff)
downloadforgejo-120fa61a0a720de8d82c4bf9e65e77d8a0bddf87.tar.xz
forgejo-120fa61a0a720de8d82c4bf9e65e77d8a0bddf87.zip
[REFACTOR] add Icon to webhook.Interface
-rw-r--r--routers/web/repo/setting/webhook.go6
-rw-r--r--services/webhook/default.go10
-rw-r--r--services/webhook/dingtalk.go3
-rw-r--r--services/webhook/discord.go2
-rw-r--r--services/webhook/feishu.go2
-rw-r--r--services/webhook/general.go8
-rw-r--r--services/webhook/gogs.go2
-rw-r--r--services/webhook/matrix.go6
-rw-r--r--services/webhook/msteams.go2
-rw-r--r--services/webhook/packagist.go2
-rw-r--r--services/webhook/slack.go2
-rw-r--r--services/webhook/telegram.go2
-rw-r--r--services/webhook/webhook.go2
-rw-r--r--services/webhook/wechatwork.go5
-rw-r--r--templates/webhook/new.tmpl2
15 files changed, 54 insertions, 2 deletions
diff --git a/routers/web/repo/setting/webhook.go b/routers/web/repo/setting/webhook.go
index bf7770bfdb..c36ebf5b14 100644
--- a/routers/web/repo/setting/webhook.go
+++ b/routers/web/repo/setting/webhook.go
@@ -132,11 +132,13 @@ func WebhookNew(ctx *context.Context) {
}
hookType := ctx.Params(":type")
- if webhook_service.GetWebhookHandler(hookType) == nil {
+ handler := webhook_service.GetWebhookHandler(hookType)
+ if handler == nil {
ctx.NotFound("GetWebhookHandler", nil)
return
}
ctx.Data["HookType"] = hookType
+ ctx.Data["WebhookHandler"] = handler
ctx.Data["BaseLink"] = orCtx.LinkNew
ctx.Data["BaseLinkNew"] = orCtx.LinkNew
@@ -194,6 +196,7 @@ func WebhookCreate(ctx *context.Context) {
ctx.Data["PageIsSettingsHooksNew"] = true
ctx.Data["Webhook"] = webhook.Webhook{HookEvent: &webhook_module.HookEvent{}}
ctx.Data["HookType"] = hookType
+ ctx.Data["WebhookHandler"] = handler
orCtx, err := getOwnerRepoCtx(ctx)
if err != nil {
@@ -358,6 +361,7 @@ func checkWebhook(ctx *context.Context) (*ownerRepoCtx, *webhook.Webhook) {
if handler := webhook_service.GetWebhookHandler(w.Type); handler != nil {
ctx.Data["HookMetadata"] = handler.Metadata(w)
+ ctx.Data["WebhookHandler"] = handler
}
ctx.Data["History"], err = w.History(ctx, 1)
diff --git a/services/webhook/default.go b/services/webhook/default.go
index f725f8a783..be3b9b3c73 100644
--- a/services/webhook/default.go
+++ b/services/webhook/default.go
@@ -10,6 +10,7 @@ import (
"crypto/sha256"
"encoding/hex"
"fmt"
+ "html/template"
"io"
"net/http"
"net/url"
@@ -17,6 +18,7 @@ import (
webhook_model "code.gitea.io/gitea/models/webhook"
"code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/svg"
webhook_module "code.gitea.io/gitea/modules/webhook"
"code.gitea.io/gitea/services/forms"
)
@@ -34,6 +36,14 @@ func (dh defaultHandler) Type() webhook_module.HookType {
return webhook_module.GITEA
}
+func (dh defaultHandler) Icon(size int) template.HTML {
+ if dh.forgejo {
+ // forgejo.svg is not in web_src/svg/, so svg.RenderHTML does not work
+ return imgIcon("forgejo.svg", size)
+ }
+ return svg.RenderHTML("gitea-gitea", size, "img")
+}
+
func (defaultHandler) Metadata(*webhook_model.Webhook) any { return nil }
func (defaultHandler) FormFields(bind func(any)) FormFields {
diff --git a/services/webhook/dingtalk.go b/services/webhook/dingtalk.go
index f4bc715e08..0a0160ac46 100644
--- a/services/webhook/dingtalk.go
+++ b/services/webhook/dingtalk.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"net/url"
"strings"
@@ -22,6 +23,8 @@ type dingtalkHandler struct{}
func (dingtalkHandler) Type() webhook_module.HookType { return webhook_module.DINGTALK }
func (dingtalkHandler) Metadata(*webhook_model.Webhook) any { return nil }
+func (dingtalkHandler) Icon(size int) template.HTML { return imgIcon("dingtalk.ico", size) }
+
func (dingtalkHandler) FormFields(bind func(any)) FormFields {
var form struct {
forms.WebhookForm
diff --git a/services/webhook/discord.go b/services/webhook/discord.go
index 3a0a973860..2efb46f5bb 100644
--- a/services/webhook/discord.go
+++ b/services/webhook/discord.go
@@ -7,6 +7,7 @@ import (
"context"
"errors"
"fmt"
+ "html/template"
"net/http"
"net/url"
"strconv"
@@ -26,6 +27,7 @@ import (
type discordHandler struct{}
func (discordHandler) Type() webhook_module.HookType { return webhook_module.DISCORD }
+func (discordHandler) Icon(size int) template.HTML { return imgIcon("discord.png", size) }
func (discordHandler) FormFields(bind func(any)) FormFields {
var form struct {
diff --git a/services/webhook/feishu.go b/services/webhook/feishu.go
index b27acc9070..eba54fa09b 100644
--- a/services/webhook/feishu.go
+++ b/services/webhook/feishu.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"strings"
@@ -19,6 +20,7 @@ import (
type feishuHandler struct{}
func (feishuHandler) Type() webhook_module.HookType { return webhook_module.FEISHU }
+func (feishuHandler) Icon(size int) template.HTML { return imgIcon("feishu.png", size) }
func (feishuHandler) FormFields(bind func(any)) FormFields {
var form struct {
diff --git a/services/webhook/general.go b/services/webhook/general.go
index c41f58fe8d..454efc6495 100644
--- a/services/webhook/general.go
+++ b/services/webhook/general.go
@@ -6,7 +6,9 @@ package webhook
import (
"fmt"
"html"
+ "html/template"
"net/url"
+ "strconv"
"strings"
webhook_model "code.gitea.io/gitea/models/webhook"
@@ -352,3 +354,9 @@ func ToHook(repoLink string, w *webhook_model.Webhook) (*api.Hook, error) {
Created: w.CreatedUnix.AsTime(),
}, nil
}
+
+func imgIcon(name string, size int) template.HTML {
+ s := strconv.Itoa(size)
+ src := html.EscapeString(setting.StaticURLPrefix + "/assets/img/" + name)
+ return template.HTML(`<img width="` + s + `" height="` + s + `" src="` + src + `">`)
+}
diff --git a/services/webhook/gogs.go b/services/webhook/gogs.go
index e23673ed35..f616f5e2f3 100644
--- a/services/webhook/gogs.go
+++ b/services/webhook/gogs.go
@@ -4,6 +4,7 @@
package webhook
import (
+ "html/template"
"net/http"
webhook_model "code.gitea.io/gitea/models/webhook"
@@ -14,6 +15,7 @@ import (
type gogsHandler struct{ defaultHandler }
func (gogsHandler) Type() webhook_module.HookType { return webhook_module.GOGS }
+func (gogsHandler) Icon(size int) template.HTML { return imgIcon("gogs.ico", size) }
func (gogsHandler) FormFields(bind func(any)) FormFields {
var form struct {
diff --git a/services/webhook/matrix.go b/services/webhook/matrix.go
index d04f0f367f..322b4d6665 100644
--- a/services/webhook/matrix.go
+++ b/services/webhook/matrix.go
@@ -9,6 +9,7 @@ import (
"crypto/sha1"
"encoding/hex"
"fmt"
+ "html/template"
"net/http"
"net/url"
"regexp"
@@ -20,6 +21,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
+ "code.gitea.io/gitea/modules/svg"
"code.gitea.io/gitea/modules/util"
webhook_module "code.gitea.io/gitea/modules/webhook"
"code.gitea.io/gitea/services/forms"
@@ -29,6 +31,10 @@ type matrixHandler struct{}
func (matrixHandler) Type() webhook_module.HookType { return webhook_module.MATRIX }
+func (matrixHandler) Icon(size int) template.HTML {
+ return svg.RenderHTML("gitea-matrix", size, "img")
+}
+
func (matrixHandler) FormFields(bind func(any)) FormFields {
var form struct {
forms.WebhookForm
diff --git a/services/webhook/msteams.go b/services/webhook/msteams.go
index 849093e9bf..940a6c49aa 100644
--- a/services/webhook/msteams.go
+++ b/services/webhook/msteams.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"net/url"
"strings"
@@ -22,6 +23,7 @@ type msteamsHandler struct{}
func (msteamsHandler) Type() webhook_module.HookType { return webhook_module.MSTEAMS }
func (msteamsHandler) Metadata(*webhook_model.Webhook) any { return nil }
+func (msteamsHandler) Icon(size int) template.HTML { return imgIcon("msteams.png", size) }
func (msteamsHandler) FormFields(bind func(any)) FormFields {
var form struct {
diff --git a/services/webhook/packagist.go b/services/webhook/packagist.go
index d8bf9ea23a..f1f3306109 100644
--- a/services/webhook/packagist.go
+++ b/services/webhook/packagist.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"net/url"
@@ -19,6 +20,7 @@ import (
type packagistHandler struct{}
func (packagistHandler) Type() webhook_module.HookType { return webhook_module.PACKAGIST }
+func (packagistHandler) Icon(size int) template.HTML { return imgIcon("packagist.png", size) }
func (packagistHandler) FormFields(bind func(any)) FormFields {
var form struct {
diff --git a/services/webhook/slack.go b/services/webhook/slack.go
index 683ef41019..0b4c4b6645 100644
--- a/services/webhook/slack.go
+++ b/services/webhook/slack.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"regexp"
"strings"
@@ -26,6 +27,7 @@ import (
type slackHandler struct{}
func (slackHandler) Type() webhook_module.HookType { return webhook_module.SLACK }
+func (slackHandler) Icon(size int) template.HTML { return imgIcon("slack.png", size) }
type slackForm struct {
forms.WebhookForm
diff --git a/services/webhook/telegram.go b/services/webhook/telegram.go
index 2ede28dbd2..daa986bafb 100644
--- a/services/webhook/telegram.go
+++ b/services/webhook/telegram.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"net/url"
"strings"
@@ -22,6 +23,7 @@ import (
type telegramHandler struct{}
func (telegramHandler) Type() webhook_module.HookType { return webhook_module.TELEGRAM }
+func (telegramHandler) Icon(size int) template.HTML { return imgIcon("telegram.png", size) }
func (telegramHandler) FormFields(bind func(any)) FormFields {
var form struct {
diff --git a/services/webhook/webhook.go b/services/webhook/webhook.go
index a7802d27dc..f27bffc29a 100644
--- a/services/webhook/webhook.go
+++ b/services/webhook/webhook.go
@@ -7,6 +7,7 @@ import (
"context"
"errors"
"fmt"
+ "html/template"
"net/http"
"strings"
@@ -35,6 +36,7 @@ type Handler interface {
// If form implements the [binding.Validator] interface, the Validate method will be called
FormFields(bind func(form any)) FormFields
NewRequest(context.Context, *webhook_model.Webhook, *webhook_model.HookTask) (req *http.Request, body []byte, err error)
+ Icon(size int) template.HTML
}
type FormFields struct {
diff --git a/services/webhook/wechatwork.go b/services/webhook/wechatwork.go
index 2ad2acd018..eff5b9b526 100644
--- a/services/webhook/wechatwork.go
+++ b/services/webhook/wechatwork.go
@@ -6,6 +6,7 @@ package webhook
import (
"context"
"fmt"
+ "html/template"
"net/http"
"strings"
@@ -21,6 +22,10 @@ type wechatworkHandler struct{}
func (wechatworkHandler) Type() webhook_module.HookType { return webhook_module.WECHATWORK }
func (wechatworkHandler) Metadata(*webhook_model.Webhook) any { return nil }
+func (wechatworkHandler) Icon(size int) template.HTML {
+ return imgIcon("wechatwork.png", size)
+}
+
func (wechatworkHandler) FormFields(bind func(any)) FormFields {
var form struct {
forms.WebhookForm
diff --git a/templates/webhook/new.tmpl b/templates/webhook/new.tmpl
index 17eb578b0e..8afdb1fa5d 100644
--- a/templates/webhook/new.tmpl
+++ b/templates/webhook/new.tmpl
@@ -2,7 +2,7 @@
{{.CustomHeaderTitle}}
<div class="ui right type dropdown">
<div class="text tw-flex tw-items-center">
- {{template "shared/webhook/icon" (dict "Size" 20 "HookType" .ctxData.HookType)}}
+ {{.ctxData.WebhookHandler.Icon 20}}
{{ctx.Locale.Tr (print "repo.settings.web_hook_name_" .ctxData.HookType)}}
</div>
{{svg "octicon-triangle-down" 14 "dropdown icon"}}