func main() { // The de nition for the addr variable sets up our flag // as a string that defaults to :8080 addr := flag.String("addr", ":8080", "The addr of the application.") // must call flag. Parse() that parses the arguments // and extracts the appropriate information. // Then, we can reference the value of the host ag by using *addr. flag.Parse() // parse the flags r := newRoom() r.tracer = trace.New(os.Stdout) http.Handle("/", &templateHandler{filename: "chat.html"}) http.Handle("/room", r) // get the room going // running the room in a separate Go routine // so that the chatting operations occur in the background, // allowing our main thread to run the web server. go r.run() // start the web server log.Println("Starting web server on", *addr) // start the web server if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
func main() { // The de nition for the addr variable sets up our flag // as a string that defaults to :8080 addr := flag.String("addr", ":8080", "The addr of the application.") // must call flag. Parse() that parses the arguments // and extracts the appropriate information. // Then, we can reference the value of the host ag by using *addr. flag.Parse() // parse the flags // set up gomniauth gomniauth.SetSecurityKey("some long key") gomniauth.WithProviders( facebook.New("key", "secret", ""), github.New("key", "secret", ""), google.New("151570833065-i9p63mogjm7adt0h0490or9bvqua0r2l.apps.googleusercontent.com", "jzEEORYarixD30S6qyosGrWe", "http://localhost:3000/auth/callback/google"), ) // r := newRoom(UseAuthAvatar) // r := newRoom(UseGravatar) r := newRoom(UseFileSystemAvatar) r.tracer = trace.New(os.Stdout) http.Handle("/chat", MustAuth(&templateHandler{filename: "chat.html"})) http.Handle("/login", &templateHandler{filename: "login.html"}) http.HandleFunc("/auth/", loginHandler) http.Handle("/room", r) http.HandleFunc("/logout", func(w http.ResponseWriter, r *http.Request) { http.SetCookie(w, &http.Cookie{ Name: "auth", Value: "", Path: "/", MaxAge: -1, }) w.Header()["Location"] = []string{"/chat"} w.WriteHeader(http.StatusTemporaryRedirect) }) http.Handle("/upload", &templateHandler{filename: "upload.html"}) http.HandleFunc("/uploader", uploaderHandler) http.Handle("/avatars/", http.StripPrefix("chapter2/chat/avatars/", http.FileServer(http.Dir("./avatars")))) // get the room going // running the room in a separate Go routine // so that the chatting operations occur in the background, // allowing our main thread to run the web server. go r.run() // start the web server log.Println("Starting web server on", *addr) // start the web server if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }