From a4cbe79567072befd96cf1b7eb319de1e2809ca3 Mon Sep 17 00:00:00 2001 From: zhsso Date: Thu, 10 Apr 2014 14:20:58 -0400 Subject: fix --- modules/middleware/auth.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 modules/middleware/auth.go (limited to 'modules/middleware/auth.go') diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go new file mode 100644 index 00000000..bde3be72 --- /dev/null +++ b/modules/middleware/auth.go @@ -0,0 +1,63 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package middleware + +import ( + "net/url" + + "github.com/go-martini/martini" + + "github.com/gogits/gogs/modules/base" +) + +type ToggleOptions struct { + SignInRequire bool + SignOutRequire bool + AdminRequire bool + DisableCsrf bool +} + +func Toggle(options *ToggleOptions) martini.Handler { + return func(ctx *Context) { + if !base.InstallLock { + ctx.Redirect("/install") + return + } + + if options.SignOutRequire && ctx.IsSigned && ctx.Req.RequestURI != "/" { + ctx.Redirect("/") + return + } + + if !options.DisableCsrf { + if ctx.Req.Method == "POST" { + if !ctx.CsrfTokenValid() { + ctx.Error(403, "CSRF token does not match") + return + } + } + } + + if options.SignInRequire { + if !ctx.IsSigned { + ctx.SetCookie("redirect_to", "/"+url.QueryEscape(ctx.Req.RequestURI)) + ctx.Redirect("/user/login") + return + } else if !ctx.User.IsActive && base.Service.RegisterEmailConfirm { + ctx.Data["Title"] = "Activate Your Account" + ctx.HTML(200, "user/active") + return + } + } + + if options.AdminRequire { + if !ctx.User.IsAdmin { + ctx.Error(403) + return + } + ctx.Data["PageIsAdmin"] = true + } + } +} -- cgit v1.2.3