Skip to content

Commit a4039fb

Browse files
committed
Merge pull request #17 from GetGoBlog/dev
New release -- super awesome!
2 parents 546d4b2 + 5e545f1 commit a4039fb

File tree

18 files changed

+2217
-1455
lines changed

18 files changed

+2217
-1455
lines changed

main.go

Lines changed: 79 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"time"
1414

1515
"github.com/boltdb/bolt"
16-
"github.com/julienschmidt/httprouter"
16+
"github.com/gorilla/mux"
1717
"golang.org/x/crypto/bcrypt"
1818
)
1919

@@ -28,9 +28,8 @@ type BlogDetails struct {
2828
func init() {
2929
// Handles db/bucket creation
3030
db, err := bolt.Open("goblog.db", 0600, nil)
31-
3231
if err != nil {
33-
log.Fatal(err)
32+
fmt.Println(err)
3433
}
3534
defer db.Close()
3635

@@ -71,44 +70,39 @@ func init() {
7170
})
7271
}
7372

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)
7675
if username == "" {
7776
baseT := template.Must(template.New("base").Parse(base))
7877
baseT = template.Must(baseT.Parse(login))
7978

8079
baseT.ExecuteTemplate(w, "base", map[string]string{
8180
"PageName": "login",
82-
"User": getUser(w, req),
81+
"User": getUser(db, w, req),
8382
})
8483
} else {
85-
http.Redirect(w, req, "/admin/", http.StatusFound)
84+
http.Redirect(w, req, "/admin", http.StatusFound)
8685
}
8786
}
8887

89-
func LoginHandler(w http.ResponseWriter, req *http.Request, p httprouter.Params) {
88+
func LoginHandler(db *bolt.DB, w http.ResponseWriter, req *http.Request) {
9089
email := req.FormValue("email")
9190
password := req.FormValue("password")
9291

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)
9594
} else {
9695
http.Redirect(w, req, "/error/Invalid email or password", http.StatusFound)
9796
}
9897
}
9998

