func generateSiteConfigs(req *wcg.Request) map[string]interface{} { siteConfigs := make(map[string]interface{}) values := configs.GetMultiValues(req, siteConfigNames...) for i, key := range siteConfigNames { siteConfigs[key] = values[i] } return siteConfigs }
func bySession(router *wcg.Router, configure func()) { fbconfig := facebook.NewAuthConfig("dummy", "dumyy", "") fbconfig.RedirectURL = "/login/facebook/callback" fbconfig.ContextFactory = func(res *wcg.Response, req *wcg.Request) context.Context { return gae.NewContext(req) } fbconfig.UnauthorizedHandler = wcg.AnonymousHandler(func(res *wcg.Response, req *wcg.Request) { res.TemplatesWithStatus(401, nil, "permrejected.html", "header.html", "footer.html") }) fbconfig.AuthorizedHandler = wcg.AnonymousHandler(func(res *wcg.Response, req *wcg.Request) { ref, _ := req.Session.Get("LoginRef") if ref != "" && strings.HasPrefix(ref, "/") { res.Redirect(wcg.AbsoluteURL(req, ref), http.StatusFound) } else { res.Redirect("/", http.StatusFound) } }) fbconfig.InvalidatedHandler = wcg.AnonymousHandler(func(res *wcg.Response, req *wcg.Request) { req.Logger.Debugf("Guest user access.") }) fbconfig.Scopes = []string{} fbauth, fbcallback, fbvalidates, fblogout := middleware.OAuth2(fbconfig) // set routes router.Before(wcg.NewNamedHandler("facebook.validate", func(res *wcg.Response, req *wcg.Request) { if !request.ByGuest(req) { // already authenticated return } if req.Session == nil { return } // Check the fbconfig from ServerConfig fbapp := configs.GetMultiValues( req, "facebook_app_id", "facebook_app_secret", "facebook_page_id", ) if fbapp[0] != "" && fbapp[1] != "" { fbconfig.ClientID = fbapp[0] fbconfig.ClientSecret = fbapp[1] fbvalidates.Process(res, req) } })) router.GET("/login/facebook", wcg.NewNamedHandler("facebook.login.auth", func(res *wcg.Response, req *wcg.Request) { if !isFBConfigured(fbconfig) { return } req.Session.Set("LoginRef", req.Query("ref")) fbauth.Process(res, req) })) router.GET("/login/facebook/callback", wcg.NewNamedHandler("facebook.login.callback", func(res *wcg.Response, req *wcg.Request) { if !isFBConfigured(fbconfig) { return } fbcallback.Process(res, req) })) router.POST("/logout/facebook", wcg.NewNamedHandler("facebook.logout", func(res *wcg.Response, req *wcg.Request) { if !isFBConfigured(fbconfig) { return } fblogout.Process(res, req) res.Redirect("/", http.StatusFound) })) configure() }