// Contexter initializes a classic context for a request. func Contexter() macaron.Handler { return func(c *macaron.Context, l i18n.Locale, cache cache.Cache, sess session.Store, f *session.Flash, x csrf.CSRF) { ctx := &Context{ Context: c, Cache: cache, csrf: x, Flash: f, Session: sess, } // Compute current URL for real-time change language. ctx.Data["Link"] = setting.AppSubUrl + ctx.Req.URL.Path ctx.Data["PageStartTime"] = time.Now() // Check auto-signin. if sess.Get("uid") == nil { if _, err := AutoSignIn(ctx); err != nil { ctx.Handle(500, "AutoSignIn", err) return } } // Get user from session if logined. ctx.User, ctx.IsBasicAuth = auth.SignedInUser(ctx.Context, ctx.Session) if ctx.User != nil { ctx.IsSigned = true ctx.Data["IsSigned"] = ctx.IsSigned ctx.Data["SignedUser"] = ctx.User ctx.Data["SignedUserID"] = ctx.User.Id ctx.Data["SignedUserName"] = ctx.User.Name ctx.Data["IsAdmin"] = ctx.User.IsAdmin } else { ctx.Data["SignedUserID"] = 0 ctx.Data["SignedUserName"] = "" } // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. if ctx.Req.Method == "POST" && strings.Contains(ctx.Req.Header.Get("Content-Type"), "multipart/form-data") { if err := ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil && !strings.Contains(err.Error(), "EOF") { // 32MB max size ctx.Handle(500, "ParseMultipartForm", err) return } } ctx.Data["CsrfToken"] = x.GetToken() ctx.Data["CsrfTokenHtml"] = template.HTML(`<input type="hidden" name="_csrf" value="` + x.GetToken() + `">`) ctx.Data["ShowRegistrationButton"] = setting.Service.ShowRegistrationButton ctx.Data["ShowFooterBranding"] = setting.ShowFooterBranding c.Map(ctx) } }
// InitContext initializes a classic context for a request. func InitContext() martini.Handler { return func(res http.ResponseWriter, r *http.Request, c martini.Context, rd *Render) { ctx := &Context{ c: c, // p: p, Req: r, Res: res, Cache: base.Cache, Render: rd, } ctx.Data["PageStartTime"] = time.Now() // start session ctx.Session = base.SessionManager.SessionStart(res, r) rw := res.(martini.ResponseWriter) rw.Before(func(martini.ResponseWriter) { ctx.Session.SessionRelease(res) }) // Get user from session if logined. user := auth.SignedInUser(ctx.Session) ctx.User = user ctx.IsSigned = user != nil ctx.Data["IsSigned"] = ctx.IsSigned if user != nil { ctx.Data["SignedUser"] = user ctx.Data["SignedUserId"] = user.Id ctx.Data["SignedUserName"] = user.Name ctx.Data["IsAdmin"] = ctx.User.IsAdmin } // get or create csrf token ctx.Data["CsrfToken"] = ctx.CsrfToken() ctx.Data["CsrfTokenHtml"] = template.HTML(`<input type="hidden" name="_csrf" value="` + ctx.csrfToken + `">`) c.Map(ctx) c.Next() } }
// Contexter initializes a classic context for a request. func Contexter() macaron.Handler { return func(c *macaron.Context, l i18n.Locale, cache cache.Cache, sess session.Store, f *session.Flash, x csrf.CSRF) { ctx := &Context{ Context: c, Locale: l, Cache: cache, csrf: x, Flash: f, Session: sess, } // Compute current URL for real-time change language. link := ctx.Req.RequestURI i := strings.Index(link, "?") if i > -1 { link = link[:i] } ctx.Data["Link"] = link ctx.Data["PageStartTime"] = time.Now() // Get user from session if logined. ctx.User = auth.SignedInUser(ctx.Req.Header, ctx.Session) if ctx.User != nil { ctx.IsSigned = true ctx.Data["IsSigned"] = ctx.IsSigned ctx.Data["SignedUser"] = ctx.User ctx.Data["IsAdmin"] = ctx.User.IsAdmin } // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. if ctx.Req.Method == "POST" && strings.Contains(ctx.Req.Header.Get("Content-Type"), "multipart/form-data") { if err := ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil && !strings.Contains(err.Error(), "EOF") { // 32MB max size ctx.Handle(500, "ParseMultipartForm", err) return } } ctx.Data["CsrfToken"] = x.GetToken() ctx.Data["CsrfTokenHtml"] = template.HTML(`<input type="hidden" name="_csrf" value="` + x.GetToken() + `">`) c.Map(ctx) } }
// InitContext initializes a classic context for a request. func InitContext() martini.Handler { return func(res http.ResponseWriter, r *http.Request, c martini.Context, rd *Render) { ctx := &Context{ c: c, // p: p, Req: r, Res: res, Cache: base.Cache, Render: rd, } ctx.Data["PageStartTime"] = time.Now() // start session ctx.Session = base.SessionManager.SessionStart(res, r) // Get flash. values, err := url.ParseQuery(ctx.GetCookie("gogs_flash")) if err != nil { log.Error("InitContext.ParseQuery(flash): %v", err) } else if len(values) > 0 { ctx.Flash = &Flash{Values: values} ctx.Flash.ErrorMsg = ctx.Flash.Get("error") ctx.Flash.SuccessMsg = ctx.Flash.Get("success") ctx.Data["Flash"] = ctx.Flash ctx.SetCookie("gogs_flash", "", -1) } ctx.Flash = &Flash{Values: url.Values{}} rw := res.(martini.ResponseWriter) rw.Before(func(martini.ResponseWriter) { ctx.Session.SessionRelease(res) if flash := ctx.Flash.Encode(); len(flash) > 0 { ctx.SetCookie("gogs_flash", ctx.Flash.Encode(), 0) } }) // Get user from session if logined. user := auth.SignedInUser(ctx.Session) ctx.User = user ctx.IsSigned = user != nil ctx.Data["IsSigned"] = ctx.IsSigned if user != nil { ctx.Data["SignedUser"] = user ctx.Data["SignedUserId"] = user.Id ctx.Data["SignedUserName"] = user.Name ctx.Data["IsAdmin"] = ctx.User.IsAdmin } // get or create csrf token ctx.Data["CsrfToken"] = ctx.CsrfToken() ctx.Data["CsrfTokenHtml"] = template.HTML(`<input type="hidden" name="_csrf" value="` + ctx.csrfToken + `">`) c.Map(ctx) c.Next() } }