single db with prefixes, dump/restore, blacklisting on user deletion
This commit is contained in:
parent
62ff59957a
commit
d4971cda89
20 changed files with 264 additions and 163 deletions
|
|
@ -9,6 +9,8 @@ import (
|
|||
"sort"
|
||||
)
|
||||
|
||||
const pagePrefix = "page/"
|
||||
|
||||
var (
|
||||
errPageNotFound = store.ErrKeyNotFound
|
||||
errPermissionDenied = dbErr("permission denied")
|
||||
|
|
@ -18,13 +20,15 @@ var (
|
|||
)
|
||||
|
||||
func (db *DB) GetAllPages(username string) (pages core.Pages) {
|
||||
db.pages.ForEach(func(title string, _ []byte) error {
|
||||
if title == core.IndexURI {
|
||||
return nil
|
||||
}
|
||||
p, err := db.GetPage(title, username)
|
||||
if err == nil {
|
||||
pages = append(pages, *p)
|
||||
db.store.ForEach(func(k string, _ []byte) error {
|
||||
if trim, ok := hasTrimPrefix(k, pagePrefix); ok {
|
||||
if trim == core.IndexURI {
|
||||
return nil
|
||||
}
|
||||
p, err := db.GetPage(trim, username)
|
||||
if err == nil {
|
||||
pages = append(pages, *p)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
|
@ -47,7 +51,7 @@ func (db *DB) GetPage(title, username string) (p *core.Page, err error) {
|
|||
|
||||
func (db *DB) getPage(title, username string) (p *core.Page, err error) {
|
||||
p = new(core.Page)
|
||||
err = db.pages.Get(title, p)
|
||||
err = db.store.Get(pagePrefix+title, p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -85,7 +89,7 @@ func (db *DB) CreatePage(title, section, markdown, username string, p core.Permi
|
|||
}
|
||||
search := render.Render(page)
|
||||
|
||||
err = db.pages.Set(st, page)
|
||||
err = db.store.Set(pagePrefix+st, page)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -121,7 +125,7 @@ func (db *DB) UpdatePage(title, section, markdown, username string, p core.Permi
|
|||
page.Perm = p
|
||||
search := render.Render(page)
|
||||
|
||||
err = db.pages.Set(st, page)
|
||||
err = db.store.Set(pagePrefix+st, page)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -134,6 +138,14 @@ func (db *DB) UpdatePage(title, section, markdown, username string, p core.Permi
|
|||
return
|
||||
}
|
||||
|
||||
func (db *DB) deletePage(st string) (err error) {
|
||||
if err = db.store.Delete(pagePrefix + st); err != nil {
|
||||
return
|
||||
}
|
||||
db.cache.Delete(st)
|
||||
return db.Index.Delete(st)
|
||||
}
|
||||
|
||||
func (db *DB) DeletePage(title, section, username string) (err error) {
|
||||
var page *core.Page
|
||||
if section == core.WikiSection && title == core.IndexPage {
|
||||
|
|
@ -147,10 +159,5 @@ func (db *DB) DeletePage(title, section, username string) (err error) {
|
|||
if !core.WritePerm(username, section, page) {
|
||||
return errPermissionDenied
|
||||
}
|
||||
|
||||
if err = db.pages.Delete(st); err != nil {
|
||||
return
|
||||
}
|
||||
db.cache.Delete(st)
|
||||
return db.Index.Delete(st)
|
||||
return db.deletePage(st)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue