+12
appview/issues/issues.go
+12
appview/issues/issues.go
···
7
"net/http"
8
"slices"
9
"strconv"
10
"time"
11
12
comatproto "github.com/bluesky-social/indigo/api/atproto"
···
20
"tangled.sh/tangled.sh/core/appview/notify"
21
"tangled.sh/tangled.sh/core/appview/oauth"
22
"tangled.sh/tangled.sh/core/appview/pages"
23
"tangled.sh/tangled.sh/core/appview/pagination"
24
"tangled.sh/tangled.sh/core/appview/reporesolver"
25
"tangled.sh/tangled.sh/core/idresolver"
···
639
640
if title == "" || body == "" {
641
rp.pages.Notice(w, "issues", "Title and body are required")
642
return
643
}
644
···
7
"net/http"
8
"slices"
9
"strconv"
10
+
"strings"
11
"time"
12
13
comatproto "github.com/bluesky-social/indigo/api/atproto"
···
21
"tangled.sh/tangled.sh/core/appview/notify"
22
"tangled.sh/tangled.sh/core/appview/oauth"
23
"tangled.sh/tangled.sh/core/appview/pages"
24
+
"tangled.sh/tangled.sh/core/appview/pages/markup"
25
"tangled.sh/tangled.sh/core/appview/pagination"
26
"tangled.sh/tangled.sh/core/appview/reporesolver"
27
"tangled.sh/tangled.sh/core/idresolver"
···
641
642
if title == "" || body == "" {
643
rp.pages.Notice(w, "issues", "Title and body are required")
644
+
return
645
+
}
646
+
647
+
sanitizer := markup.NewSanitizer()
648
+
if st := strings.TrimSpace(sanitizer.SanitizeDescription(title)); st == "" {
649
+
rp.pages.Notice(w, "issues", "Title is empty after HTML sanitization")
650
+
return
651
+
}
652
+
if sb := strings.TrimSpace(sanitizer.SanitizeDefault(body)); sb == "" {
653
+
rp.pages.Notice(w, "issues", "Body is empty after HTML sanitization")
654
return
655
}
656
+1
-1
appview/pages/templates/repo/fragments/repoDescription.html
+1
-1
appview/pages/templates/repo/fragments/repoDescription.html
···
1
{{ define "repo/fragments/repoDescription" }}
2
<span id="repo-description" class="flex flex-wrap items-center gap-2 text-sm" hx-target="this" hx-swap="outerHTML">
3
{{ if .RepoInfo.Description }}
4
-
{{ .RepoInfo.Description }}
5
{{ else }}
6
<span class="italic">this repo has no description</span>
7
{{ end }}
···
1
{{ define "repo/fragments/repoDescription" }}
2
<span id="repo-description" class="flex flex-wrap items-center gap-2 text-sm" hx-target="this" hx-swap="outerHTML">
3
{{ if .RepoInfo.Description }}
4
+
{{ .RepoInfo.Description | description }}
5
{{ else }}
6
<span class="italic">this repo has no description</span>
7
{{ end }}
+1
-1
appview/pages/templates/repo/issues/issue.html
+1
-1
appview/pages/templates/repo/issues/issue.html
+1
-1
appview/pages/templates/repo/issues/issues.html
+1
-1
appview/pages/templates/repo/issues/issues.html
+1
-1
appview/pages/templates/repo/pulls/fragments/pullHeader.html
+1
-1
appview/pages/templates/repo/pulls/fragments/pullHeader.html
+1
-1
appview/pages/templates/repo/pulls/fragments/summarizedPullHeader.html
+1
-1
appview/pages/templates/repo/pulls/fragments/summarizedPullHeader.html
+1
-1
appview/pages/templates/repo/pulls/pull.html
+1
-1
appview/pages/templates/repo/pulls/pull.html
+1
-1
appview/pages/templates/repo/pulls/pulls.html
+1
-1
appview/pages/templates/repo/pulls/pulls.html
+1
-1
appview/pages/templates/user/fragments/repoCard.html
+1
-1
appview/pages/templates/user/fragments/repoCard.html
+6
appview/pulls/pulls.go
+6
appview/pulls/pulls.go
···
19
"tangled.sh/tangled.sh/core/appview/notify"
20
"tangled.sh/tangled.sh/core/appview/oauth"
21
"tangled.sh/tangled.sh/core/appview/pages"
22
"tangled.sh/tangled.sh/core/appview/reporesolver"
23
"tangled.sh/tangled.sh/core/idresolver"
24
"tangled.sh/tangled.sh/core/knotclient"
···
737
if isPatchBased && !patchutil.IsFormatPatch(patch) {
738
if title == "" {
739
s.pages.Notice(w, "pull", "Title is required for git-diff patches.")
740
return
741
}
742
}
···
19
"tangled.sh/tangled.sh/core/appview/notify"
20
"tangled.sh/tangled.sh/core/appview/oauth"
21
"tangled.sh/tangled.sh/core/appview/pages"
22
+
"tangled.sh/tangled.sh/core/appview/pages/markup"
23
"tangled.sh/tangled.sh/core/appview/reporesolver"
24
"tangled.sh/tangled.sh/core/idresolver"
25
"tangled.sh/tangled.sh/core/knotclient"
···
738
if isPatchBased && !patchutil.IsFormatPatch(patch) {
739
if title == "" {
740
s.pages.Notice(w, "pull", "Title is required for git-diff patches.")
741
+
return
742
+
}
743
+
sanitizer := markup.NewSanitizer()
744
+
if st := strings.TrimSpace(sanitizer.SanitizeDescription(title)); (st) == "" {
745
+
s.pages.Notice(w, "pull", "Title is empty after HTML sanitization")
746
return
747
}
748
}