Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.58 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "html/template"
  6.     "net/http"
  7.     "os"
  8. )
  9.  
  10. type Email struct {
  11.     Value string
  12. }
  13.  
  14. func (e *Email) save() error {
  15.     filename := "email-list.txt"
  16.     f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
  17.     if err != nil {
  18.         return err
  19.     }
  20.  
  21.     defer f.Close()
  22.  
  23.     if _, err = f.WriteString(e.Value); err != nil {
  24.         return err
  25.     }
  26.     return nil
  27. }
  28.  
  29. func handler(w http.ResponseWriter, r *http.Request) {
  30.     renderTemplate(w, "landing", nil)
  31. }
  32.  
  33. func signupHandler(w http.ResponseWriter, r *http.Request) {
  34.     r.ParseForm()
  35.     email := r.Form.Get("email")
  36.     log(email)
  37.     if email == "" {
  38.         log("Email is empty.")
  39.     }
  40.     e := &Email{Value: email}
  41.     err := e.save()
  42.     // if err == nil {
  43.     //  log(err.Error())
  44.     //  http.Redirect(w, r, "/error", http.StatusFound)
  45.     //  return
  46.     // }
  47.     if err != nil {
  48.         http.Redirect(w, r, "/success", http.StatusFound)
  49.     } else {
  50.         log(err.Error())
  51.     }
  52. }
  53.  
  54. func log(message string) {
  55.     fmt.Printf(message)
  56. }
  57.  
  58. func successHandler(w http.ResponseWriter, r *http.Request) {
  59.     renderTemplate(w, "success", nil)
  60. }
  61.  
  62. func errorHandler(w http.ResponseWriter, r *http.Request) {
  63.     renderTemplate(w, "error", nil)
  64. }
  65.  
  66. func main() {
  67.     http.HandleFunc("/", handler)
  68.     http.HandleFunc("/signup", signupHandler)
  69.     http.HandleFunc("/success", successHandler)
  70.     http.HandleFunc("/error", errorHandler)
  71.     http.ListenAndServe(":8080", nil)
  72. }
  73.  
  74. func renderTemplate(w http.ResponseWriter, tmpl string, e *Email) {
  75.     t, _ := template.ParseFiles(tmpl + ".html")
  76.     if e != nil {
  77.         t.Execute(w, e)
  78.     } else {
  79.         t.Execute(w, &Email{Value: "test"})
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement