diff --git a/src/main/main.go b/src/main/main.go index 9b3a9ef..72f9604 100644 --- a/src/main/main.go +++ b/src/main/main.go @@ -18,6 +18,7 @@ type args struct { Port string `arg:"-p" help:"web server port"` Path string `arg:"-d" help:"database path"` Add string `arg:"-a" help:"add torrent link and exit"` + RDB bool `arg:"-r" help:"start in read-only DB mode"` Kill bool `arg:"-k" help:"dont kill program on signal"` } @@ -45,7 +46,11 @@ func main() { Preconfig(params.Kill) server.Start(params.Path, params.Port) - settings.SaveSettings() + if (params.RDB) { + settings.SetRDB() + } else { + settings.SaveSettings() + } fmt.Println(server.WaitServer()) time.Sleep(time.Second * 3) os.Exit(0) diff --git a/src/server/settings/DB.go b/src/server/settings/DB.go index 3b27ad5..329aff5 100644 --- a/src/server/settings/DB.go +++ b/src/server/settings/DB.go @@ -22,9 +22,10 @@ func openDB() error { } var err error - db, err = bolt.Open(filepath.Join(Path, "torrserver.db"), 0666, nil) + var ro = Get().ReadOnlyMode + db, err = bolt.Open(filepath.Join(Path, "torrserver.db"), 0666, &bolt.Options{ReadOnly: ro}) if err != nil { - fmt.Print(err) + fmt.Println(err) return err } diff --git a/src/server/settings/Settings.go b/src/server/settings/Settings.go index a3c1ac1..be52e33 100644 --- a/src/server/settings/Settings.go +++ b/src/server/settings/Settings.go @@ -39,6 +39,7 @@ type Settings struct { DisableUPNP bool DisableDHT bool DisableUpload bool + ReadOnlyMode bool Encryption int // 0 - Enable, 1 - disable, 2 - force DownloadRateLimit int // in kb, 0 - inf UploadRateLimit int // in kb, 0 - inf @@ -115,3 +116,10 @@ func SaveSettings() error { return setsDB.Put([]byte("json"), []byte(buf)) }) } + +func SetRDB() { + SaveSettings() + fmt.Println("Enable Read-only DB mode") + CloseDB() + sets.ReadOnlyMode = true +} diff --git a/src/server/web/Torrent.go b/src/server/web/Torrent.go index bac1ab8..d4afa4a 100644 --- a/src/server/web/Torrent.go +++ b/src/server/web/Torrent.go @@ -182,7 +182,7 @@ func torrentGet(c echo.Context) error { tor, err := settings.LoadTorrentDB(jreq.Hash) if err != nil { fmt.Println("Error get torrent:", jreq.Hash, err) - return echo.NewHTTPError(http.StatusBadRequest, err.Error()) + // return echo.NewHTTPError(http.StatusBadRequest, err.Error()) // Handle R/O DB } torrStatus := torr.TorrentAdded