100-
func LogoutHandler(w http.ResponseWriter, req *http.Request, p httprouter.Params) {
99+
func LogoutHandler(db *bolt.DB, w http.ResponseWriter, req *http.Request) {
101100
cookie, err := req.Cookie("goblog")
102101
if err != nil {
103102
fmt.Println(err)
104103
}
105104
delete := http.Cookie{Name: "goblog", Value: "delete", Expires: time.Now(), HttpOnly: true, Path: "/"}
106105
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()
112106
db.Update(func(tx *bolt.Tx) error {
113107
b := tx.Bucket([]byte("CookieBucket"))
114108
err := b.Delete([]byte(cookie.Value))
@@ -117,56 +111,51 @@ func LogoutHandler(w http.ResponseWriter, req *http.Request, p httprouter.Params
117111
http.Redirect(w, req, "/", http.StatusFound)
118112
}
119113

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)
122116
if username == "" {
123117
baseT := template.Must(template.New("base").Parse(newMainPage))
124118

125119
baseT.ExecuteTemplate(w, "base", map[string]string{
126120
"PageName": "main",
127-
"User": getUser(w, r),
121+
"User": getUser(db, w, r),
128122
})
129123
} else {
130-
http.Redirect(w, r, "/admin/", http.StatusFound)
124+
http.Redirect(w, r, "/admin", http.StatusFound)
131125
}
132126
}
133127

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"]
135131
baseT := template.Must(template.New("base").Parse(base))
136132
baseT = template.Must(baseT.Parse(errorPage))
137133

138134
baseT.ExecuteTemplate(w, "base", map[string]string{
139135
"PageName": "error",
140-
"User": getUser(w, r),
141-
"Error": pm.ByName("errorcode"),
136+
"User": getUser(db, w, r),
137+
"Error": errorcode,
142138
})
143139
}
144140

145-
func SignupPage(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
141+
func SignupPage(db *bolt.DB, w http.ResponseWriter, r *http.Request) {
146142
baseT := template.Must(template.New("base").Parse(base))
147143
baseT = template.Must(baseT.Parse(signup))
148144

149145
baseT.ExecuteTemplate(w, "base", map[string]string{
150146
"PageName": "signup",
151-
"User": getUser(w, r),
147+
"User": getUser(db, w, r),
152148
})
153149
}
154150

155-
func SignupHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
151+
func SignupHandler(db *bolt.DB, w http.ResponseWriter, r *http.Request) {
156152
email := r.FormValue("email")
157153
password := r.FormValue("password")
158154

159-
if addUser(email, password) {
155+
if addUser(db, email, password) {
160156
cookie := http.Cookie{Name: "goblog", Value: RandomString(), Expires: time.Now().Add(time.Hour * 24 * 7 * 52), HttpOnly: true, MaxAge: 50000, Path: "/"}
161157
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
170159
db.Update(func(tx *bolt.Tx) error {
171160
b := tx.Bucket([]byte("CookieBucket"))
172161
err = b.Put([]byte(cookie.Value), []byte(email))
@@ -175,24 +164,18 @@ func SignupHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
175164
if err != nil {
176165
fmt.Println(err)
177166
}
178-
http.Redirect(w, r, "/admin/", http.StatusFound)
167+
http.Redirect(w, r, "/admin", http.StatusFound)
179168
} else {
180169
fmt.Println("Failure!")
181-
http.Redirect(w, r, "/signup/", http.StatusFound)
170+
http.Redirect(w, r, "/signup", http.StatusFound)
182171
}
183172
}
184173

185-
func AdminPage(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
174+
func AdminPage(db *bolt.DB, w http.ResponseWriter, r *http.Request) {
186175
success := r.FormValue("success")
187176

188-
username := getUser(w, r)
177+
username := getUser(db, w, r)
189178
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-
196179
baseT := template.Must(template.New("base").Parse(base))
197180
baseT = template.Must(baseT.Parse(admin))
198181

@@ -207,13 +190,8 @@ func AdminPage(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
207190
}
208191
}
209192

210-
func BlogCreationHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
193+
func BlogCreationHandler(db *bolt.DB, w http.ResponseWriter, r *http.Request) {
211194
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()
217195
// db.Update(func(tx *bolt.Tx) error {
218196
// b := tx.Bucket([]byte("PortBucket"))
219197
// port, _ = b.NextSequence()
@@ -242,13 +220,8 @@ func BlogCreationHandler(w http.ResponseWriter, r *http.Request, ps httprouter.P
242220

243221
blogcheck := []byte("")
244222

245-
username := getUser(w, r)
223+
username := getUser(db, w, r)
246224
if username != "" {
247-
db, err := bolt.Open("goblog.db", 0600, nil)
248-
if err != nil {
249-
fmt.Println(err)
250-
}
251-
defer db.Close()
252225
db.View(func(tx *bolt.Tx) error {
253226
b := tx.Bucket([]byte("BlogMappingBucket"))
254227
blogcheck = b.Get([]byte(blogname))
@@ -324,14 +297,9 @@ func getBlogsForUser(db *bolt.DB, username string) []BlogDetails {
324297
return v
325298
}
326299

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 {
328301
correctpass := []byte("")
329302
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()
335303
db.View(func(tx *bolt.Tx) error {
336304
b := tx.Bucket([]byte("UsersBucket"))
337305
correctpass = b.Get([]byte(email))
@@ -340,25 +308,26 @@ func verifyUser(w http.ResponseWriter, r *http.Request, email string, password s
340308
if bcrypt.CompareHashAndPassword(correctpass, inputpass) == nil {
341309
cookie := http.Cookie{Name: "goblog", Value: RandomString(), Expires: time.Now().Add(time.Hour * 24 * 7 * 52), HttpOnly: true, MaxAge: 50000, Path: "/"}
342310
http.SetCookie(w, &cookie)
343-
311+
var err error
344312
db.Update(func(tx *bolt.Tx) error {
345313
b := tx.Bucket([]byte("CookieBucket"))
346314
err = b.Put([]byte(cookie.Value), []byte(email))
347315
return err
348316
})
317+
if err != nil {
318+
fmt.Println(err)
319+
}
349320
return true
350321
}
351322
return false
352323
}
353324

354-
func addUser(email string, password string) bool {
325+
func addUser(db *bolt.DB, email string, password string) bool {
355326
check := []byte("")
356-
db, err := bolt.Open("goblog.db", 0600, nil)
357327
hashedPass, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
358328
if err != nil {
359329
fmt.Println(err)
360330
}
361-
defer db.Close()
362331
db.View(func(tx *bolt.Tx) error {
363332
b := tx.Bucket([]byte("UsersBucket"))
364333
check = b.Get([]byte(email))
@@ -370,6 +339,9 @@ func addUser(email string, password string) bool {
370339
err := b.Put([]byte(email), []byte(hashedPass))
371340
return err
372341
})
342+
if err != nil {
343+
fmt.Println(err)
344+
}
373345
return true
374346
} else {
375347
return false
@@ -403,21 +375,16 @@ func RandomString() string {
403375
return string(b)
404376
}
405377

406-
func getUser(w http.ResponseWriter, r *http.Request) string {
378+
func getUser(db *bolt.DB, w http.ResponseWriter, r *http.Request) string {
407379
cookie, _ := r.Cookie("goblog")
408380
if cookie != nil {
409-
return getUserFromCookie(cookie.Value)
381+
return getUserFromCookie(db, cookie.Value)
410382
}
411383
return ""
412384
}
413385

414-
func getUserFromCookie(value string) string {
386+
func getUserFromCookie(db *bolt.DB, value string) string {
415387
servervalue := []byte("")
416-
db, err := bolt.Open("goblog.db", 0600, nil)
417-
if err != nil {
418-
fmt.Println(err)
419-
}
420-
defer db.Close()
421388
db.View(func(tx *bolt.Tx) error {
422389
b := tx.Bucket([]byte("CookieBucket"))
423390
servervalue = b.Get([]byte(value))
@@ -440,20 +407,43 @@ func getUserFromCookie(value string) string {
440407
//}
441408

442409
func main() {
410+
db, err := bolt.Open("goblog.db", 0600, nil)
411+
if err != nil {
412+
fmt.Println(err)
413+
}
414+
defer db.Close()
443415
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/"))))
458448
log.Fatal(http.ListenAndServe(":1337", router))
459449
}

pages.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ var login = `
6464
<h1>Login</h1>
6565
</div>
6666
</div>
67-
<form class="form-horizontal" action="/login/" method="POST">
67+
<form class="form-horizontal" action="/login" method="POST">
6868
<div class="form-group">
6969
<label for="email" class="col-sm-2 control-label">Email</label>
7070
<div class="col-sm-4">
@@ -119,7 +119,7 @@ var admin = `
119119
120120
<div class="col-md-6 col-md-offset-3">
121121
122-
<form class="form-horizontal" action="/admin/" method="POST">
122+
<form class="form-horizontal" action="/admin" method="POST">
123123
<fieldset>
124124
125125
<!-- Form Name -->
@@ -165,7 +165,7 @@ var signup = `
165165
{{define "content"}}
166166
<div class="col-md-6 col-md-offset-3">
167167
168-
<form class="form-horizontal" action="/signup/" method="POST">
168+
<form class="form-horizontal" action="/signup" method="POST">
169169
<fieldset>
170170
171171
<!-- Form Name -->
@@ -285,7 +285,7 @@ var newMainPage = `
285285
<li><a href="#services">Features</a></li>
286286
<li><a href="#team">Team</a></li>
287287
<li><a href="#pricing">Pricing</a></li>
288-
<li><a href="/login/">Login</a></li>
288+
<li><a href="/login">Login</a></li>
289289
<li><a href="#" data-toggle="modal" data-target="#modal1" class="btn btn-blue">Sign Up</a></li>
290290
</ul>
291291
</div>
@@ -433,7 +433,7 @@ var newMainPage = `
433433
<div class="modal-content modal-popup">
434434
<a href="#" class="close-link"><i class="icon_close_alt2"></i></a>
435435
<h3 class="white">Sign Up</h3>
436-
<form action="/signup/" method="POST" class="popup-form">
436+
<form action="/signup" method="POST" class="popup-form">
437437
<input name="email" type="text" class="form-control form-white" placeholder="Email Address">
438438
<input name="password" type="password" class="form-control form-white" placeholder="Password">
439439
<div class="checkbox-holder text-left">

0 commit comments

Comments
 (0)