diff --git a/main.go b/main.go index 6b6fa1c..bf8814d 100644 --- a/main.go +++ b/main.go @@ -45,6 +45,7 @@ func main() { flag.StringVar(&RuntimeArgs.ServerCRT, "crt", "", "location of ssl crt") flag.StringVar(&RuntimeArgs.ServerKey, "key", "", "location of ssl key") flag.StringVar(&RuntimeArgs.WikiName, "w", "AwwKoala", "custom name for wiki") + dumpDataset := flag.Bool("dump", false, "flag to dump all data to 'dump' directory") flag.CommandLine.Usage = func() { fmt.Println(`AwwKoala (version ` + VersionNum + `): A Websocket Wiki and Kind Of A List Application run this to start the server and then visit localhost at the port you specify @@ -57,11 +58,21 @@ Options:`) flag.CommandLine.PrintDefaults() } flag.Parse() + + if *dumpDataset { + fmt.Println("Dumping data to 'dump' folder...") + Open(RuntimeArgs.DatabaseLocation) + dumpEverything() + Close() + os.Exit(1) + } + RuntimeArgs.ExternalIP = flag.Arg(0) if RuntimeArgs.ExternalIP == "" { RuntimeArgs.ExternalIP = GetLocalIP() + RuntimeArgs.Port } RuntimeArgs.SourcePath = cwd + Open(RuntimeArgs.DatabaseLocation) defer Close() diff --git a/routes.go b/routes.go index 7bf9129..dc9f875 100644 --- a/routes.go +++ b/routes.go @@ -5,6 +5,7 @@ import ( "html/template" "io/ioutil" "net/http" + "os" "path" "regexp" "strconv" @@ -328,3 +329,22 @@ func listEverything() string { }) return everything } + +func dumpEverything() { + err := os.MkdirAll("dump", 0777) + if err != nil { + fmt.Println("Already exists") + } + db.View(func(tx *bolt.Tx) error { + // Assume bucket exists and has keys + b := tx.Bucket([]byte("datas")) + c := b.Cursor() + for k, _ := c.First(); k != nil; k, _ = c.Next() { + var p WikiData + p.load(string(k)) + fmt.Println(string(k), len(p.CurrentText)) + ioutil.WriteFile(path.Join("dump", string(k)+".md"), []byte(p.CurrentText), 0644) + } + return nil + }) +}