Skip to content

Commit

Permalink
Merge pull request #420 from rusq/#418
Browse files Browse the repository at this point in the history
escape RTSE text
  • Loading branch information
rusq authored Jan 24, 2025
2 parents 2119ec0 + 2ec455f commit 4c99e70
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 15 deletions.
12 changes: 6 additions & 6 deletions internal/source/source.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,32 +78,32 @@ func Load(ctx context.Context, src string) (Sourcer, error) {
if st == FUnknown {
return nil, fmt.Errorf("unsupported source type: %s", src)
}
switch st {
case FChunk | FDirectory:
switch {
case st&(FChunk|FDirectory) != 0:
lg.DebugContext(ctx, "loading chunk directory")
dir, err := chunk.OpenDir(src)
if err != nil {
return nil, err
}
return NewChunkDir(dir, true), nil
case FExport | FZip:
case st&(FExport|FZip) != 0:
lg.DebugContext(ctx, "loading export zip")
f, err := zip.OpenReader(src)
if err != nil {
return nil, err
}
return NewExport(f, src)
case FExport | FDirectory:
case st&(FExport|FDirectory) != 0:
lg.DebugContext(ctx, "loading export directory")
return NewExport(os.DirFS(src), src)
case FDump | FZip:
case st&(FDump|FZip) != 0:
lg.DebugContext(ctx, "loading dump zip")
f, err := zip.OpenReader(src)
if err != nil {
return nil, err
}
return NewDump(ctx, f, src)
case FDump | FDirectory:
case st&(FDump|FDirectory) != 0:
lg.DebugContext(ctx, "loading dump directory")
return NewDump(ctx, os.DirFS(src), src)
default:
Expand Down
4 changes: 2 additions & 2 deletions internal/viewer/renderer/debug.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (

type Debug struct{}

func (d *Debug) RenderText(ctx context.Context, s string) (v template.HTML) {
return template.HTML("<pre>" + html.EscapeString(s) + "</pre>")
func (d *Debug) RenderText(ctx context.Context, s string) (v string) {
return "<pre>" + html.EscapeString(s) + "</pre>"
}

func (d *Debug) Render(ctx context.Context, m *slack.Message) (v template.HTML) {
Expand Down
2 changes: 1 addition & 1 deletion internal/viewer/renderer/renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ import (
)

type Renderer interface {
RenderText(ctx context.Context, s string) (v template.HTML)
RenderText(ctx context.Context, s string) (v string)
Render(ctx context.Context, m *slack.Message) (v template.HTML)
}
5 changes: 3 additions & 2 deletions internal/viewer/renderer/slack.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"strings"

"github.com/rusq/slack"

"github.com/rusq/slackdump/v3/internal/osext"
"github.com/rusq/slackdump/v3/internal/viewer/renderer/functions"
)
Expand Down Expand Up @@ -51,8 +52,8 @@ func NewSlack(tmpl *template.Template, opts ...SlackOption) *Slack {
return s
}

func (*Slack) RenderText(ctx context.Context, s string) (v template.HTML) {
return template.HTML(parseSlackMd(s))
func (*Slack) RenderText(ctx context.Context, s string) (v string) {
return parseSlackMd(s)
}

func (s *Slack) Render(ctx context.Context, m *slack.Message) (v template.HTML) {
Expand Down
5 changes: 4 additions & 1 deletion internal/viewer/renderer/slack_rich_text.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package renderer

import (
"fmt"
"html"
"log/slog"
"strings"

Expand Down Expand Up @@ -59,7 +60,7 @@ func (s *Slack) rtseText(ie slack.RichTextSectionElement) (string, string, error
if !ok {
return "", "", NewErrIncorrectType(&slack.RichTextSectionTextElement{}, ie)
}
t := strings.ReplaceAll(e.Text, "\n", "<br>")
t := strings.ReplaceAll(html.EscapeString(e.Text), "\n", "<br>")

return applyStyle(t, e.Style), "", nil
}
Expand Down Expand Up @@ -90,6 +91,8 @@ func (s *Slack) rtseLink(ie slack.RichTextSectionElement) (string, string, error
}
if e.Text == "" {
e.Text = e.URL
} else {
e.Text = html.EscapeString(e.Text)
}
return fmt.Sprintf("<a href=\"%s\">%s</a>", e.URL, e.Text), "", nil
}
Expand Down
10 changes: 10 additions & 0 deletions internal/viewer/renderer/slack_rich_text_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,16 @@ func Test_rtseText(t *testing.T) {
"",
false,
},
{
"marquee",
&Slack{},
args{
ie: slack.RichTextSectionElement(slack.NewRichTextSectionTextElement("Hello <MARQUEE> frenchesco's old\nfriend", nil)),
},
"Hello &lt;MARQUEE&gt; frenchesco&#39;s old<br>friend",
"",
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion internal/viewer/renderer/slack_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func TestSlack_Render(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
sm := &Slack{}
gotV := sm.Render(context.Background(), tt.args.m)
assert.Equal(t, gotV, tt.wantV)
assert.Equal(t, tt.wantV, gotV)
})
}
}
Expand Down
5 changes: 3 additions & 2 deletions internal/viewer/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,22 @@ import (
"time"

"github.com/rusq/slack"

st "github.com/rusq/slackdump/v3/internal/structures"
)

//go:embed templates
var fsys embed.FS

func initTemplates(v *Viewer) {
var tmpl = template.Must(template.New("").Funcs(
tmpl := template.Must(template.New("").Funcs(
template.FuncMap{
"rendername": v.um.ChannelName,
"is_app_msg": isAppMsg,
"displayname": v.um.DisplayName,
"username": v.username, // username returns the username for the message
"time": localtime,
"rendertext": func(s string) template.HTML { return v.r.RenderText(context.Background(), s) }, // render message text
"rendertext": func(s string) string { return v.r.RenderText(context.Background(), s) }, // render message text
"render": func(m *slack.Message) template.HTML { return v.r.Render(context.Background(), m) }, // render message
"is_thread_start": st.IsThreadStart,
},
Expand Down

0 comments on commit 4c99e70

Please sign in to comment.