From 1025a726ef7091fba1f86ea82ccfe8a80646fac8 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Wed, 16 Dec 2020 21:24:53 +0100 Subject: [PATCH] Strict use of local dates --- database.go | 12 ++++++++++-- databaseMigrations.go | 10 ++++++++++ micropub.go | 2 +- postsDb.go | 12 +++++++----- render.go | 10 +++++----- utils.go | 17 +++++++++++++++++ 6 files changed, 50 insertions(+), 13 deletions(-) diff --git a/database.go b/database.go index cf1ddfd..0f169b5 100644 --- a/database.go +++ b/database.go @@ -4,7 +4,7 @@ import ( "database/sql" "sync" - _ "github.com/mattn/go-sqlite3" + sqlite "github.com/mattn/go-sqlite3" ) var ( @@ -15,7 +15,15 @@ var ( ) func initDatabase() (err error) { - appDb, err = sql.Open("sqlite3", appConfig.Db.File+"?cache=shared&mode=rwc&_journal_mode=WAL") + sql.Register("goblog_db", &sqlite.SQLiteDriver{ + ConnectHook: func(c *sqlite.SQLiteConn) error { + if err := c.RegisterFunc("tolocal", toLocalSafe, true); err != nil { + return err + } + return nil + }, + }) + appDb, err = sql.Open("goblog_db", appConfig.Db.File+"?cache=shared&mode=rwc&_journal_mode=WAL") if err != nil { return err } diff --git a/databaseMigrations.go b/databaseMigrations.go index 8a2ed49..b2e23cf 100644 --- a/databaseMigrations.go +++ b/databaseMigrations.go @@ -87,6 +87,16 @@ func migrateDb() error { return err }, }, + &migrator.Migration{ + Name: "00007", + Func: func(tx *sql.Tx) error { + // Change all dates to local + _, err := tx.Exec(` + update posts set published = tolocal(published), updated = tolocal(updated); + `) + return err + }, + }, ), ) if err != nil { diff --git a/micropub.go b/micropub.go index c33d391..046eace 100644 --- a/micropub.go +++ b/micropub.go @@ -398,7 +398,7 @@ func (p *post) computeExtraPostParameters() error { } if p.Published == "" && p.Section != "" { // Has no published date, but section -> published now - p.Published = time.Now().String() + p.Published = time.Now().Local().String() } // Add images not in content images := p.Parameters[appConfig.Micropub.PhotoParam] diff --git a/postsDb.go b/postsDb.go index e6537b6..7bd9a76 100644 --- a/postsDb.go +++ b/postsDb.go @@ -12,7 +12,7 @@ import ( "github.com/araddon/dateparse" ) -func (p *post) checkPost() error { +func (p *post) checkPost() (err error) { if p == nil { return errors.New("no post") } @@ -21,18 +21,16 @@ func (p *post) checkPost() error { p.Content = strings.TrimSuffix(strings.TrimPrefix(p.Content, "\n"), "\n") // Fix date strings if p.Published != "" { - d, err := dateparse.ParseLocal(p.Published) + p.Published, err = toLocal(p.Published) if err != nil { return err } - p.Published = d.String() } if p.Updated != "" { - d, err := dateparse.ParseLocal(p.Updated) + p.Updated, err = toLocal(p.Updated) if err != nil { return err } - p.Updated = d.String() } // Cleanup params for key, value := range p.Parameters { @@ -315,6 +313,10 @@ func getPosts(config *postsRequestConfig) (posts []*post, err error) { index := len(posts) paths[p.Path] = index + 1 p.Parameters = map[string][]string{} + // Fix dates + p.Published = toLocalSafe(p.Published) + p.Updated = toLocalSafe(p.Updated) + // Append posts = append(posts, p) } if parameterName != "" && posts != nil { diff --git a/render.go b/render.go index d1eaa93..df2064e 100644 --- a/render.go +++ b/render.go @@ -91,7 +91,7 @@ func initRendering() error { if err != nil { return "" } - return d.Format(format) + return d.Local().Format(format) }, "longdate": func(date string, localeString string) string { d, err := dateparse.ParseLocal(date) @@ -99,20 +99,20 @@ func initRendering() error { return "" } ml := monday.Locale(localeString) - return monday.Format(d, monday.LongFormatsByLocale[ml], ml) + return monday.Format(d.Local(), monday.LongFormatsByLocale[ml], ml) }, "unixtodate": func(unix int64) string { - return time.Unix(unix, 0).String() + return time.Unix(unix, 0).Local().String() }, "now": func() string { - return time.Now().String() + return time.Now().Local().String() }, "dateadd": func(date string, years, months, days int) string { d, err := dateparse.ParseLocal(date) if err != nil { return "" } - return d.AddDate(years, months, days).String() + return d.AddDate(years, months, days).Local().String() }, "datebefore": func(date string, before string) bool { d, err := dateparse.ParseLocal(date) diff --git a/utils.go b/utils.go index 13950c9..743d1ca 100644 --- a/utils.go +++ b/utils.go @@ -10,6 +10,7 @@ import ( "time" "github.com/PuerkitoBio/goquery" + "github.com/araddon/dateparse" ) func urlize(str string) string { @@ -139,3 +140,19 @@ func groupStrings(toGroup []string) []stringGroup { }) return stringGroups } + +func toLocalSafe(s string) string { + d, _ := toLocal(s) + return d +} + +func toLocal(s string) (string, error) { + if s == "" { + return "", nil + } + d, err := dateparse.ParseLocal(s) + if err != nil { + return "", err + } + return d.Local().String(), nil +}