mirror of https://github.com/jlelse/GoBlog
Refactor time usages (use Format instead of String)
This commit is contained in:
parent
fe825e4778
commit
ea00ff5788
|
@ -70,6 +70,9 @@ func (a *goBlog) openDatabase(file string, logging bool) (*database, error) {
|
||||||
if err := c.RegisterFunc("tolocal", toLocalSafe, true); err != nil {
|
if err := c.RegisterFunc("tolocal", toLocalSafe, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := c.RegisterFunc("toutc", toUTCSafe, true); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := c.RegisterFunc("wordcount", wordCount, true); err != nil {
|
if err := c.RegisterFunc("wordcount", wordCount, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,10 +219,29 @@ func migrateDb(db *sql.DB, logging bool) error {
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
&migrator.Migration{
|
||||||
|
Name: "00018",
|
||||||
|
Func: func(tx *sql.Tx) error {
|
||||||
|
_, err := tx.Exec(`
|
||||||
|
update queue set schedule = toutc(schedule);
|
||||||
|
update persistent_cache set date = toutc(date);
|
||||||
|
update sessions set created = toutc(created), modified = toutc(modified), expires = toutc(expires);
|
||||||
|
`)
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return m.Migrate(db)
|
err = m.Migrate(db)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// Update times in database to local time
|
||||||
|
_, err = db.Exec(`
|
||||||
|
update posts set published = tolocal(published), updated = tolocal(updated);
|
||||||
|
`)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,10 +91,10 @@ func (a *goBlog) indieAuthAccept(w http.ResponseWriter, r *http.Request) {
|
||||||
RedirectURI: r.Form.Get("redirect_uri"),
|
RedirectURI: r.Form.Get("redirect_uri"),
|
||||||
State: r.Form.Get("state"),
|
State: r.Form.Get("state"),
|
||||||
Scopes: r.Form["scopes"],
|
Scopes: r.Form["scopes"],
|
||||||
time: time.Now(),
|
time: time.Now().UTC(),
|
||||||
}
|
}
|
||||||
sha := sha1.New()
|
sha := sha1.New()
|
||||||
if _, err := sha.Write([]byte(data.time.String() + data.ClientID)); err != nil {
|
if _, err := sha.Write([]byte(data.time.Format(time.RFC3339) + data.ClientID)); err != nil {
|
||||||
a.serveError(w, r, err.Error(), http.StatusInternalServerError)
|
a.serveError(w, r, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -190,9 +190,9 @@ func (a *goBlog) indieAuthToken(w http.ResponseWriter, r *http.Request) {
|
||||||
a.serveError(w, r, "No scope", http.StatusBadRequest)
|
a.serveError(w, r, "No scope", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
data.time = time.Now()
|
data.time = time.Now().UTC()
|
||||||
sha := sha1.New()
|
sha := sha1.New()
|
||||||
if _, err := sha.Write([]byte(data.time.String() + data.ClientID)); err != nil {
|
if _, err := sha.Write([]byte(data.time.Format(time.RFC3339) + data.ClientID)); err != nil {
|
||||||
a.serveError(w, r, err.Error(), http.StatusInternalServerError)
|
a.serveError(w, r, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"go.goblog.app/app/pkgs/contenttype"
|
"go.goblog.app/app/pkgs/contenttype"
|
||||||
|
@ -370,7 +369,7 @@ func (a *goBlog) computeExtraPostParameters(p *post) error {
|
||||||
}
|
}
|
||||||
if p.Published == "" && p.Section != "" {
|
if p.Published == "" && p.Section != "" {
|
||||||
// Has no published date, but section -> published now
|
// Has no published date, but section -> published now
|
||||||
p.Published = time.Now().Local().String()
|
p.Published = localNowString()
|
||||||
}
|
}
|
||||||
// Add images not in content
|
// Add images not in content
|
||||||
images := p.Parameters[a.cfg.Micropub.PhotoParam]
|
images := p.Parameters[a.cfg.Micropub.PhotoParam]
|
||||||
|
|
|
@ -2,12 +2,10 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (db *database) cachePersistently(key string, data []byte) error {
|
func (db *database) cachePersistently(key string, data []byte) error {
|
||||||
date, _ := toLocal(time.Now().String())
|
_, err := db.exec("insert or replace into persistent_cache(key, data, date) values(@key, @data, @date)", sql.Named("key", key), sql.Named("data", data), sql.Named("date", utcNowString()))
|
||||||
_, err := db.exec("insert or replace into persistent_cache(key, data, date) values(@key, @data, @date)", sql.Named("key", key), sql.Named("data", data), sql.Named("date", date))
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
27
queue.go
27
queue.go
|
@ -8,15 +8,6 @@ import (
|
||||||
"github.com/araddon/dateparse"
|
"github.com/araddon/dateparse"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (db *database) enqueue(name string, content []byte, schedule time.Time) error {
|
|
||||||
if len(content) == 0 {
|
|
||||||
return errors.New("empty content")
|
|
||||||
}
|
|
||||||
_, err := db.exec("insert into queue (name, content, schedule) values (@name, @content, @schedule)",
|
|
||||||
sql.Named("name", name), sql.Named("content", content), sql.Named("schedule", schedule.UTC().String()))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
type queueItem struct {
|
type queueItem struct {
|
||||||
id int
|
id int
|
||||||
name string
|
name string
|
||||||
|
@ -24,8 +15,17 @@ type queueItem struct {
|
||||||
schedule *time.Time
|
schedule *time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *database) enqueue(name string, content []byte, schedule time.Time) error {
|
||||||
|
if len(content) == 0 {
|
||||||
|
return errors.New("empty content")
|
||||||
|
}
|
||||||
|
_, err := db.exec("insert into queue (name, content, schedule) values (@name, @content, @schedule)",
|
||||||
|
sql.Named("name", name), sql.Named("content", content), sql.Named("schedule", schedule.UTC().Format(time.RFC3339)))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (db *database) reschedule(qi *queueItem, dur time.Duration) error {
|
func (db *database) reschedule(qi *queueItem, dur time.Duration) error {
|
||||||
_, err := db.exec("update queue set schedule = @schedule, content = @content where id = @id", sql.Named("schedule", qi.schedule.Add(dur).UTC().String()), sql.Named("content", qi.content), sql.Named("id", qi.id))
|
_, err := db.exec("update queue set schedule = @schedule, content = @content where id = @id", sql.Named("schedule", qi.schedule.Add(dur).UTC().Format(time.RFC3339)), sql.Named("content", qi.content), sql.Named("id", qi.id))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,23 +35,22 @@ func (db *database) dequeue(qi *queueItem) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *database) peekQueue(name string) (*queueItem, error) {
|
func (db *database) peekQueue(name string) (*queueItem, error) {
|
||||||
row, err := db.queryRow("select id, name, content, schedule from queue where schedule <= @schedule and name = @name order by schedule asc limit 1", sql.Named("name", name), sql.Named("schedule", time.Now().UTC().String()))
|
row, err := db.queryRow("select id, name, content, schedule from queue where schedule <= @schedule and name = @name order by schedule asc limit 1", sql.Named("name", name), sql.Named("schedule", time.Now().UTC().Format(time.RFC3339)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
qi := &queueItem{}
|
qi := &queueItem{}
|
||||||
var timeString string
|
var timeString string
|
||||||
if err = row.Scan(&qi.id, &qi.name, &qi.content, &timeString); err != nil {
|
if err = row.Scan(&qi.id, &qi.name, &qi.content, &timeString); err != nil {
|
||||||
if err == sql.ErrNoRows {
|
if errors.Is(err, sql.ErrNoRows) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
t, err := dateparse.ParseLocal(timeString)
|
t, err := dateparse.ParseIn(timeString, time.UTC)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
t = t.Local()
|
|
||||||
qi.schedule = &t
|
qi.schedule = &t
|
||||||
return qi, nil
|
return qi, nil
|
||||||
}
|
}
|
||||||
|
|
16
sessions.go
16
sessions.go
|
@ -21,8 +21,10 @@ const (
|
||||||
|
|
||||||
func (a *goBlog) initSessions() {
|
func (a *goBlog) initSessions() {
|
||||||
deleteExpiredSessions := func() {
|
deleteExpiredSessions := func() {
|
||||||
if _, err := a.db.exec("delete from sessions where expires < @now",
|
if _, err := a.db.exec(
|
||||||
sql.Named("now", time.Now().Local().String())); err != nil {
|
"delete from sessions where expires < @now",
|
||||||
|
sql.Named("now", utcNowString()),
|
||||||
|
); err != nil {
|
||||||
log.Println("Failed to delete expired sessions:", err.Error())
|
log.Println("Failed to delete expired sessions:", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,9 +137,9 @@ func (s *dbSessionStore) load(session *sessions.Session) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *dbSessionStore) insert(session *sessions.Session) (err error) {
|
func (s *dbSessionStore) insert(session *sessions.Session) (err error) {
|
||||||
created := time.Now()
|
created := time.Now().UTC()
|
||||||
modified := time.Now()
|
modified := time.Now().UTC()
|
||||||
expires := time.Now().Add(time.Second * time.Duration(session.Options.MaxAge))
|
expires := time.Now().UTC().Add(time.Second * time.Duration(session.Options.MaxAge))
|
||||||
delete(session.Values, sessionCreatedOn)
|
delete(session.Values, sessionCreatedOn)
|
||||||
delete(session.Values, sessionExpiresOn)
|
delete(session.Values, sessionExpiresOn)
|
||||||
delete(session.Values, sessionModifiedOn)
|
delete(session.Values, sessionModifiedOn)
|
||||||
|
@ -146,7 +148,7 @@ func (s *dbSessionStore) insert(session *sessions.Session) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
res, err := s.db.exec("insert into sessions(data, created, modified, expires) values(@data, @created, @modified, @expires)",
|
res, err := s.db.exec("insert into sessions(data, created, modified, expires) values(@data, @created, @modified, @expires)",
|
||||||
sql.Named("data", encoded), sql.Named("created", created.Local().String()), sql.Named("modified", modified.Local().String()), sql.Named("expires", expires.Local().String()))
|
sql.Named("data", encoded), sql.Named("created", created.Format(time.RFC3339)), sql.Named("modified", modified.Format(time.RFC3339)), sql.Named("expires", expires.Format(time.RFC3339)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -170,7 +172,7 @@ func (s *dbSessionStore) save(session *sessions.Session) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = s.db.exec("update sessions set data = @data, modified = @modified where id = @id",
|
_, err = s.db.exec("update sessions set data = @data, modified = @modified where id = @id",
|
||||||
sql.Named("data", encoded), sql.Named("modified", time.Now().Local().String()), sql.Named("id", session.ID))
|
sql.Named("data", encoded), sql.Named("modified", utcNowString()), sql.Named("id", session.ID))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
26
utils.go
26
utils.go
|
@ -132,7 +132,23 @@ func toLocal(s string) (string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return d.Local().String(), nil
|
return d.Local().Format(time.RFC3339), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func toUTCSafe(s string) string {
|
||||||
|
d, _ := toUTC(s)
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func toUTC(s string) (string, error) {
|
||||||
|
if s == "" {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
d, err := dateparse.ParseLocal(s)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return d.UTC().Format(time.RFC3339), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dateFormat(date string, format string) string {
|
func dateFormat(date string, format string) string {
|
||||||
|
@ -148,11 +164,15 @@ func isoDateFormat(date string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func unixToLocalDateString(unix int64) string {
|
func unixToLocalDateString(unix int64) string {
|
||||||
return time.Unix(unix, 0).Local().String()
|
return time.Unix(unix, 0).Local().Format(time.RFC3339)
|
||||||
}
|
}
|
||||||
|
|
||||||
func localNowString() string {
|
func localNowString() string {
|
||||||
return time.Now().Local().String()
|
return time.Now().Local().Format(time.RFC3339)
|
||||||
|
}
|
||||||
|
|
||||||
|
func utcNowString() string {
|
||||||
|
return time.Now().UTC().Format(time.RFC3339)
|
||||||
}
|
}
|
||||||
|
|
||||||
type stringPair struct {
|
type stringPair struct {
|
||||||
|
|
Loading…
Reference in New Issue