From d8052bdb7ad485489cb88b23461470b22e8efba9 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Mon, 8 Feb 2016 08:00:07 -0500 Subject: [PATCH] Added locking --- db.go | 42 ++++++++++++++++++++++++++++++++++++++++-- routes.go | 13 +++++++++---- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/db.go b/db.go index 1b1c176..5729e8a 100644 --- a/db.go +++ b/db.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "log" + "strings" "time" "github.com/boltdb/bolt" @@ -40,9 +41,46 @@ type CowyoData struct { Timestamps []string } -func (p *CowyoData) load(title string) error { +func hasPassword(title string) (bool, error) { + title = strings.ToLower(title) if !open { - return fmt.Errorf("db must be opened before saving!") + return false, fmt.Errorf("db must be opened before loading!") + } + hasPassword := false + err := db.View(func(tx *bolt.Tx) error { + var err error + b := tx.Bucket([]byte("datas")) + if b == nil { + return fmt.Errorf("db must be opened before loading!") + } + k := []byte(title) + val := b.Get(k) + if val == nil { + return nil + } + var p CowyoData + err = p.decode(val) + if err != nil { + return err + } + for _, line := range strings.Split(p.CurrentText, "\n") { + if strings.Contains(line, "<") == true && strings.Contains(line, ">") == true && strings.Contains(line, "user") == true && strings.Contains(line, "password") == true && strings.Contains(line, "public") == true { + hasPassword = true + } + } + return nil + }) + if err != nil { + fmt.Printf("Could not get CowyoData: %s", err) + return false, err + } + return hasPassword, nil +} + +func (p *CowyoData) load(title string) error { + title = strings.ToLower(title) + if !open { + return fmt.Errorf("db must be opened before loading!") } err := db.View(func(tx *bolt.Tx) error { var err error diff --git a/routes.go b/routes.go index 883456a..9414fe0 100644 --- a/routes.go +++ b/routes.go @@ -25,10 +25,15 @@ func editNote(c *gin.Context) { } else if strings.ToLower(title) == "about" { //}&& strings.Contains(AllowedIPs, c.ClientIP()) != true { c.Redirect(302, "/about/view") } else { - c.HTML(http.StatusOK, "index.tmpl", gin.H{ - "Title": title, - "ExternalIP": RuntimeArgs.ExternalIP, - }) + locked, _ := hasPassword(title) + if locked { + c.Redirect(302, "/"+title+"/view") + } else { + c.HTML(http.StatusOK, "index.tmpl", gin.H{ + "Title": title, + "ExternalIP": RuntimeArgs.ExternalIP, + }) + } } }