func registerResponseHelperHandlers(routes *wcg.Router) { routes.Before(func(res *wcg.Response, req *wcg.Request) { var app *App tmp := strings.Split(req.URL().Path, "/") req.Logger.Info("App is :%s", tmp[1]) switch tmp[1] { case "api", "cron": app = apps[tmp[2]] break default: app = apps[tmp[1]] } if app == nil { req.Logger.Debug("No app is identified.") return } // request locals req.SetLocal(LOCAL_APP_KEY, app) res.SetLocal(LOCAL_APP_KEY, app) // response locals uk := GetUserKind(req) navs := make([]*Page, 0) for _, nav := range app.navigations { req.Logger.Debug("Checking %s nav availablity: (%d, %d)", nav.Title, uk, nav.authority) if uk >= nav.authority { navs = append(navs, nav) } } res.SetLocal(LOCAL_NAVIGATIONS_KEY, navs) }) }
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) } }) }