split db and bolt to store interface

This commit is contained in:
ston1th 2018-09-11 14:50:53 +02:00
commit 7e77fd7d27
14 changed files with 419 additions and 545 deletions

View file

@ -6,6 +6,7 @@ import (
"crypto/subtle"
"encoding/base64"
"errors"
"git.giftfish.de/ston1th/gowiki/pkg/log"
"github.com/gorilla/mux"
"html/template"
"net/http"
@ -53,8 +54,6 @@ type webData struct {
Msg string
Search string
Editor *Editor
Data interface{}
}

View file

@ -3,6 +3,8 @@
package server
import (
"git.giftfish.de/ston1th/gowiki/pkg/core"
"git.giftfish.de/ston1th/gowiki/pkg/log"
"html/template"
"net/http"
"time"
@ -97,13 +99,13 @@ func loginHandler(ctx *Context) {
ctx.Exec()
return
}
err := ctx.Srv.BS.Login(user, password)
err := ctx.Srv.DB.Login(user, password)
if err != nil {
ctx.Data.Msg = err.Error()
ctx.Exec()
return
}
ctx.SetUdata(user, ctx.Srv.BS.UserIsAdmin(user))
ctx.SetUdata(user, ctx.Srv.DB.UserIsAdmin(user))
ctx.Redirect("/wiki/Index", 302)
}
}
@ -129,7 +131,7 @@ func searchHandler(ctx *Context) {
return
}
res, err := ctx.Srv.Index.Search(!ctx.LoggedOn(), search)
res, err := ctx.Srv.DB.Index.Search(search)
if err != nil {
ctx.Data.Msg = err.Error()
ctx.Exec()
@ -148,7 +150,7 @@ func allHandler(ctx *Context) {
BodyTitle: "All Articles",
Admin: ctx.GetAdmin(),
}
all, err := ctx.Srv.Index.GetAll(!ctx.LoggedOn())
all, err := ctx.Srv.DB.Index.GetAll(!ctx.LoggedOn())
if err != nil {
ctx.Data.Msg = err.Error()
}
@ -171,11 +173,11 @@ func wikiNewHandler(ctx *Context) {
pub = true
}
submit := ctx.Form("submit")
art := Article{
p := core.Page{
Title: title,
MD: text,
}
ctx.Data.Data = art
ctx.Data.Data = p
if !ctx.CheckToken(nil) {
return
}
@ -184,7 +186,7 @@ func wikiNewHandler(ctx *Context) {
ctx.Exec()
return
}
newTitle, err := ctx.Srv.Index.Index(title, text, ctx.GetUser(), pub)
newTitle, err := ctx.Srv.DB.Index.Index(title, text, ctx.GetUser(), pub)
if err != nil {
ctx.Data.Msg = err.Error()
ctx.Exec()
@ -202,7 +204,7 @@ func wikiHandler(ctx *Context) {
Admin: ctx.GetAdmin(),
}
title := ctx.Var("title")
art, err := ctx.Srv.Index.Get(!ctx.LoggedOn(), title)
art, err := ctx.Srv.DB.Index.Get(!ctx.LoggedOn(), title)
if err != nil {
ctx.NotFound()
return
@ -227,7 +229,7 @@ func wikiEditHandler(ctx *Context) {
title := ctx.Var("title")
switch ctx.Method() {
case "GET":
art, err := ctx.Srv.Index.Get(!ctx.LoggedOn(), title)
art, err := ctx.Srv.DB.Index.Get(!ctx.LoggedOn(), title)
if err != nil {
ctx.NotFound()
return
@ -236,7 +238,6 @@ func wikiEditHandler(ctx *Context) {
ctx.Data.Data = art
ctx.Data.Title = art.Title
ctx.Data.BodyTitle = art.Title
ctx.Data.Editor = ctx.Srv.Editors.Set(title, ctx.GetUser())
ctx.Exec()
case "POST":
ftitle := ctx.Form("title")
@ -247,7 +248,7 @@ func wikiEditHandler(ctx *Context) {
pub = true
}
submit := ctx.Form("submit")
ctx.Data.Data = Article{
ctx.Data.Data = core.Page{
Title: ftitle,
LinkTitle: title,
MD: text,
@ -258,17 +259,12 @@ func wikiEditHandler(ctx *Context) {
if !ctx.CheckToken(nil) {
return
}
if submit == "Back" {
ctx.Srv.Editors.RemoveEditor(title, ctx.GetUser())
ctx.Redirect("/wiki/"+title, 302)
return
}
if submit != "Submit" {
ctx.Data.Msg = "wrong inputs"
ctx.Exec()
return
}
err := ctx.Srv.Index.Update(title, text, ctx.GetUser(), pub)
err := ctx.Srv.DB.Index.Update(title, text, ctx.GetUser(), pub)
if err != nil {
ctx.Data.Msg = err.Error()
ctx.Exec()

View file

@ -12,7 +12,6 @@ import (
"time"
"git.giftfish.de/ston1th/gowiki/pkg/db"
"git.giftfish.de/ston1th/gowiki/pkg/index"
)
const (
@ -25,8 +24,7 @@ type HTTPServer struct {
Version string
SecCookie bool
Store *sessions.CookieStore
BS *db.BoltStore
Index *index.Index
DB *db.DB
listener net.Listener
srv *http.Server
templ map[string]*template.Template

View file

@ -1,155 +0,0 @@
package server
func allSnippetHandler(ctx *Context) {
ctx.Template("allSnippetHandler")
ctx.Data = webData{Title: "All Snippets"}
all, err := ctx.Srv.BS.GetSnippets(ctx.GetUser())
if err != nil {
ctx.Data.Msg = err.Error()
}
ctx.Data.Data = all
ctx.Exec()
}
func snippetNewHandler(ctx *Context) {
ctx.Template("snippetNewHandler")
ctx.Data = webData{Title: "New Snippet"}
switch ctx.Method() {
case "GET":
ctx.Exec()
case "POST":
user := ctx.GetUser()
title := ctx.Form("title")
text := ctx.Form("text")
perm := ctx.Form("permission")
submit := ctx.Form("submit")
snip := Snippet{
Title: title,
MD: text,
}
ctx.Data.Data = art
if !ctx.CheckToken() {
ctx.Data.Msg = "wrong csrf token"
ctx.Exec()
return
}
iperm, err := strconv.Atoi(perm)
if err != nil || submit != "Submit" {
ctx.Data.Msg = "wrong inputs"
ctx.Exec()
return
}
newTitle, err := ctx.Srv.BS.CreateSnippet(user, title, text, iperm)
if err != nil {
ctx.Data.Msg = err.Error()
ctx.Exec()
return
}
ctx.Redirect("/users/"+user+"/"+newTitle, 302)
}
}
func wikiHandler(ctx *Context) {
if ctx.T == nil {
ctx.Template("wikiHandler")
}
ctx.Data = webData{
Admin: ctx.GetAdmin(),
}
title := ctx.Var("title")
art, err := ctx.Srv.Index.Get(!ctx.LoggedOn(), title)
if err != nil {
ctx.NotFound()
return
}
art.LinkTitle = title
ctx.Data.Data = art
ctx.Data.Title = art.Title
ctx.Data.BodyTitle = art.Title
ctx.Exec()
}
func wikiMDHandler(f ctxHandler) ctxHandler {
return func(ctx *Context) {
ctx.Template("wikiMDHandler")
f(ctx)
}
}
func wikiEditHandler(ctx *Context) {
ctx.Template("wikiEditHandler")
ctx.Data = webData{}
title := ctx.Var("title")
switch ctx.Method() {
case "GET":
art, err := ctx.Srv.Index.Get(!ctx.LoggedOn(), title)
if err != nil {
ctx.NotFound()
return
}
art.LinkTitle = title
ctx.Data.Data = art
ctx.Data.Title = art.Title
ctx.Data.BodyTitle = art.Title
ctx.Data.Editor = ctx.Srv.Editors.Set(title, ctx.GetUser())
ctx.Exec()
case "POST":
ftitle := ctx.Form("title")
text := ctx.Form("text")
public := ctx.Form("public")
pub := false
if public == "0" {
pub = true
}
submit := ctx.Form("submit")
ctx.Data.Data = Article{
Title: ftitle,
LinkTitle: title,
MD: text,
Public: pub,
}
ctx.Data.Title = ftitle
ctx.Data.BodyTitle = ftitle
if !ctx.CheckToken() {
ctx.Data.Msg = "wrong csrf token"
ctx.Exec()
return
}
if submit == "Back" {
ctx.Srv.Editors.RemoveEditor(title, ctx.GetUser())
ctx.Redirect("/wiki/"+title, 302)
return
}
if submit != "Submit" {
ctx.Data.Msg = "wrong inputs"
ctx.Exec()
return
}
err := ctx.Srv.Index.Update(title, text, ctx.GetUser(), pub)
if err != nil {
ctx.Data.Msg = err.Error()
ctx.Exec()
return
}
ctx.Srv.Editors.Remove(title)
ctx.Redirect("/wiki/"+title, 302)
}
}
func wikiDelHandler(ctx *Context) {
title := ctx.Var("title")
submit := ctx.Form("submit")
if !ctx.CheckToken() {
ctx.Redirect("/wiki/"+title, 302)
return
}
if submit != "Delete" {
ctx.Redirect("/wiki/"+title, 302)
return
}
if err := ctx.Srv.Index.Delete(title); err != nil {
log.Println("delete:", err)
ctx.Redirect("/wiki/"+title, 302)
}
ctx.Redirect("/wiki/Index", 302)
}