Esempio n. 1
0
func startServer() {
	app := gae.NewServer()
	routes := app.Routes()

	dir, _ := os.Getwd()
	wcg.ViewConfig.BaseDir = filepath.Join(dir, "app/templates")

	routes.Before(func(res *wcg.Response, req *wcg.Request) {
		if req.URL().Path == "/favicon.ico" {
			res.WriteHeader(404)
			res.End()
		}
	})

	routes.Before(middleware.StaticFile("/static", filepath.Join(dir, "app/static")))
	before, after := middleware.SessionSupport(SessionConfig)

	routes.Before(before)
	routes.Before(func(res *wcg.Response, req *wcg.Request) {
		res.SetLocal("title", AppConfig.SiteTitle)
		res.SetLocal("copyright", AppConfig.Copyright)
	})

	routes.Post("/*", middleware.CSRFSupport())
	routes.Put("/*", middleware.CSRFSupport())
	routes.Delete("/*", middleware.CSRFSupport())

	configureOAuth(routes)
	routes.Get("/", TopHandler)
	configureBlogs(routes)
	configurePosts(routes)

	routes.After(after)
	routes.After(middleware.AccessLog(os.Stderr, ""))

	app.Run()
}
Esempio n. 2
0
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)
		}
	})
}