package main import ( "log" "os" "time" "fmt" "net/http" "html/template" "github.com/gorilla/mux" "github.com/gorilla/sessions" ) type Page struct { Title string Body []byte } var ( logger *log.Logger dBConnector connection sessionsStore = sessions.NewCookieStore([]byte("mysecretcookie")) indexTemplate = template.Must(template.ParseFiles("www\\index.html")) logInTemplate = template.Must(template.ParseFiles("www\\login.html")) signInTemplate = template.Must(template.ParseFiles("www\\signin.html")) ) func indexHandler(w http.ResponseWriter, r *http.Request) { data := struct { User string Title string Items []string }{ User: "", Title: "My page", Items: []string{ "My photos", "My blog", "More", }, } session, _ := sessionsStore.Get(r, "session") var ( password string ok3 bool ) untyped, ok := session.Values["username"] if ok { username, ok1 := untyped.(string) if ok1 { data.User = username untyped, ok2 := session.Values["password"] if ok2 { password, ok3 = untyped.(string) } } } indexTemplate.Execute(w, data) if ok3 { w.Write([]byte(password)) } } func indexPostHandler(w http.ResponseWriter, r *http.Request) { fmt.Print("POST") } func logInGetHandler(w http.ResponseWriter, r *http.Request) { data := struct { Username string Password string Error string }{ Username: "", Password: "", Error: "", } logInTemplate.Execute(w, data) } func logInPostHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() username := r.PostForm.Get("username") password := r.PostForm.Get("password") if (dBConnector.LogIn(username, password)){ session, _ := sessionsStore.Get(r, "session") session.Values["username"] = username session.Values["password"] = password session.Save(r,w) fmt.Printf("%s\n%s\n",username,password) http.Redirect(w, r, "/", http.StatusFound) } else { data := struct { Username string Password string Error string }{ Username: username, Password: password, Error: "Неверный логин либо пароль", } fmt.Printf("Login error") logInTemplate.Execute(w, data) //w.Write([]byte("Login error")) } } func signInHandler(w http.ResponseWriter, r *http.Request) { signInTemplate.Execute(w, nil) } func pressHandler(w http.ResponseWriter, r *http.Request) { logger.Print("click") http.Redirect(w, r, "/", http.StatusFound) } func createLogger() { startTime := time.Now() logFileName := "logs/go-site_log_" + startTime.Format("2006-01-02_15-04-05") + ".txt" file, err := os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) logger = log.New(file, "logger: ", log.Lshortfile) if err != nil { log.Fatal(err) } } type user struct{ idusers int username string password string } func main() { createLogger() logger.Print("Hello, log file!") requestRouter := mux.NewRouter() dBConnector.Init("config.json") requestRouter.HandleFunc("/", indexHandler).Methods("GET") requestRouter.HandleFunc("/", indexPostHandler).Methods("POST") requestRouter.HandleFunc("/login/", logInGetHandler).Methods("GET") requestRouter.HandleFunc("/login/", logInPostHandler).Methods("POST") requestRouter.HandleFunc("/signin/", signInHandler).Methods("GET") //requestRouter.HandleFunc("/", pressHandler).Methods("POST") http.Handle("/", requestRouter) logger.Fatal(http.ListenAndServe(":8080", nil)) }