func main() { flag.Parse() // parse the flags // setup gomniauth gomniauth.SetSecurityKey("98dfbg7iu2nb4uywevihjw4tuiyub34noilk") gomniauth.WithProviders( github.New("3d1e6ba69036e0624b61", "7e8938928d802e7582908a5eadaaaf22d64babf1", "http://localhost:8080/auth/callback/github"), google.New("44166123467-o6brs9o43tgaek9q12lef07bk48m3jmf.apps.googleusercontent.com", "rpXpakthfjPVoFGvcf9CVCu7", "http://localhost:8080/auth/callback/google"), facebook.New("537611606322077", "f9f4d77b3d3f4f5775369f5c9f88f65e", "http://localhost:8080/auth/callback/facebook"), ) r := newRoom() 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) // get the room going go r.run() // start the web server log.Println("Starting web server on", *host) if err := http.ListenAndServe(*host, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
func main() { var addr = flag.String("addr", ":8080", "app address") flag.Parse() gomniauth.SetSecurityKey(signature.RandomKey(64)) gomniauth.WithProviders( google.New("391625238451-97uhiqpmehlvmgc48f5dscu2qi933v4l.apps.googleusercontent.com", "eqjo3wv_tXr6i9FJlgFiYRKD", "http://localhost:8080/auth/callback/google"), ) r := newRoom() r.tracer = trace.New(os.Stdout) // http.Handle("/", &templateHandler{filename: "chat.html"}) http.Handle("/chat", MustAuth(&templateHandler{filename: "chat.html"})) http.Handle("/login", &templateHandler{filename: "login.html"}) 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.HandleFunc("/auth/", loginHandler) http.Handle("/room", r) go r.run() log.Println("launching server port :", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
func main() { var addr = flag.String("addr", ":8080", "The addr of the application.") flag.Parse() // parse the flags gomniauth.SetSecurityKey("some long key") gomniauth.WithProviders( facebook.New("key", "secret", "http://localhost:8080/auth/callback/facebook"), github.New("key", "secret", "http://localhost:8080/auth/callback/github"), google.New("key", "secret", "http://localhost:8080/auth/callback/google"), ) r := newRoom() 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) // get the room going go r.run() // start the web server log.Println("Starting web server on", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
// newRoom makes a new room that is ready to go func newRoom() *room { r := &room{ forward: make(chan *message), join: make(chan *client), leave: make(chan *client), clients: make(map[*client]bool), tracer: trace.New(os.Stdout), // trace.Off() } return r }
func main() { var addr = flag.String("addr", ":8080", "The address of the app") flag.Parse() r := newRoom() r.tracer = trace.New(os.Stdout) http.Handle("/", &templateHandler{filename: "chat.html"}) http.Handle("/room", r) go r.run() log.Println("Starting the web server on", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
func main() { var addr = flag.String("addr", ":8080", "アプリケーションのアドレス") flag.Parse() gomniauth.SetSecurityKey("セキュリティキー") gomniauth.WithProviders( google.New("クライアントID", "秘密の値", "http://localhost:8080/auth/callback/google"), ) r := newRoom() r.tracer = trace.New(os.Stdout) http.Handle("/chat", MustAuth(&templateHandler{filename: "chat.html"})) http.Handle("/login", &templateHandler{filename: "login.html"}) http.Handle("/upload", &templateHandler{filename: "upload.html"}) http.HandleFunc("/uploader", uploaderHandler) http.HandleFunc("/auth/", loginHander) http.Handle("/room", r) http.Handle("/avatars/", http.StripPrefix("/avatars/", http.FileServer(http.Dir("./avatars")))) 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) }) go r.run() log.Println("Webサーバーを開始します。ポート: ", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
func main() { // reading configuration file and creating "configuration" object to store // values file, _ := os.Open("conf.json") decoder := json.NewDecoder(file) configuration := Configuration{} err := decoder.Decode(&configuration) if err != nil { fmt.Println("error:", err) } // looking for option args when starting App // like ./chat -addr=":3000" would start on this port var addr = flag.String("addr", ":8080", "App address") flag.Parse() // parse the flag // setting up gomniauth // creating random key http://godoc.org/github.com/stretchr/signature#RandomKey // in addition to gomniauth package we need to download: // go get github.com/clbanning/x2j // go get github.com/ugorji/go/codec // go get labix.org/v2/mgo/bson gomniauth.SetSecurityKey(signature.RandomKey(64)) gomniauth.WithProviders( facebook.New("key", "secret", "http://localhost:8080/auth/callback/facebook"), github.New("key", "secret", "http://localhost:8080/auth/callback/github"), google.New(configuration.GoogleKey, configuration.GoogleSecret, "http://localhost:8080/auth/callback/google"), ) r := newRoom() r.tracer = trace.New(os.Stdout) // HTTP handlers // wrapping /chat handler with MustAuth to enforce authentication http.Handle("/chat", MustAuth(&templateHandler{filename: "chat.html"})) http.Handle("/login", &templateHandler{filename: "login.html"}) // logout, deleting cookie data 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.HandleFunc("/auth/", loginHandler) http.Handle("/room", r) http.Handle("/upload", &templateHandler{filename: "upload.html"}) http.HandleFunc("/uploader", uploadHandler) // servis static images // http.StripPrefix takes Handler in, modifies the path by removing // the specified prefix and passes functionality onto an inner // handler. Inner handler - http.FileServer servers static files, // provides index listing and generates 404 for missing objects // http.Dir function allows to specify exposed folders http.Handle("/avatars/", http.StripPrefix("/avatars/", http.FileServer(http.Dir("./avatars")))) // get the room going go r.run() // start the web server log.Println("Starting we server on ", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }