// Copyright (C) 2017 Marius Schellenberger package db import ( "fmt" "git.giftfish.de/ston1th/gowiki/pkg/cache" "git.giftfish.de/ston1th/gowiki/pkg/core" "git.giftfish.de/ston1th/gowiki/pkg/index" "git.giftfish.de/ston1th/gowiki/pkg/store" "git.giftfish.de/ston1th/gowiki/pkg/util" ) const ( defUser = "admin" defPassword = "gowiki" usersFile = "users.db" pagesFile = "pages.db" bcryptCost = 13 indexName = "Index" welcome = `# Welcome to GoWiki This is the [Index](/wiki/Index) page. You can customize it how you like.` wikiSection = "wiki" ) /*const ( maxResult = 1e6 maxSearchResult = 101 )*/ func dbErr(i interface{}) error { return fmt.Errorf("db: %s", i) } type DB struct { pages store.Store users store.Store cache *cache.Cache Index *index.Index } func NewDB(indexPath string) (db *DB, err error) { db = &DB{cache: cache.NewCache()} db.Index, err = index.NewIndex(indexPath) if err != nil { return } db.users, err = store.NewBoltStore(usersFile, nil) if err != nil { return } if db.UserExists(defUser) != nil { err = db.CreateUser(defUser, defPassword, true) if err != nil { return } } err = db.UnlockUser(defUser) if err != nil { return } db.pages, err = store.NewBoltStore(pagesFile, nil) if err != nil { return } if _, err = db.pageExists(util.StoreTitle(wikiSection, indexName), defUser); err != nil { _, err = db.CreatePage(indexName, wikiSection, welcome, defUser, core.Public) if err != nil { return } } return } func (db *DB) Close() error { err := db.pages.Close() if err != nil { return err } err = db.users.Close() if err != nil { return err } return db.Index.Close() }