@@ -13,7 +13,7 @@ import (
13
13
"time"
14
14
15
15
"github.com/boltdb/bolt"
16
- "github.com/julienschmidt/httprouter "
16
+ "github.com/gorilla/mux "
17
17
"golang.org/x/crypto/bcrypt"
18
18
)
19
19
@@ -28,9 +28,8 @@ type BlogDetails struct {
28
28
func init () {
29
29
// Handles db/bucket creation
30
30
db , err := bolt .Open ("goblog.db" , 0600 , nil )
31
-
32
31
if err != nil {
33
- log . Fatal (err )
32
+ fmt . Println (err )
34
33
}
35
34
defer db .Close ()
36
35
@@ -71,44 +70,39 @@ func init() {
71
70
})
72
71
}
73
72
74
- func LoginPage (w http.ResponseWriter , req * http.Request , _ httprouter. Params ) {
75
- username := getUser (w , req )
73
+ func LoginPage (db * bolt. DB , w http.ResponseWriter , req * http.Request ) {
74
+ username := getUser (db , w , req )
76
75
if username == "" {
77
76
baseT := template .Must (template .New ("base" ).Parse (base ))
78
77
baseT = template .Must (baseT .Parse (login ))
79
78
80
79
baseT .ExecuteTemplate (w , "base" , map [string ]string {
81
80
"PageName" : "login" ,
82
- "User" : getUser (w , req ),
81
+ "User" : getUser (db , w , req ),
83
82
})
84
83
} else {
85
- http .Redirect (w , req , "/admin/ " , http .StatusFound )
84
+ http .Redirect (w , req , "/admin" , http .StatusFound )
86
85
}
87
86
}
88
87
89
- func LoginHandler (w http.ResponseWriter , req * http.Request , p httprouter. Params ) {
88
+ func LoginHandler (db * bolt. DB , w http.ResponseWriter , req * http.Request ) {
90
89
email := req .FormValue ("email" )
91
90
password := req .FormValue ("password" )
92
91
93
- if verifyUser (w , req , email , password ) {
94
- http .Redirect (w , req , "/admin/ " , http .StatusFound )
92
+ if verifyUser (db , w , req , email , password ) {
93
+ http .Redirect (w , req , "/admin" , http .StatusFound )
95
94
} else {
96
95
http .Redirect (w , req , "/error/Invalid email or password" , http .StatusFound )
97
96
}
98
97
}
99
98
100
- func LogoutHandler (w http.ResponseWriter , req * http.Request , p httprouter. Params ) {
99
+ func LogoutHandler (db * bolt. DB , w http.ResponseWriter , req * http.Request ) {
101
100
cookie , err := req .Cookie ("goblog" )
102
101
if err != nil {
103
102
fmt .Println (err )
104
103
}
105
104
delete := http.Cookie {Name : "goblog" , Value : "delete" , Expires : time .Now (), HttpOnly : true , Path : "/" }
106
105
http .SetCookie (w , & delete )
107
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
108
- if err != nil {
109
- fmt .Println (err )
110
- }
111
- defer db .Close ()
112
106
db .Update (func (tx * bolt.Tx ) error {
113
107
b := tx .Bucket ([]byte ("CookieBucket" ))
114
108
err := b .Delete ([]byte (cookie .Value ))
@@ -117,56 +111,51 @@ func LogoutHandler(w http.ResponseWriter, req *http.Request, p httprouter.Params
117
111
http .Redirect (w , req , "/" , http .StatusFound )
118
112
}
119
113
120
- func MainPage (w http.ResponseWriter , r * http.Request , _ httprouter. Params ) {
121
- username := getUser (w , r )
114
+ func MainPage (db * bolt. DB , w http.ResponseWriter , r * http.Request ) {
115
+ username := getUser (db , w , r )
122
116
if username == "" {
123
117
baseT := template .Must (template .New ("base" ).Parse (newMainPage ))
124
118
125
119
baseT .ExecuteTemplate (w , "base" , map [string ]string {
126
120
"PageName" : "main" ,
127
- "User" : getUser (w , r ),
121
+ "User" : getUser (db , w , r ),
128
122
})
129
123
} else {
130
- http .Redirect (w , r , "/admin/ " , http .StatusFound )
124
+ http .Redirect (w , r , "/admin" , http .StatusFound )
131
125
}
132
126
}
133
127
134
- func ErrorPage (w http.ResponseWriter , r * http.Request , pm httprouter.Params ) {
128
+ func ErrorPage (db * bolt.DB , w http.ResponseWriter , r * http.Request ) {
129
+ vars := mux .Vars (r )
130
+ errorcode := vars ["errorcode" ]
135
131
baseT := template .Must (template .New ("base" ).Parse (base ))
136
132
baseT = template .Must (baseT .Parse (errorPage ))
137
133
138
134
baseT .ExecuteTemplate (w , "base" , map [string ]string {
139
135
"PageName" : "error" ,
140
- "User" : getUser (w , r ),
141
- "Error" : pm . ByName ( " errorcode" ) ,
136
+ "User" : getUser (db , w , r ),
137
+ "Error" : errorcode ,
142
138
})
143
139
}
144
140
145
- func SignupPage (w http.ResponseWriter , r * http.Request , _ httprouter. Params ) {
141
+ func SignupPage (db * bolt. DB , w http.ResponseWriter , r * http.Request ) {
146
142
baseT := template .Must (template .New ("base" ).Parse (base ))
147
143
baseT = template .Must (baseT .Parse (signup ))
148
144
149
145
baseT .ExecuteTemplate (w , "base" , map [string ]string {
150
146
"PageName" : "signup" ,
151
- "User" : getUser (w , r ),
147
+ "User" : getUser (db , w , r ),
152
148
})
153
149
}
154
150
155
- func SignupHandler (w http.ResponseWriter , r * http.Request , ps httprouter. Params ) {
151
+ func SignupHandler (db * bolt. DB , w http.ResponseWriter , r * http.Request ) {
156
152
email := r .FormValue ("email" )
157
153
password := r .FormValue ("password" )
158
154
159
- if addUser (email , password ) {
155
+ if addUser (db , email , password ) {
160
156
cookie := http.Cookie {Name : "goblog" , Value : RandomString (), Expires : time .Now ().Add (time .Hour * 24 * 7 * 52 ), HttpOnly : true , MaxAge : 50000 , Path : "/" }
161
157
http .SetCookie (w , & cookie )
162
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
163
- if err != nil {
164
- fmt .Println (err )
165
- }
166
- defer db .Close ()
167
- if err != nil {
168
- fmt .Println (err )
169
- }
158
+ var err error
170
159
db .Update (func (tx * bolt.Tx ) error {
171
160
b := tx .Bucket ([]byte ("CookieBucket" ))
172
161
err = b .Put ([]byte (cookie .Value ), []byte (email ))
@@ -175,24 +164,18 @@ func SignupHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
175
164
if err != nil {
176
165
fmt .Println (err )
177
166
}
178
- http .Redirect (w , r , "/admin/ " , http .StatusFound )
167
+ http .Redirect (w , r , "/admin" , http .StatusFound )
179
168
} else {
180
169
fmt .Println ("Failure!" )
181
- http .Redirect (w , r , "/signup/ " , http .StatusFound )
170
+ http .Redirect (w , r , "/signup" , http .StatusFound )
182
171
}
183
172
}
184
173
185
- func AdminPage (w http.ResponseWriter , r * http.Request , ps httprouter. Params ) {
174
+ func AdminPage (db * bolt. DB , w http.ResponseWriter , r * http.Request ) {
186
175
success := r .FormValue ("success" )
187
176
188
- username := getUser (w , r )
177
+ username := getUser (db , w , r )
189
178
if username != "" {
190
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
191
- if err != nil {
192
- fmt .Println (err )
193
- }
194
- defer db .Close ()
195
-
196
179
baseT := template .Must (template .New ("base" ).Parse (base ))
197
180
baseT = template .Must (baseT .Parse (admin ))
198
181
@@ -207,13 +190,8 @@ func AdminPage(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
207
190
}
208
191
}
209
192
210
- func BlogCreationHandler (w http.ResponseWriter , r * http.Request , ps httprouter. Params ) {
193
+ func BlogCreationHandler (db * bolt. DB , w http.ResponseWriter , r * http.Request ) {
211
194
blogname := r .FormValue ("blogname" )
212
- // db, err := bolt.Open("goblog.db", 0600, nil)
213
- // if err != nil {
214
- // fmt.Println(err)
215
- // }
216
- // defer db.Close()
217
195
// db.Update(func(tx *bolt.Tx) error {
218
196
// b := tx.Bucket([]byte("PortBucket"))
219
197
// port, _ = b.NextSequence()
@@ -242,13 +220,8 @@ func BlogCreationHandler(w http.ResponseWriter, r *http.Request, ps httprouter.P
242
220
243
221
blogcheck := []byte ("" )
244
222
245
- username := getUser (w , r )
223
+ username := getUser (db , w , r )
246
224
if username != "" {
247
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
248
- if err != nil {
249
- fmt .Println (err )
250
- }
251
- defer db .Close ()
252
225
db .View (func (tx * bolt.Tx ) error {
253
226
b := tx .Bucket ([]byte ("BlogMappingBucket" ))
254
227
blogcheck = b .Get ([]byte (blogname ))
@@ -324,14 +297,9 @@ func getBlogsForUser(db *bolt.DB, username string) []BlogDetails {
324
297
return v
325
298
}
326
299
327
- func verifyUser (w http.ResponseWriter , r * http.Request , email string , password string ) bool {
300
+ func verifyUser (db * bolt. DB , w http.ResponseWriter , r * http.Request , email string , password string ) bool {
328
301
correctpass := []byte ("" )
329
302
inputpass := []byte (password )
330
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
331
- if err != nil {
332
- fmt .Println (err )
333
- }
334
- defer db .Close ()
335
303
db .View (func (tx * bolt.Tx ) error {
336
304
b := tx .Bucket ([]byte ("UsersBucket" ))
337
305
correctpass = b .Get ([]byte (email ))
@@ -340,25 +308,26 @@ func verifyUser(w http.ResponseWriter, r *http.Request, email string, password s
340
308
if bcrypt .CompareHashAndPassword (correctpass , inputpass ) == nil {
341
309
cookie := http.Cookie {Name : "goblog" , Value : RandomString (), Expires : time .Now ().Add (time .Hour * 24 * 7 * 52 ), HttpOnly : true , MaxAge : 50000 , Path : "/" }
342
310
http .SetCookie (w , & cookie )
343
-
311
+ var err error
344
312
db .Update (func (tx * bolt.Tx ) error {
345
313
b := tx .Bucket ([]byte ("CookieBucket" ))
346
314
err = b .Put ([]byte (cookie .Value ), []byte (email ))
347
315
return err
348
316
})
317
+ if err != nil {
318
+ fmt .Println (err )
319
+ }
349
320
return true
350
321
}
351
322
return false
352
323
}
353
324
354
- func addUser (email string , password string ) bool {
325
+ func addUser (db * bolt. DB , email string , password string ) bool {
355
326
check := []byte ("" )
356
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
357
327
hashedPass , err := bcrypt .GenerateFromPassword ([]byte (password ), bcrypt .DefaultCost )
358
328
if err != nil {
359
329
fmt .Println (err )
360
330
}
361
- defer db .Close ()
362
331
db .View (func (tx * bolt.Tx ) error {
363
332
b := tx .Bucket ([]byte ("UsersBucket" ))
364
333
check = b .Get ([]byte (email ))
@@ -370,6 +339,9 @@ func addUser(email string, password string) bool {
370
339
err := b .Put ([]byte (email ), []byte (hashedPass ))
371
340
return err
372
341
})
342
+ if err != nil {
343
+ fmt .Println (err )
344
+ }
373
345
return true
374
346
} else {
375
347
return false
@@ -403,21 +375,16 @@ func RandomString() string {
403
375
return string (b )
404
376
}
405
377
406
- func getUser (w http.ResponseWriter , r * http.Request ) string {
378
+ func getUser (db * bolt. DB , w http.ResponseWriter , r * http.Request ) string {
407
379
cookie , _ := r .Cookie ("goblog" )
408
380
if cookie != nil {
409
- return getUserFromCookie (cookie .Value )
381
+ return getUserFromCookie (db , cookie .Value )
410
382
}
411
383
return ""
412
384
}
413
385
414
- func getUserFromCookie (value string ) string {
386
+ func getUserFromCookie (db * bolt. DB , value string ) string {
415
387
servervalue := []byte ("" )
416
- db , err := bolt .Open ("goblog.db" , 0600 , nil )
417
- if err != nil {
418
- fmt .Println (err )
419
- }
420
- defer db .Close ()
421
388
db .View (func (tx * bolt.Tx ) error {
422
389
b := tx .Bucket ([]byte ("CookieBucket" ))
423
390
servervalue = b .Get ([]byte (value ))
@@ -440,20 +407,43 @@ func getUserFromCookie(value string) string {
440
407
//}
441
408
442
409
func main () {
410
+ db , err := bolt .Open ("goblog.db" , 0600 , nil )
411
+ if err != nil {
412
+ fmt .Println (err )
413
+ }
414
+ defer db .Close ()
443
415
fmt .Println ("Started server on port 1337" )
444
- router := httprouter .New ()
445
- router .GET ("/" , MainPage )
446
- router .POST ("/login/" , LoginHandler )
447
- router .GET ("/login/" , LoginPage )
448
- router .GET ("/signup/" , SignupPage )
449
- router .POST ("/signup/" , SignupHandler )
450
- router .GET ("/admin/" , AdminPage )
451
- router .POST ("/admin/" , BlogCreationHandler )
452
- router .GET ("/logout/" , LogoutHandler )
453
- router .GET ("/error/:errorcode/" , ErrorPage )
454
- router .ServeFiles ("/css/*filepath" , http .Dir (STATIC_FILES_DIR + "/css/" ))
455
- router .ServeFiles ("/js/*filepath" , http .Dir (STATIC_FILES_DIR + "/js/" ))
456
- router .ServeFiles ("/img/*filepath" , http .Dir (STATIC_FILES_DIR + "/img/" ))
457
- router .ServeFiles ("/fonts/*filepath" , http .Dir (STATIC_FILES_DIR + "/fonts/" ))
416
+ router := mux .NewRouter ()
417
+ router .HandleFunc ("/" , func (w http.ResponseWriter , r * http.Request ) {
418
+ MainPage (db , w , r )
419
+ }).Methods ("GET" )
420
+ router .HandleFunc ("/login" , func (w http.ResponseWriter , r * http.Request ) {
421
+ LoginPage (db , w , r )
422
+ }).Methods ("GET" )
423
+ router .HandleFunc ("/login" , func (w http.ResponseWriter , r * http.Request ) {
424
+ LoginHandler (db , w , r )
425
+ }).Methods ("POST" )
426
+ router .HandleFunc ("/signup" , func (w http.ResponseWriter , r * http.Request ) {
427
+ SignupPage (db , w , r )
428
+ }).Methods ("GET" )
429
+ router .HandleFunc ("/signup" , func (w http.ResponseWriter , r * http.Request ) {
430
+ SignupHandler (db , w , r )
431
+ }).Methods ("POST" )
432
+ router .HandleFunc ("/admin" , func (w http.ResponseWriter , r * http.Request ) {
433
+ AdminPage (db , w , r )
434
+ }).Methods ("GET" )
435
+ router .HandleFunc ("/admin" , func (w http.ResponseWriter , r * http.Request ) {
436
+ BlogCreationHandler (db , w , r )
437
+ }).Methods ("POST" )
438
+ router .HandleFunc ("/logout" , func (w http.ResponseWriter , r * http.Request ) {
439
+ LogoutHandler (db , w , r )
440
+ }).Methods ("GET" , "POST" )
441
+ router .HandleFunc ("/error/{errorcode}" , func (w http.ResponseWriter , r * http.Request ) {
442
+ ErrorPage (db , w , r )
443
+ }).Methods ("GET" )
444
+ router .PathPrefix ("/css/{css}" ).Handler (http .StripPrefix ("/css/" , http .FileServer (http .Dir (STATIC_FILES_DIR + "/css/" ))))
445
+ router .PathPrefix ("/js/{js}" ).Handler (http .StripPrefix ("/js/" , http .FileServer (http .Dir (STATIC_FILES_DIR + "/js/" ))))
446
+ router .PathPrefix ("/img/{img}" ).Handler (http .StripPrefix ("/img/" , http .FileServer (http .Dir (STATIC_FILES_DIR + "/img/" ))))
447
+ router .PathPrefix ("/fonts/{fonts}" ).Handler (http .StripPrefix ("/fonts/" , http .FileServer (http .Dir (STATIC_FILES_DIR + "/fonts/" ))))
458
448
log .Fatal (http .ListenAndServe (":1337" , router ))
459
449
}
0 commit comments