Eric Bower
·
30 Jan 24
scp_hooks.go
1package feeds
2
3import (
4 "fmt"
5 "strings"
6 "time"
7
8 "slices"
9
10 "github.com/charmbracelet/ssh"
11 "github.com/picosh/pico/db"
12 "github.com/picosh/pico/filehandlers"
13 "github.com/picosh/pico/shared"
14)
15
16type FeedHooks struct {
17 Cfg *shared.ConfigSite
18 Db db.DB
19}
20
21func (p *FeedHooks) FileValidate(s ssh.Session, data *filehandlers.PostMetaData) (bool, error) {
22 if !shared.IsTextFile(string(data.Text)) {
23 err := fmt.Errorf(
24 "WARNING: (%s) invalid file must be plain text (utf-8), skipping",
25 data.Filename,
26 )
27 return false, err
28 }
29
30 if !shared.IsExtAllowed(data.Filename, p.Cfg.AllowedExt) {
31 extStr := strings.Join(p.Cfg.AllowedExt, ",")
32 err := fmt.Errorf(
33 "WARNING: (%s) invalid file, format must be (%s), skipping",
34 data.Filename,
35 extStr,
36 )
37 return false, err
38 }
39
40 return true, nil
41}
42
43func (p *FeedHooks) FileMeta(s ssh.Session, data *filehandlers.PostMetaData) error {
44 parsedText := shared.ListParseText(string(data.Text))
45
46 if parsedText.Title == "" {
47 data.Title = shared.ToUpper(data.Slug)
48 } else {
49 data.Title = parsedText.Title
50 }
51
52 data.Description = parsedText.Description
53 data.Tags = parsedText.Tags
54
55 data.Hidden = slices.Contains(p.Cfg.HiddenPosts, data.Filename)
56
57 if data.Data.LastDigest == nil {
58 now := time.Now()
59 data.Data.LastDigest = &now
60 }
61
62 return nil
63}