func configurePosts(routes *wcg.Router) { routes.Get("/:blog_id/:post_id/", showPostHandler) routes.Post("/admin/blogs/:blog_id/", createPostHandler) routes.Get("/admin/blogs/:blog_id/:post_id/", editPostHandler) routes.Put("/admin/blogs/:blog_id/:post_id/", updatePostHandler) routes.Delete("/admin/blogs/:blog_id/:post_id/", deletePostHandler) }
func configureOAuth(routes *wcg.Router) { GoogleAuthConfig, _ := google.NewAuthConfigFromFile("") FacebookAuthConfig, _ := facebook.NewAuthConfigFromFile("") GoogleAuthConfig.RedirectURL = "/login/google/callback" GoogleAuthConfig.TransportFactory = gae.NewHttpTransport GoogleAuthConfig.UnauthorizedHandler = unauthorized GoogleAuthConfig.AuthorizedHandler = authorized GoogleAuthConfig.InvalidatedHandler = invalidated gauth, gcallback, gvalidates, glogout := middleware.OAuth2(GoogleAuthConfig) routes.All("/*", gvalidates) routes.Get("/login/google", gauth) routes.Get("/login/google/callback", gcallback) routes.Get("/logout/google", glogout) FacebookAuthConfig.RedirectURL = "/login/facebook/callback" FacebookAuthConfig.TransportFactory = gae.NewHttpTransport FacebookAuthConfig.UnauthorizedHandler = unauthorized FacebookAuthConfig.AuthorizedHandler = authorized FacebookAuthConfig.InvalidatedHandler = invalidated fbauth, fbcallback, fbvalidates, fblogout := middleware.OAuth2(FacebookAuthConfig) routes.All("/*", fbvalidates) routes.All("/*", func(res *wcg.Response, req *wcg.Request) { res.SetLocal("fb_app_id", FacebookAuthConfig.ClientId) }) routes.Get("/login/facebook", fbauth) routes.Get("/login/facebook/callback", fbcallback) routes.Post("/logout/facebook", fblogout) }
func configureBlogs(routes *wcg.Router) { // check user is already signed in or not. routes.All("/admin/blogs/*", func(res *wcg.Response, req *wcg.Request) { if wcg.IsGuest(req.User) { res.Redirect("/", http.StatusFound) } }) // public interfaces. routes.Get("/my/", myblogRedirector(true)) routes.Get("/:blog_id/", showBlogHandler) // admin interfaces routes.Get("/admin/blogs/my/", myblogRedirector(false)) routes.Get("/admin/blogs/:blog_id/", manageBlogHandler) routes.Post("/admin/blogs/", createBlogHandler) routes.Put("/admin/blogs/:blog_id/", updateBlogHandler) routes.Delete("/admin/blogs/:blog_id/", deleteBlogHandler) }
func registerAuthHandlers(routes *wcg.Router) { middleware.SessionConfigIni.StoreFactory = gae.GAESessionStoreFactory sessionBefore, sessionAfter := middleware.SessionSupport() fbconfig := facebookConfig() fbauth, fbcallback, fbvalidates, fblogout := middleware.OAuth2(fbconfig) csrf := middleware.CSRFSupport() // resolve the access user routes.Before(func(res *wcg.Response, req *wcg.Request) { if apiTokenAuthHandler(res, req) { req.Logger.Debug("Api Token Auth: Yes") req.SetLocal(LOCAL_KEY_AUTH_TYPE, AUTH_TYPE_API_TOKEN) return } req.Logger.Debug("Api Token Auth: No") if cronAuthHandler(res, req) { req.Logger.Debug("Cron Auth: Yes") req.SetLocal(LOCAL_KEY_AUTH_TYPE, AUTH_TYPE_CRON) return } req.Logger.Debug("Cron Auth: No") if ahAuthHandler(res, req) { req.Logger.Debug("Ah Auth: Yes") req.SetLocal(LOCAL_KEY_AUTH_TYPE, AUTH_TYPE_AH) return } req.Logger.Debug("Ah Auth: No") req.Logger.Debug("Session Auth: Yes") sessionBefore(res, req) res.SetLocal(LOCAL_KEY_AUTH_TYPE, AUTH_TYPE_COOKIE) fbvalidates(res, req) res.SetLocal("fb_app_id", fbconfig.ClientId) res.SetLocal("wcg_user", util.FormatJson(map[string]interface{}{ "id": req.User.Id(), "display_name": req.User.DisplayName(), "image_link": req.User.ImageLink(), "profile_link": req.User.ProfileLink(), "last_login": req.User.LastLogin(), "user_kind": GetUserKind(req), })) if req.Method() != "GET" && req.Method() != "HEAD" { csrf(res, req) } }) // AUthorization Endpoint routes.Get("/login/facebook", func(res *wcg.Response, req *wcg.Request) { if req.Query("ref") != "" { req.Session.Set(SESSION_KEY_LOGIN_REF, req.Query("ref")) } fbauth(res, req) }) routes.Get("/login/facebook/callback", fbcallback) routes.Post("/logout/facebook", func(res *wcg.Response, req *wcg.Request) { fblogout(res, req) res.Redirect("/", http.StatusFound) }) // Save the session data routes.After(func(res *wcg.Response, req *wcg.Request) { if auth_type, ok := res.Local(LOCAL_KEY_AUTH_TYPE).(string); ok && auth_type == AUTH_TYPE_COOKIE { sessionAfter(res, req) } }) }