func main() { // filename := flag.String("config", "config.toml", "Path to configuration file") // // flag.Parse() filename := "config.toml" defer glog.Flush() var application = &system.Application{} application.Init(&filename) application.LoadTemplates() // Setup static files static := web.New() publicPath := application.Config.Get("general.public_path").(string) static.Get("/assets/*", http.StripPrefix("/assets/", http.FileServer(http.Dir(publicPath)))) http.Handle("/assets/", static) // Apply middleware //goji.Use(application.ApplyTemplates) //goji.Use(application.ApplySessions) //goji.Use(application.ApplyDbMap) goji.Use(application.ApplyGormDB) //goji.Use(application.ApplyAuth) //goji.Use(application.ApplyIsXhr) //goji.Use(application.ApplyCsrfProtection) //goji.Use(context.ClearHandler) controller := &controllers.MainController{} // Couple of files - in the real world you would use nginx to serve them. goji.Get("/robots.txt", http.FileServer(http.Dir(publicPath))) goji.Get("/favicon.ico", http.FileServer(http.Dir(publicPath+"/images"))) // Home page goji.Get("/", application.Route(controller, "Blog")) // Sign In routes goji.Get("/signin", application.Route(controller, "SignIn")) goji.Post("/signin", application.Route(controller, "SignInPost")) // Sign Up routes goji.Get("/signup", application.Route(controller, "SignUp")) goji.Post("/signup", application.Route(controller, "SignUpPost")) // KTHXBYE goji.Get("/logout", application.Route(controller, "Logout")) goji.Get("/blog", application.Route(controller, "Blog")) goji.Get("/post/:postid", application.Route(controller, "Post")) goji.Get("/category/:categoryid", application.Route(controller, "Categories")) goji.Get("/page/:pageid", application.Route(controller, "Pages")) graceful.PostHook(func() { application.Close() }) goji.Serve() //http2.ConfigureServer(http, &http2.Server{}) }
func main() { // Add routes to the global handler goji.Get("/", Root) // Fully backwards compatible with net/http's Handlers goji.Get("/greets", http.RedirectHandler("/", 301)) // Use your favorite HTTP verbs goji.Post("/greets", NewGreet) // Use Sinatra-style patterns in your URLs goji.Get("/users/:name", GetUser) // Goji also supports regular expressions with named capture groups. goji.Get(regexp.MustCompile(`^/greets/(?P<id>\d+)$`), GetGreet) // Middleware can be used to inject behavior into your app. The // middleware for this application are defined in middleware.go, but you // can put them wherever you like. goji.Use(PlainText) // If the patterns ends with "/*", the path is treated as a prefix, and // can be used to implement sub-routes. admin := web.New() goji.Handle("/admin/*", admin) // The standard SubRouter middleware helps make writing sub-routers // easy. Ordinarily, Goji does not manipulate the request's URL.Path, // meaning you'd have to repeat "/admin/" in each of the following // routes. This middleware allows you to cut down on the repetition by // eliminating the shared, already-matched prefix. admin.Use(middleware.SubRouter) // You can also easily attach extra middleware to sub-routers that are // not present on the parent router. This one, for instance, presents a // password prompt to users of the admin endpoints. admin.Use(SuperSecure) admin.Get("/", AdminRoot) admin.Get("/finances", AdminFinances) // Goji's routing, like Sinatra's, is exact: no effort is made to // normalize trailing slashes. goji.Get("/admin", http.RedirectHandler("/admin/", 301)) // Use a custom 404 handler goji.NotFound(NotFound) // Sometimes requests take a long time. goji.Get("/waitforit", WaitForIt) // Call Serve() at the bottom of your main() function, and it'll take // care of everything else for you, including binding to a socket (with // automatic support for systemd and Einhorn) and supporting graceful // shutdown on SIGINT. Serve() is appropriate for both development and // production. goji.Serve() }