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  }