nicer file names for posts

This commit is contained in:
Niko Abeler 2022-10-13 20:58:16 +02:00
parent bdb08657e3
commit 0a3af85b02
3 changed files with 32 additions and 3 deletions

View File

@ -3,6 +3,7 @@ package owl
import ( import (
"os" "os"
"path/filepath" "path/filepath"
"strings"
) )
func dirExists(path string) bool { func dirExists(path string) bool {
@ -38,3 +39,24 @@ func walkDir(path string) []string {
}) })
return files return files
} }
func toDirectoryName(name string) string {
name = strings.ToLower(strings.ReplaceAll(name, " ", "-"))
// remove all non-alphanumeric characters
name = strings.Map(func(r rune) rune {
if r >= 'a' && r <= 'z' {
return r
}
if r >= 'A' && r <= 'Z' {
return r
}
if r >= '0' && r <= '9' {
return r
}
if r == '-' {
return r
}
return -1
}, name)
return name
}

View File

@ -142,8 +142,7 @@ func (user User) GetPost(id string) (Post, error) {
} }
func (user User) CreateNewPost(title string, draft bool) (Post, error) { func (user User) CreateNewPost(title string, draft bool) (Post, error) {
timestamp := time.Now().UTC().Unix() folder_name := toDirectoryName(title)
folder_name := fmt.Sprintf("%d-%s", timestamp, title)
post_dir := path.Join(user.Dir(), "public", folder_name) post_dir := path.Join(user.Dir(), "public", folder_name)
// if post already exists, add -n to the end of the name // if post already exists, add -n to the end of the name
@ -151,7 +150,7 @@ func (user User) CreateNewPost(title string, draft bool) (Post, error) {
for { for {
if dirExists(post_dir) { if dirExists(post_dir) {
i++ i++
folder_name = fmt.Sprintf("%d-%s-%d", timestamp, title, i) folder_name = toDirectoryName(fmt.Sprintf("%s-%d", title, i))
post_dir = path.Join(user.Dir(), "public", folder_name) post_dir = path.Join(user.Dir(), "public", folder_name)
} else { } else {
break break

View File

@ -317,3 +317,11 @@ func TestAvatarSetIfFileExist(t *testing.T) {
t.Error("Avatar should not be empty") t.Error("Avatar should not be empty")
} }
} }
func TestPostNameIllegalFileName(t *testing.T) {
user := getTestUser()
_, err := user.CreateNewPost("testpost?///", false)
if err != nil {
t.Error("Should not have failed")
}
}