main.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "log"
  6. "net/http"
  7. "github.com/gorilla/sessions"
  8. )
  9. var store = sessions.NewCookieStore([]byte("secret-key"))
  10. type Status struct {
  11. LoggedIn bool
  12. }
  13. func loginHandler(rw http.ResponseWriter, req *http.Request) {
  14. if req.Method == "GET" {
  15. password := req.FormValue("password")
  16. log.Println("The typed password is:" + password)
  17. if password == "admin" {
  18. log.Println("Password is correct")
  19. session, err := store.Get(req, "session-name")
  20. if err != nil {
  21. http.Error(rw, err.Error(), http.StatusInternalServerError)
  22. return
  23. }
  24. session.Values["auth"] = true
  25. err = session.Save(req, rw)
  26. if err != nil {
  27. http.Error(rw, err.Error(), http.StatusInternalServerError)
  28. return
  29. }
  30. rw.Write([]byte("true"))
  31. log.Println("Logged in")
  32. } else {
  33. log.Println("WRONG password!!")
  34. }
  35. }
  36. }
  37. func logoutHandler(rw http.ResponseWriter, req *http.Request) {
  38. session, err := store.Get(req, "session-name")
  39. if err != nil {
  40. http.Error(rw, err.Error(), http.StatusInternalServerError)
  41. return
  42. }
  43. session.Values["auth"] = nil
  44. err = session.Save(req, rw)
  45. if err != nil {
  46. http.Error(rw, err.Error(), http.StatusInternalServerError)
  47. return
  48. }
  49. http.Redirect(rw, req, "/login.html", http.StatusSeeOther)
  50. log.Println("Logged out successfully")
  51. }
  52. func checkloginHandler(rw http.ResponseWriter, req *http.Request) {
  53. log.Println("Check button is clicked")
  54. session, err := store.Get(req, "session-name")
  55. if err != nil {
  56. http.Error(rw, err.Error(), http.StatusInternalServerError)
  57. return
  58. }
  59. var result Status
  60. if session.Values["auth"] == true {
  61. log.Println("Checked that auth = true")
  62. result.LoggedIn = true
  63. } else {
  64. log.Println("Checked that auth = false")
  65. result.LoggedIn = false
  66. }
  67. send_message, _ := json.Marshal(result)
  68. rw.Write(send_message)
  69. }
  70. func main() {
  71. portPointer := flag.String("port", "8000", "An integer")
  72. flag.Parse()
  73. log.Println("Port Number: " + *portPointer)
  74. httpFileServer := http.FileServer(http.Dir("./files"))
  75. http.Handle("/", httpFileServer)
  76. http.HandleFunc("/login", loginHandler)
  77. http.HandleFunc("/logout", logoutHandler)
  78. http.HandleFunc("/checklogin", checkloginHandler)
  79. log.Printf("Listening http://localhost:%s\n", *portPointer)
  80. if error := http.ListenAndServe(":"+*portPointer, nil); error != nil {
  81. log.Printf("Error: %s\n", error)
  82. }
  83. }