From 61c6207b39543f78cd9d14e1f10414dee94839a7 Mon Sep 17 00:00:00 2001 From: Umputun Date: Wed, 31 Jan 2018 03:12:25 -0600 Subject: [PATCH] separate sort --- app/migrator/migrator.go | 3 +++ app/rest/auth/auth.go | 1 + app/rest/server.go | 11 ++++++----- app/store/bolt.go | 22 +--------------------- app/store/store.go | 23 +++++++++++++++++++++++ 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/app/migrator/migrator.go b/app/migrator/migrator.go index 2f8332ca..6b820b07 100644 --- a/app/migrator/migrator.go +++ b/app/migrator/migrator.go @@ -1,3 +1,6 @@ +// Package migrator provides import/export functionality. It defines Importer and Exporter interfaces +// amd implements for disqus (importer only) and "native" remark (both importer and exporter). +// Also implements AutoBackup scheduler running exports as backups and saving them locally. package migrator import ( diff --git a/app/rest/auth/auth.go b/app/rest/auth/auth.go index f49ffed8..cdf129e8 100644 --- a/app/rest/auth/auth.go +++ b/app/rest/auth/auth.go @@ -1,3 +1,4 @@ +// Package auth provides oauth2 support as well as related middlewares. package auth import ( diff --git a/app/rest/server.go b/app/rest/server.go index 2dfdd6aa..9be1a0ba 100644 --- a/app/rest/server.go +++ b/app/rest/server.go @@ -46,7 +46,7 @@ func (s *Server) Run(port int) { log.Print("[INFO] activate rest server") // add auth.Developer flag if dev mode is active - maybeDevMode := func(mode auth.Mode) (modes []auth.Mode) { + maybeWithDevMode := func(mode auth.Mode) (modes []auth.Mode) { modes = append(modes, mode) if s.DevMode { modes = append(modes, auth.Developer) @@ -62,8 +62,8 @@ func (s *Server) Run(port int) { router.Use(middleware.RealIP, Recoverer) router.Use(middleware.Throttle(1000), middleware.Timeout(60*time.Second)) router.Use(Limiter(10), AppInfo("remark42", s.Version), Ping, Logger(LogAll)) - router.Use(auth.Auth(s.SessionStore, s.Admins, maybeDevMode(auth.Anonymous))) // all request by default allow anonymous access - + // all request by default allow anonymous access + router.Use(auth.Auth(s.SessionStore, s.Admins, maybeWithDevMode(auth.Anonymous))) router.Use(context.ClearHandler) // if you aren't using gorilla/mux, you need to wrap your handlers with context.ClearHandler // auth routes for all providers @@ -72,7 +72,8 @@ func (s *Server) Run(port int) { r.Mount("/"+provider.Name, provider.Routes()) // mount auth providers as /auth/{name} } if len(s.AuthProviders) > 0 { - r.Get("/logout", s.AuthProviders[0].LogoutHandler) // shortcut, can be any of providers, all logouts do the same + // shortcut, can be any of providers, all logouts do the same - removes cookie + r.Get("/logout", s.AuthProviders[0].LogoutHandler) } }) @@ -88,7 +89,7 @@ func (s *Server) Run(port int) { rapi.Get("/list", s.listCtrl) // protected routes, require auth - rapi.With(auth.Auth(s.SessionStore, s.Admins, maybeDevMode(auth.Full))).Group(func(rauth chi.Router) { + rapi.With(auth.Auth(s.SessionStore, s.Admins, maybeWithDevMode(auth.Full))).Group(func(rauth chi.Router) { rauth.Post("/comment", s.createCommentCtrl) rauth.Put("/comment/{id}", s.updateCommentCtrl) rauth.Get("/user", s.userInfoCtrl) diff --git a/app/store/bolt.go b/app/store/bolt.go index 975eebad..597d989d 100644 --- a/app/store/bolt.go +++ b/app/store/bolt.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "log" - "sort" "strings" "time" @@ -178,26 +177,7 @@ func (b *BoltDB) Find(locator Locator, sortFld string) (comments []Comment, err }) }) - // sort result according to sortFld - sort.Slice(comments, func(i, j int) bool { - switch sortFld { - case "+time", "-time", "time": - if strings.HasPrefix(sortFld, "-") { - return comments[i].Timestamp.After(comments[j].Timestamp) - } - return comments[i].Timestamp.Before(comments[j].Timestamp) - - case "+score", "-score", "score": - if strings.HasPrefix(sortFld, "-") { - return comments[i].Score > comments[j].Score - } - return comments[i].Score < comments[j].Score - - default: - return comments[i].Timestamp.Before(comments[j].Timestamp) - } - }) - + comments = sortComments(comments, sortFld) return comments, err } diff --git a/app/store/store.go b/app/store/store.go index 75f8a94b..32b5ab42 100644 --- a/app/store/store.go +++ b/app/store/store.go @@ -8,6 +8,7 @@ import ( "fmt" "html/template" "log" + "sort" "strings" "time" @@ -109,3 +110,25 @@ func sanitizeComment(comment Comment) Comment { return comment } + +func sortComments(comments []Comment, sortFld string) []Comment { + sort.Slice(comments, func(i, j int) bool { + switch sortFld { + case "+time", "-time", "time": + if strings.HasPrefix(sortFld, "-") { + return comments[i].Timestamp.After(comments[j].Timestamp) + } + return comments[i].Timestamp.Before(comments[j].Timestamp) + + case "+score", "-score", "score": + if strings.HasPrefix(sortFld, "-") { + return comments[i].Score > comments[j].Score + } + return comments[i].Score < comments[j].Score + + default: + return comments[i].Timestamp.Before(comments[j].Timestamp) + } + }) + return comments +}