diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index 4df5286..61f6376 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -14,7 +14,7 @@ type CachedPage struct { } type Cache struct { - sync.RWMutex + mu sync.RWMutex Cache map[string]*CachedPage } @@ -24,8 +24,8 @@ func NewCache() *Cache { func (c *Cache) Add(title string, p *core.Page) { now := time.Now() - c.Lock() - defer c.Unlock() + c.mu.Lock() + defer c.mu.Unlock() cp, ok := c.Cache[title] if ok && now.After(cp.CacheTime) { cp.Page = p @@ -37,8 +37,8 @@ func (c *Cache) Add(title string, p *core.Page) { } func (c *Cache) Get(title string) (p *core.Page) { - c.RLock() - defer c.RUnlock() + c.mu.RLock() + defer c.mu.RUnlock() if cp, ok := c.Cache[title]; ok { p = new(core.Page) *p = *cp.Page @@ -48,7 +48,7 @@ func (c *Cache) Get(title string) (p *core.Page) { } func (c *Cache) Delete(title string) { - c.Lock() + c.mu.Lock() delete(c.Cache, title) - c.Unlock() + c.mu.Unlock() } diff --git a/pkg/cmd/cmd.go b/pkg/cmd/cmd.go index 732b0bb..1231808 100644 --- a/pkg/cmd/cmd.go +++ b/pkg/cmd/cmd.go @@ -33,12 +33,12 @@ var ( configFile string ) -func initServer(cfg core.Config) (err error) { +func initServer(cfg *core.Config) (err error) { // remove initial pledge due to violation with go1.12 // sysctl kern.somaxconn - //if err = godrop.PledgePromises("stdio rpath wpath cpath inet fattr flock proc exec id unveil"); err != nil { - // return - //} + // if err = godrop.PledgePromises("stdio rpath wpath cpath inet fattr flock proc exec id unveil"); err != nil { + // return + // } dropCfg := godrop.Config{ User: cfg.User, Group: cfg.Group, @@ -117,7 +117,7 @@ func Run(version string) { stdlog.Fatal("server: ", err) } config.Version = app.Version - if err := initServer(config); err != nil { + if err := initServer(&config); err != nil { stdlog.Fatal("server: ", err) } return nil @@ -137,12 +137,12 @@ func Run(version string) { } log.Stderr() if dumpFile != "-" { - file, err = os.OpenFile(dumpFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + file, err = os.OpenFile(dumpFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o600) if err != nil { stdlog.Fatal("dump: ", err) } } - DB, err := db.NewPlain(config) + DB, err := db.NewPlain(&config) if err != nil { stdlog.Fatal("dump: ", err) } @@ -175,7 +175,7 @@ func Run(version string) { stdlog.Fatal("restore: ", err) } } - DB, err := db.NewPlain(config) + DB, err := db.NewPlain(&config) if err != nil { stdlog.Fatal("restore: ", err) } @@ -199,7 +199,7 @@ func Run(version string) { if err = loadConfig(); err != nil { stdlog.Fatal("resetadmin: ", err) } - DB, err := db.NewPlain(config) + DB, err := db.NewPlain(&config) if err != nil { stdlog.Fatal("resetadmin: ", err) } diff --git a/pkg/core/types.go b/pkg/core/types.go index 2ff6d4c..51b4d8a 100644 --- a/pkg/core/types.go +++ b/pkg/core/types.go @@ -58,7 +58,7 @@ type User struct { Locked int } -type Users []User +type Users []*User func (u Users) Len() int { return len(u) } func (u Users) Swap(i, j int) { u[i], u[j] = u[j], u[i] } diff --git a/pkg/db/db.go b/pkg/db/db.go index 54e2d92..a0fc7ff 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -34,7 +34,7 @@ type DB struct { indexPath string } -func NewPlain(cfg core.Config) (db *DB, err error) { +func NewPlain(cfg *core.Config) (db *DB, err error) { db = &DB{admin: cfg.Admin, cache: cache.NewCache()} dbFile := filepath.Join(cfg.DataDir, storeFile) err = godrop.Unveil(dbFile, "rwc") @@ -45,7 +45,7 @@ func NewPlain(cfg core.Config) (db *DB, err error) { return } -func New(cfg core.Config) (db *DB, err error) { +func New(cfg *core.Config) (db *DB, err error) { db, err = NewPlain(cfg) if err != nil { return diff --git a/pkg/db/page.go b/pkg/db/page.go index e642161..44613e2 100644 --- a/pkg/db/page.go +++ b/pkg/db/page.go @@ -30,7 +30,11 @@ func (db *DB) GetAllSections(username string, admin bool) (sections core.Section } p, err := db.getPage(k, username) if err == nil { - s := k[:strings.Index(k, "/")] + i := strings.Index(k, "/") + if i == -1 { + return nil + } + s := k[:i] if _, ok := m[s]; !ok { m[s] = core.UpdatedPages{} } diff --git a/pkg/db/user.go b/pkg/db/user.go index 924c560..b7a66a0 100644 --- a/pkg/db/user.go +++ b/pkg/db/user.go @@ -40,21 +40,22 @@ func (db *DB) GetUsers() (users core.Users, err error) { return } -func (db *DB) GetUserWithoutPassword(username string) (u core.User, err error) { +func (db *DB) GetUserWithoutPassword(username string) (u *core.User, err error) { u, err = db.GetUser(username) u.Password = "" return } func (db *DB) GetUserSecret(username string) (secret string, err error) { - var user core.User + var user *core.User user, err = db.GetUser(username) secret = user.Secret return } -func (db *DB) GetUser(username string) (u core.User, err error) { - err = db.store.Get(userPrefix+username, &u) +func (db *DB) GetUser(username string) (u *core.User, err error) { + u = new(core.User) + err = db.store.Get(userPrefix+username, u) return } @@ -86,7 +87,7 @@ func (db *DB) CreateUser(username, password string, admin bool) error { }) } -func (db *DB) Login(username, password string) (u core.User, err error) { +func (db *DB) Login(username, password string) (u *core.User, err error) { if username == defUser && !db.admin { err = errors.New("db: user disabled") return @@ -118,7 +119,7 @@ func (db *DB) Login(username, password string) (u core.User, err error) { return } -func (db *DB) Totp(username, pin string) (u core.User, err error) { +func (db *DB) Totp(username, pin string) (u *core.User, err error) { u, err = db.GetUser(username) if err != nil { return @@ -147,7 +148,7 @@ func (db *DB) Totp(username, pin string) (u core.User, err error) { } func (db *DB) UnlockUser(username string) (err error) { - var u core.User + var u *core.User u, err = db.GetUser(username) if err != nil { return diff --git a/pkg/index/index.go b/pkg/index/index.go index 6315da5..635a09e 100644 --- a/pkg/index/index.go +++ b/pkg/index/index.go @@ -42,7 +42,7 @@ func New(path string) (i *Index, err error) { return } if _, err = os.Stat(path); os.IsNotExist(err) { - err = os.Mkdir(path, 0700) + err = os.Mkdir(path, 0o700) if err != nil { err = errors.New("index: " + err.Error()) return diff --git a/pkg/log/log.go b/pkg/log/log.go index f7f6a4d..399a0ea 100644 --- a/pkg/log/log.go +++ b/pkg/log/log.go @@ -19,7 +19,7 @@ func Stderr() { log = stdlog.New(os.Stderr, "", stdlog.LstdFlags) } -func InitLogger(cfg core.Config) { +func InitLogger(cfg *core.Config) { debug = cfg.Debug if cfg.LogFile == "-" { return @@ -30,7 +30,7 @@ func InitLogger(cfg core.Config) { stdlog.Fatal(err) return } - f, err := os.OpenFile(logfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) + f, err := os.OpenFile(logfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o600) if err != nil { stdlog.Fatal(err) } diff --git a/pkg/render/render.go b/pkg/render/render.go index a12b4c2..5d7cda6 100644 --- a/pkg/render/render.go +++ b/pkg/render/render.go @@ -5,7 +5,7 @@ package render import ( "git.giftfish.de/ston1th/gowiki/pkg/core" "github.com/blevesearch/bleve/analysis" - "github.com/blevesearch/bleve/analysis/char/html" + htmlchar "github.com/blevesearch/bleve/analysis/char/html" "github.com/russross/blackfriday" "html/template" "regexp" @@ -17,7 +17,7 @@ const delim = "+" var filter = makeFilter() func makeFilter() analysis.CharFilter { - f, _ := html.CharFilterConstructor(nil, nil) + f, _ := htmlchar.CharFilterConstructor(nil, nil) return f } diff --git a/pkg/server/context.go b/pkg/server/context.go index 2dfd4a8..0500ea5 100644 --- a/pkg/server/context.go +++ b/pkg/server/context.go @@ -246,7 +246,7 @@ func (c *Context) LogSetCookie(msg string, err error) { c.SetCookie(nil, 0) } -func (c *Context) Login(u core.User, remember string) { +func (c *Context) Login(u *core.User, remember string) { var d time.Duration if remember != "" { d = day * 7 diff --git a/pkg/server/handler.go b/pkg/server/handler.go index 92437f9..9710406 100644 --- a/pkg/server/handler.go +++ b/pkg/server/handler.go @@ -465,10 +465,8 @@ func pageHandler(ctx *Context) { if ctx.T == nil { ctx.Template("pageViewHandler") } - } else { - if ctx.T == nil { - ctx.Template("pageHandler") - } + } else if ctx.T == nil { + ctx.Template("pageHandler") } page, err := ctx.Srv.DB.GetPage(section, title, user) if err != nil { @@ -866,8 +864,7 @@ func statsHandler(ctx *Context) { Title: "Stats", BodyTitle: "Stats", } - switch ctx.Method() { - case "GET": + if ctx.Method() == "GET" { ctx.Data.Data = getStats(ctx.Srv.DB.Index) ctx.Exec() } diff --git a/pkg/server/server.go b/pkg/server/server.go index f1eccdb..ebadf8e 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -24,7 +24,7 @@ const ( ) type HTTPServer struct { - Config core.Config + Config *core.Config listener net.Listener srv *http.Server @@ -36,7 +36,7 @@ type HTTPServer struct { res map[string][]byte } -func NewHTTPServer(cfg core.Config, l net.Listener) (srv *HTTPServer) { +func NewHTTPServer(cfg *core.Config, l net.Listener) (srv *HTTPServer) { srv = &HTTPServer{ Config: cfg, listener: l, diff --git a/pkg/store/boltstore.go b/pkg/store/boltstore.go index bdb0df4..62240b5 100644 --- a/pkg/store/boltstore.go +++ b/pkg/store/boltstore.go @@ -10,7 +10,7 @@ import ( const ( defaultBoltBucket = "default" - fileMode = 0600 + fileMode = 0o600 ) type BoltStore struct { @@ -26,7 +26,7 @@ func NewBoltStore(file string, m Marshaler) (Store, error) { if err != nil { return nil, err } - if err = db.Update(func(tx *bolt.Tx) (err error) { + if err := db.Update(func(tx *bolt.Tx) (err error) { _, err = tx.CreateBucketIfNotExists([]byte(defaultBoltBucket)) return }); err != nil {