Fixed Page model form accepting bad input.
This commit is contained in:
+1
-1
@@ -32,7 +32,7 @@ var pageCategories []string
|
|||||||
|
|
||||||
// init setups pageCategories
|
// init setups pageCategories
|
||||||
func init() {
|
func init() {
|
||||||
pageCategories := make([]string, len(PageCategories))
|
pageCategories = make([]string, len(PageCategories))
|
||||||
for i, category := range PageCategories {
|
for i, category := range PageCategories {
|
||||||
pageCategories[i] = category.Key
|
pageCategories[i] = category.Key
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-4
@@ -208,7 +208,12 @@ func (page *Page) ParseForm(form url.Values) []error {
|
|||||||
errors := make([]error, 0, 4)
|
errors := make([]error, 0, 4)
|
||||||
page.cachedOutput = ""
|
page.cachedOutput = ""
|
||||||
|
|
||||||
err := formparser.Select(form.Get("category"), &page.Category, pageCategories, page.Category != "")
|
err := formparser.String(form.Get("name"), &page.Name, 2, 192)
|
||||||
|
if err != nil {
|
||||||
|
errors = append(errors, fmt.Errorf("Name: %s", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
err = formparser.Select(form.Get("category"), &page.Category, pageCategories, page.Category != "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errors = append(errors, fmt.Errorf("Category: %s", err))
|
errors = append(errors, fmt.Errorf("Category: %s", err))
|
||||||
}
|
}
|
||||||
@@ -231,15 +236,15 @@ func (page *Page) ParseForm(form url.Values) []error {
|
|||||||
|
|
||||||
err = formparser.Select(form.Get("type"), &page.Type, PageTypes, page.Type != "")
|
err = formparser.Select(form.Get("type"), &page.Type, PageTypes, page.Type != "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errors = append(errors, fmt.Errorf("Category: %s", err))
|
errors = append(errors, fmt.Errorf("Type: %s", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = formparser.String(form.Get("source"), &page.Source, 0, 102400)
|
err = formparser.String(form.Get("source"), &page.Source, 0, 102400)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errors = append(errors, fmt.Errorf("Content is too long, max: 100 KB (~17,000 words)"))
|
errors = append(errors, fmt.Errorf("Content is too long, max: 100 KB (~16k words)"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(errors) > 0 {
|
if len(errors) == 0 {
|
||||||
errors = nil
|
errors = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -289,4 +290,25 @@ func TestPage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
t.Logf("Deleted %+v", extraPageTag)
|
t.Logf("Deleted %+v", extraPageTag)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("ParseForm", func(t *testing.T) {
|
||||||
|
page := Page{}
|
||||||
|
values := url.Values{}
|
||||||
|
|
||||||
|
values.Set("name", "Wenera's OSD")
|
||||||
|
values.Set("category", "Item")
|
||||||
|
values.Set("type", "Markdown")
|
||||||
|
values.Set("source", "# Wenera's OSD\n\nIt contains stuff and things")
|
||||||
|
values.Set("fictionalDate", "2185-10-28T00:00:00Z")
|
||||||
|
|
||||||
|
err := page.ParseForm(values)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("1: %+v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(t, "page.Name", page.Name, values.Get("name"))
|
||||||
|
assertEquals(t, "page.Category", page.Category, values.Get("category"))
|
||||||
|
assertEquals(t, "page.Source", page.Source, values.Get("source"))
|
||||||
|
t.Log("page.FictionalDate =", page.FictionalDate)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user