github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume4/section2/gopherface/gopherface.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 7 "github.com/EngineerKamesh/gofullstack/volume4/section2/gopherface/common" 8 "github.com/EngineerKamesh/gofullstack/volume4/section2/gopherface/common/datastore" 9 "github.com/EngineerKamesh/gofullstack/volume4/section2/gopherface/endpoints" 10 "github.com/EngineerKamesh/gofullstack/volume4/section2/gopherface/handlers" 11 "github.com/EngineerKamesh/gofullstack/volume4/section2/gopherface/middleware" 12 "go.isomorphicgo.org/go/isokit" 13 14 "net/http" 15 16 ghandlers "github.com/gorilla/handlers" 17 "github.com/gorilla/mux" 18 "github.com/justinas/alice" 19 ) 20 21 const ( 22 // WEBSERVERPORT = ":8443" 23 WEBSERVERPORT = ":8080" 24 ) 25 26 var WebAppRoot = os.Getenv("GOPHERFACE_APP_ROOT") 27 28 func main() { 29 30 db, err := datastore.NewDatastore(datastore.MYSQL, "gopherface:gopherface@/gopherfacedb") 31 32 if err != nil { 33 log.Print(err) 34 } 35 36 defer db.Close() 37 38 env := common.Env{} 39 isokit.TemplateFilesPath = WebAppRoot + "/templates" 40 isokit.TemplateFileExtension = ".html" 41 ts := isokit.NewTemplateSet() 42 ts.GatherTemplates() 43 env.TemplateSet = ts 44 env.DB = db 45 46 r := mux.NewRouter() 47 48 r.HandleFunc("/", handlers.HomeHandler) 49 r.Handle("/signup", handlers.SignUpHandler(&env)).Methods("GET", "POST") 50 51 r.Handle("/login", handlers.LoginHandler(&env)).Methods("GET", "POST") 52 r.HandleFunc("/logout", handlers.LogoutHandler).Methods("GET", "POST") 53 54 r.Handle("/feed", middleware.GatedContentHandler(handlers.FeedHandler(&env))).Methods("GET") 55 r.Handle("/friends", middleware.GatedContentHandler(handlers.FriendsHandler(&env))).Methods("GET") 56 r.Handle("/myprofile", middleware.GatedContentHandler(handlers.MyProfileHandler(&env))).Methods("GET") 57 r.Handle("/profile/{username}", middleware.GatedContentHandler(handlers.ProfileHandler(&env))).Methods("GET") 58 59 // Register REST API Endpoints 60 r.Handle("/restapi/get-user-profile", middleware.GatedContentHandler(endpoints.GetUserProfileEndpoint(&env))).Methods("GET", "POST") 61 r.Handle("/restapi/save-user-profile", middleware.GatedContentHandler(endpoints.SaveUserProfileEndpoint(&env))).Methods("POST") 62 r.Handle("/restapi/save-user-profile-image", middleware.GatedContentHandler(endpoints.SaveUserProfileImageEndpoint(&env))).Methods("POST") 63 r.Handle("/restapi/find-gophers", middleware.GatedContentHandler(endpoints.FindGophersEndpoint(&env))).Methods("GET", "POST") 64 r.Handle("/restapi/follow-gopher", middleware.GatedContentHandler(endpoints.FollowGopherEndpoint(&env))).Methods("GET", "POST") 65 r.Handle("/restapi/unfollow-gopher", middleware.GatedContentHandler(endpoints.UnfollowGopherEndpoint(&env))).Methods("GET", "POST") 66 r.Handle("/restapi/get-friends-list", middleware.GatedContentHandler(endpoints.FriendsListEndpoint(&env))).Methods("GET", "POST") 67 r.Handle("/restapi/save-post", middleware.GatedContentHandler(endpoints.SavePostEndpoint(&env))).Methods("GET", "POST") 68 r.Handle("/restapi/fetch-posts", middleware.GatedContentHandler(endpoints.FetchPostsEndpoint(&env))).Methods("GET", "POST") 69 r.Handle("/restapi/get-gopher-profile", middleware.GatedContentHandler(endpoints.GetGopherProfileEndpoint(&env))).Methods("GET", "POST") 70 71 r.Handle("/js/client.js", isokit.GopherjsScriptHandler(WebAppRoot)) 72 r.Handle("/js/client.js.map", isokit.GopherjsScriptMapHandler(WebAppRoot)) 73 r.Handle("/template-bundle", handlers.TemplateBundleHandler(&env)) 74 75 r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(WebAppRoot+"/static")))) 76 77 loggedRouter := ghandlers.LoggingHandler(os.Stdout, r) 78 stdChain := alice.New(middleware.PanicRecoveryHandler) 79 http.Handle("/", stdChain.Then(loggedRouter)) 80 81 // err = http.ListenAndServeTLS(WEBSERVERPORT, WebAppRoot+"/certs/gopherfacecert.pem", WebAppRoot+"/certs/gopherfacekey.pem", nil) 82 // http.Handle("/", r) 83 err = http.ListenAndServe(WEBSERVERPORT, nil) 84 85 if err != nil { 86 log.Fatal("ListenAndServe: ", err) 87 } 88 89 }