github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume3/section5/gopherface/gopherface.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 7 "go.isomorphicgo.org/go/isokit" 8 9 "github.com/EngineerKamesh/gofullstack/volume3/section5/gopherface/common" 10 "github.com/EngineerKamesh/gofullstack/volume3/section5/gopherface/common/datastore" 11 "github.com/EngineerKamesh/gofullstack/volume3/section5/gopherface/endpoints" 12 "github.com/EngineerKamesh/gofullstack/volume3/section5/gopherface/handlers" 13 "github.com/EngineerKamesh/gofullstack/volume3/section5/gopherface/middleware" 14 15 "net/http" 16 17 ghandlers "github.com/gorilla/handlers" 18 "github.com/gorilla/mux" 19 "github.com/justinas/alice" 20 ) 21 22 const ( 23 WEBSERVERPORT = ":8443" 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 if err != nil { 83 log.Fatal("ListenAndServe: ", err) 84 } 85 86 }