From 0ac24a9e124a66c17497beb81c7a4491c080c024 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Mon, 8 Feb 2016 08:00:07 -0500 Subject: [PATCH] Added locking Former-commit-id: 2034389d03058ea5ba79125f8694bbb5e9712ec7 [formerly d1feaa08d9130b4cda3c529de51578f2a5320b61] [formerly 5362d1c477e2aa27c48804c5633880fdc794df95 [formerly d8052bdb7ad485489cb88b23461470b22e8efba9]] Former-commit-id: 07f6bc6cc11c9147e6a23354df6364c61d90a076 [formerly 27b9029d60a9a9003436a6e1f85332c989db0ce7] Former-commit-id: 6cf5171e6af74ebb249005a931f360476b9e2d4e --- 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, + }) + } } }