main.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package main
  2. import (
  3. "log"
  4. "database/sql"
  5. "os"
  6. "time"
  7. "fmt"
  8. "net/http"
  9. "html/template"
  10. "github.com/gorilla/mux"
  11. "github.com/gorilla/sessions"
  12. _ "github.com/go-sql-driver/mysql"
  13. )
  14. type Page struct {
  15. Title string
  16. Body []byte
  17. }
  18. var (
  19. logger *log.Logger
  20. sessionsStore = sessions.NewCookieStore([]byte("mysecretcookie"))
  21. indexTemplate = template.Must(template.ParseFiles("www\\index.html"))
  22. logInTemplate = template.Must(template.ParseFiles("www\\login.html"))
  23. signInTemplate = template.Must(template.ParseFiles("www\\signin.html"))
  24. )
  25. func indexHandler(w http.ResponseWriter, r *http.Request) {
  26. data := struct {
  27. User string
  28. Title string
  29. Items []string
  30. }{
  31. User: "",
  32. Title: "My page",
  33. Items: []string{
  34. "My photos",
  35. "My blog",
  36. "More",
  37. },
  38. }
  39. session, _ := sessionsStore.Get(r, "session")
  40. var (
  41. password string
  42. ok3 bool
  43. )
  44. untyped, ok := session.Values["username"]
  45. if ok {
  46. username, ok1 := untyped.(string)
  47. if ok1 {
  48. data.User = username
  49. untyped, ok2 := session.Values["password"]
  50. if ok2 {
  51. password, ok3 = untyped.(string)
  52. }
  53. }
  54. }
  55. indexTemplate.Execute(w, data)
  56. if ok3 {
  57. w.Write([]byte(password))
  58. }
  59. }
  60. func indexPostHandler(w http.ResponseWriter, r *http.Request) {
  61. fmt.Print("POST")
  62. }
  63. func logInGetHandler(w http.ResponseWriter, r *http.Request) {
  64. logInTemplate.Execute(w, nil)
  65. }
  66. func logInPostHandler(w http.ResponseWriter, r *http.Request) {
  67. r.ParseForm()
  68. username := r.PostForm.Get("username")
  69. password := r.PostForm.Get("password")
  70. //dBConnector.
  71. db, err := sql.Open("mysql", "gosite:gositepassword@tcp(192.168.48.5)/gosite")
  72. if err != nil {
  73. fmt.Print("Error")
  74. panic(err)
  75. }
  76. defer db.Close()
  77. var counter int
  78. act_query := "SELECT count(*) FROM gosite.users WHERE username='" + username + "' AND password='" + password + "';"
  79. db.QueryRow(act_query).Scan(&counter)
  80. fmt.Println("we have", counter, "rows")
  81. if (counter == 0) {
  82. logInTemplate.Execute(w, nil)
  83. return
  84. }
  85. session, _ := sessionsStore.Get(r, "session")
  86. session.Values["username"] = username
  87. session.Values["password"] = password
  88. session.Save(r,w)
  89. fmt.Printf("%s\n%s\n",username,password)
  90. http.Redirect(w, r, "/", http.StatusFound)
  91. }
  92. func signInHandler(w http.ResponseWriter, r *http.Request) {
  93. signInTemplate.Execute(w, nil)
  94. }
  95. func pressHandler(w http.ResponseWriter, r *http.Request) {
  96. logger.Print("click")
  97. http.Redirect(w, r, "/", http.StatusFound)
  98. }
  99. func createLogger() {
  100. startTime := time.Now()
  101. logFileName := "logs/go-site_log_" + startTime.Format("2006-01-02_15-04-05") + ".txt"
  102. file, err := os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
  103. logger = log.New(file, "logger: ", log.Lshortfile)
  104. if err != nil {
  105. log.Fatal(err)
  106. }
  107. }
  108. type user struct{
  109. idusers int
  110. username string
  111. password string
  112. }
  113. func main() {
  114. createLogger()
  115. logger.Print("Hello, log file!")
  116. requestRouter := mux.NewRouter()
  117. requestRouter.HandleFunc("/", indexHandler).Methods("GET")
  118. requestRouter.HandleFunc("/", indexPostHandler).Methods("POST")
  119. requestRouter.HandleFunc("/login/", logInGetHandler).Methods("GET")
  120. requestRouter.HandleFunc("/login/", logInPostHandler).Methods("POST")
  121. requestRouter.HandleFunc("/signin/", signInHandler).Methods("GET")
  122. //requestRouter.HandleFunc("/", pressHandler).Methods("POST")
  123. http.Handle("/", requestRouter)
  124. logger.Fatal(http.ListenAndServe(":8080", nil))
  125. }