Skip to content

Commit 575d131

Browse files
committed
Improve session management
1 parent 62f949f commit 575d131

4 files changed

Lines changed: 34 additions & 16 deletions

File tree

GoBlog.exe

-8.06 MB
Binary file not shown.

goblog.db

-32 KB
Binary file not shown.

main.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,26 @@ func init() {
2424
defer db.Close()
2525

2626
db.Update(func(tx *bolt.Tx) error {
27-
_, err := tx.CreateBucketIfNotExists([]byte("UsersBucket")) // username -> password
27+
_, err := tx.CreateBucketIfNotExists([]byte("UsersBucket")) // email -> password
2828
if err != nil {
2929
return fmt.Errorf("Error with UsersBucket: %s", err)
3030
}
3131
return nil
3232
})
3333
db.Update(func(tx *bolt.Tx) error {
34-
_, err := tx.CreateBucketIfNotExists([]byte("CookieBucket")) // random string -> username
34+
_, err := tx.CreateBucketIfNotExists([]byte("CookieBucket")) // random string -> email
3535
if err != nil {
36-
return fmt.Errorf("Error with UsersBucket: %s", err)
36+
return fmt.Errorf("Error with CookieBucket: %s", err)
37+
}
38+
return nil
39+
})
40+
db.Update(func(tx *bolt.Tx) error {
41+
_, err := tx.CreateBucketIfNotExists([]byte("BlogMappingBucket")) // random string -> email
42+
if err != nil {
43+
return fmt.Errorf("Error with BlockMappingBucket: %s", err)
3744
}
3845
return nil
3946
})
40-
4147
}
4248

4349
func LoginPage(w http.ResponseWriter, req *http.Request, _ httprouter.Params) {
@@ -107,6 +113,24 @@ func SignupHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
107113

108114
if addUser(email, password) {
109115
fmt.Println("Success!")
116+
cookie := http.Cookie{Name: "goblog", Value: RandomString(), Expires: time.Now().Add(time.Hour * 24 * 7 * 52), HttpOnly: true, MaxAge: 50000, Path: "/"}
117+
http.SetCookie(w, &cookie)
118+
db, err := bolt.Open("goblog.db", 0600, nil)
119+
if err != nil {
120+
fmt.Println(err)
121+
}
122+
defer db.Close()
123+
if err != nil {
124+
fmt.Println(err)
125+
}
126+
db.Update(func(tx *bolt.Tx) error {
127+
b := tx.Bucket([]byte("CookieBucket"))
128+
err = b.Put([]byte(cookie.Value), []byte(email))
129+
return err
130+
})
131+
if err != nil {
132+
fmt.Println(err)
133+
}
110134
http.Redirect(w, r, "/admin/", http.StatusFound)
111135
} else {
112136
fmt.Println("Failure!")
@@ -129,7 +153,7 @@ func AdminPage(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
129153
}
130154
}
131155

132-
func verifyUser(w http.ResponseWriter, r *http.Request, username string, password string) bool {
156+
func verifyUser(w http.ResponseWriter, r *http.Request, email string, password string) bool {
133157
correctpass := []byte("")
134158
db, err := bolt.Open("goblog.db", 0600, nil)
135159
if err != nil {
@@ -138,7 +162,7 @@ func verifyUser(w http.ResponseWriter, r *http.Request, username string, passwor
138162
defer db.Close()
139163
db.View(func(tx *bolt.Tx) error {
140164
b := tx.Bucket([]byte("UsersBucket"))
141-
correctpass = b.Get([]byte(username))
165+
correctpass = b.Get([]byte(email))
142166
return nil
143167
})
144168
if password == string(correctpass) {
@@ -151,7 +175,7 @@ func verifyUser(w http.ResponseWriter, r *http.Request, username string, passwor
151175

152176
db.Update(func(tx *bolt.Tx) error {
153177
b := tx.Bucket([]byte("CookieBucket"))
154-
err = b.Put([]byte(cookie.Value), []byte(username))
178+
err = b.Put([]byte(cookie.Value), []byte(email))
155179
return err
156180
})
157181
if err != nil {
@@ -162,7 +186,7 @@ func verifyUser(w http.ResponseWriter, r *http.Request, username string, passwor
162186
return false
163187
}
164188

165-
func addUser(username string, password string) bool {
189+
func addUser(email string, password string) bool {
166190
check := []byte("")
167191
db, err := bolt.Open("goblog.db", 0600, nil)
168192
if err != nil {
@@ -171,13 +195,13 @@ func addUser(username string, password string) bool {
171195
defer db.Close()
172196
db.View(func(tx *bolt.Tx) error {
173197
b := tx.Bucket([]byte("UsersBucket"))
174-
check = b.Get([]byte(username))
198+
check = b.Get([]byte(email))
175199
return nil
176200
})
177201
if check == nil {
178202
db.Update(func(tx *bolt.Tx) error {
179203
b := tx.Bucket([]byte("UsersBucket"))
180-
err := b.Put([]byte(username), []byte(password))
204+
err := b.Put([]byte(email), []byte(password))
181205
return err
182206
})
183207
return true

pages.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,6 @@ var base = `
3939
<ul class="nav navbar-nav">
4040
<li {{if eq .PageName "admin" }}class="active"{{end}}><a href="/admin">Admin</a></li>
4141
</ul>
42-
<form class="navbar-form navbar-left" role="search">
43-
<div class="form-group">
44-
<input type="text" class="form-control" placeholder="Search">
45-
</div>
46-
<button type="submit" class="btn btn-default">Submit</button>
47-
</form>
4842
<ul class="nav navbar-nav navbar-right">
4943
<li {{if not .User}}class="hidden"{{end}}> <a href="/admin">{{if .User}}{{.User}}{{end}}</a> </li>
5044
<li {{if not .User}}class="hidden"{{end}}> <a href="/logout">Log Out</a> </li>

0 commit comments

Comments
 (0)