From 4812a60367ae13816b3bd7a5b0be9366b49b0afb Mon Sep 17 00:00:00 2001 From: ston1th Date: Tue, 11 Jun 2019 19:56:08 +0200 Subject: [PATCH] better search view and admin user reset --- pkg/cmd/cmd.go | 24 ++++++++++++++++++++++++ pkg/core/types.go | 1 + pkg/db/db.go | 25 ++++++++++++++++++++----- pkg/db/user.go | 4 ++++ pkg/index/index.go | 10 +++------- pkg/server/templates.go | 2 +- templates/search.html | 2 +- 7 files changed, 54 insertions(+), 14 deletions(-) diff --git a/pkg/cmd/cmd.go b/pkg/cmd/cmd.go index 757db0e..fb7ad2b 100644 --- a/pkg/cmd/cmd.go +++ b/pkg/cmd/cmd.go @@ -190,6 +190,30 @@ func Run(version string) { return nil }, }, + { + Name: "resetadmin", + Usage: "reset the admin users password to the default (gowiki needs to be stopped)", + Flags: defaultFlags(nil), + Action: func(c *cli.Context) error { + var err error + if err = loadConfig(); err != nil { + stdlog.Fatal("resetadmin: ", err) + } + DB, err := db.New(config) + if err != nil { + stdlog.Fatal("resetadmin: ", err) + } + err = DB.ResetAdmin() + if err != nil { + stdlog.Fatal("resetadmin: ", err) + } + err = DB.Close() + if err != nil { + stdlog.Fatal("resetadmin: ", err) + } + return nil + }, + }, } app.Run(os.Args) } diff --git a/pkg/core/types.go b/pkg/core/types.go index 183039f..d0ffa23 100644 --- a/pkg/core/types.go +++ b/pkg/core/types.go @@ -67,6 +67,7 @@ func (u Users) Less(i, j int) bool { return u[i].Username < u[j].Username } type Result struct { Title string + Section string StoreTitle string HTML template.HTML } diff --git a/pkg/db/db.go b/pkg/db/db.go index 3991f2d..d152fa3 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -10,6 +10,7 @@ import ( "git.giftfish.de/ston1th/gowiki/pkg/render" "git.giftfish.de/ston1th/gowiki/pkg/store" "io" + "os" "path/filepath" ) @@ -26,10 +27,11 @@ You can customize it how you like.` const blevePath = "bleve" type DB struct { - admin bool - store store.Store - cache *cache.Cache - Index *index.Index + admin bool + store store.Store + cache *cache.Cache + Index *index.Index + indexPath string } func New(cfg core.Config) (db *DB, err error) { @@ -43,7 +45,8 @@ func New(cfg core.Config) (db *DB, err error) { if err != nil { return } - db.Index, err = index.NewIndex(filepath.Join(cfg.DataDir, blevePath)) + db.indexPath = filepath.Join(cfg.DataDir, blevePath) + db.Index, err = index.New(db.indexPath) if err != nil { return } @@ -77,6 +80,18 @@ func (db *DB) Dump(w io.Writer) error { } func (db *DB) Restore(r io.Reader) (err error) { + err = db.Index.Close() + if err != nil { + return + } + err = os.RemoveAll(db.indexPath) + if err != nil { + return + } + db.Index, err = index.New(db.indexPath) + if err != nil { + return + } err = db.store.Restore(r) if err != nil { return diff --git a/pkg/db/user.go b/pkg/db/user.go index af8cb60..1954662 100644 --- a/pkg/db/user.go +++ b/pkg/db/user.go @@ -185,6 +185,10 @@ func (db *DB) UpdateUserPassword(username, password string) error { return db.store.Set(userPrefix+username, u) } +func (db *DB) ResetAdmin() error { + return db.UpdateUserPassword(defUser, defPassword) +} + func (db *DB) AdminUpdateUser(username, password string, admin bool) error { if username == defUser && !admin { return errors.New("user '" + defUser + "' cannot lose admin privileges") diff --git a/pkg/index/index.go b/pkg/index/index.go index fe614c5..66e5e1f 100644 --- a/pkg/index/index.go +++ b/pkg/index/index.go @@ -6,6 +6,7 @@ import ( "errors" "git.giftfish.de/ston1th/godrop/v2" "git.giftfish.de/ston1th/gowiki/pkg/core" + "git.giftfish.de/ston1th/gowiki/pkg/render" "github.com/blevesearch/bleve" "github.com/blevesearch/bleve/mapping" "html/template" @@ -32,7 +33,7 @@ type Index struct { i bleve.Index } -func NewIndex(path string) (i *Index, err error) { +func New(path string) (i *Index, err error) { var bi bleve.Index err = godrop.Unveil(path, "rwc") if err != nil { @@ -102,16 +103,11 @@ func (i *Index) Search(search string) (results []core.Result, err error) { continue } r := core.Result{StoreTitle: hit.ID} + r.Section, r.Title = render.SplitStoreTitle(hit.ID) d, err := i.i.Document(hit.ID) if d == nil || err != nil { continue } - for _, v := range d.Fields { - if v.Name() == "title" { - r.Title = string(v.Value()) - break - } - } for fragField, frags := range hit.Fragments { if fragField == "title" || fragField == "search" { for _, f := range frags { diff --git a/pkg/server/templates.go b/pkg/server/templates.go index b7f22fc..2e789be 100644 --- a/pkg/server/templates.go +++ b/pkg/server/templates.go @@ -453,7 +453,7 @@ const (
{{range $item := .Data}} - {{$item.Title}} + {{$item.Section}} / {{$item.Title}}
{{$item.HTML}}

{{end}}
diff --git a/templates/search.html b/templates/search.html index 3c4a0a8..83e08ee 100644 --- a/templates/search.html +++ b/templates/search.html @@ -22,7 +22,7 @@
{{range $item := .Data}} - {{$item.Title}} + {{$item.Section}} / {{$item.Title}}
{{$item.HTML}}

{{end}}