package main import ( "encoding/json" "flag" "log" "net/http" "github.com/gorilla/sessions" ) var store = sessions.NewCookieStore([]byte("secret-key")) type Status struct { LoggedIn bool } func loginHandler(rw http.ResponseWriter, req *http.Request) { if req.Method == "GET" { password := req.FormValue("password") 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")) log.Println("Logged in") } else { log.Println("WRONG password!!") } } } func logoutHandler(rw http.ResponseWriter, req *http.Request) { 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) { 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() { portPointer := flag.String("port", "8000", "An integer") flag.Parse() log.Println("Port Number: " + *portPointer) httpFileServer := http.FileServer(http.Dir("./files")) http.Handle("/", httpFileServer) http.HandleFunc("/login", loginHandler) http.HandleFunc("/logout", logoutHandler) http.HandleFunc("/checklogin", checkloginHandler) log.Printf("Listening http://localhost:%s\n", *portPointer) if error := http.ListenAndServe(":"+*portPointer, nil); error != nil { log.Printf("Error: %s\n", error) } }