|
@@ -1,19 +1,18 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"flag"
|
|
|
"log"
|
|
|
"net/http"
|
|
|
+
|
|
|
+ "github.com/gorilla/sessions"
|
|
|
)
|
|
|
|
|
|
-var loggedIn bool = false
|
|
|
+var store = sessions.NewCookieStore([]byte("secret-key"))
|
|
|
|
|
|
-func checklogin() []byte {
|
|
|
- if loggedIn == true {
|
|
|
- return []byte(`{"loggedIn": true}`)
|
|
|
- } else {
|
|
|
- return []byte(`{"loggedIn": false}`)
|
|
|
- }
|
|
|
+type Status struct {
|
|
|
+ LoggedIn bool
|
|
|
}
|
|
|
|
|
|
func loginHandler(rw http.ResponseWriter, req *http.Request) {
|
|
@@ -22,8 +21,20 @@ func loginHandler(rw http.ResponseWriter, req *http.Request) {
|
|
|
log.Println("The typed password is:" + password)
|
|
|
if password == "admin" {
|
|
|
log.Println("Password is correct")
|
|
|
+
|
|
|
+ session, err := store.Get(req, "session-name")
|
|
|
+ if err != nil {
|
|
|
+ http.Error(rw, err.Error(), http.StatusInternalServerError)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ session.Values["auth"] = true
|
|
|
+ err = session.Save(req, rw)
|
|
|
+ if err != nil {
|
|
|
+ http.Error(rw, err.Error(), http.StatusInternalServerError)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
rw.Write([]byte("true"))
|
|
|
- loggedIn = true
|
|
|
log.Println("Logged in")
|
|
|
} else {
|
|
|
log.Println("WRONG password!!")
|
|
@@ -32,14 +43,39 @@ func loginHandler(rw http.ResponseWriter, req *http.Request) {
|
|
|
}
|
|
|
|
|
|
func logoutHandler(rw http.ResponseWriter, req *http.Request) {
|
|
|
- loggedIn = false
|
|
|
+ session, err := store.Get(req, "session-name")
|
|
|
+ if err != nil {
|
|
|
+ http.Error(rw, err.Error(), http.StatusInternalServerError)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ session.Values["auth"] = nil
|
|
|
+ err = session.Save(req, rw)
|
|
|
+ if err != nil {
|
|
|
+ http.Error(rw, err.Error(), http.StatusInternalServerError)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
http.Redirect(rw, req, "/login.html", http.StatusSeeOther)
|
|
|
log.Println("Logged out successfully")
|
|
|
}
|
|
|
|
|
|
func checkloginHandler(rw http.ResponseWriter, req *http.Request) {
|
|
|
- rw.Write(checklogin())
|
|
|
log.Println("Check button is clicked")
|
|
|
+ session, err := store.Get(req, "session-name")
|
|
|
+ if err != nil {
|
|
|
+ http.Error(rw, err.Error(), http.StatusInternalServerError)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var result Status
|
|
|
+ if session.Values["auth"] == true {
|
|
|
+ log.Println("Checked that auth = true")
|
|
|
+ result.LoggedIn = true
|
|
|
+ } else {
|
|
|
+ log.Println("Checked that auth = false")
|
|
|
+ result.LoggedIn = false
|
|
|
+ }
|
|
|
+ send_message, _ := json.Marshal(result)
|
|
|
+ rw.Write(send_message)
|
|
|
}
|
|
|
|
|
|
func main() {
|