Browse Source

#1128: API calls are not hidden behind sign in

Unknwon 9 years ago
parent
commit
ff051e2106
6 changed files with 16 additions and 4 deletions
  1. 1 1
      cmd/web.go
  2. 1 0
      conf/locale/TRANSLATORS
  3. 1 1
      gogs.go
  4. 5 1
      modules/auth/auth.go
  5. 7 0
      modules/middleware/auth.go
  6. 1 1
      templates/.VERSION

+ 1 - 1
cmd/web.go

@@ -242,7 +242,7 @@ func runWeb(ctx *cli.Context) {
 				ctx.HandleAPI(404, "Page not found")
 			})
 		})
-	})
+	}, ignSignIn)
 
 	// User.
 	m.Group("/user", func() {

+ 1 - 0
conf/locale/TRANSLATORS

@@ -8,6 +8,7 @@ Huimin Wang <wanghm2009@hotmail.co.jp>
 Thomas Fanninger <gogs.thomas@fanninger.at>
 Łukasz Jan Niemier <lukasz@niemier.pl>
 Lafriks <lafriks@gmail.com>
+Luc Stepniewski <luc@stepniewski.fr>
 Miguel de la Cruz <miguel@mcrx.me>
 Natan Albuquerque <natanalbuquerque5@gmail.com>
 Marc Schiller <marc@schiller.im>

+ 1 - 1
gogs.go

@@ -17,7 +17,7 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.6.1.0714 Beta"
+const APP_VER = "0.6.1.0715 Beta"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())

+ 5 - 1
modules/auth/auth.go

@@ -21,6 +21,10 @@ import (
 	"github.com/gogits/gogs/modules/uuid"
 )
 
+func IsAPIPath(url string) bool {
+	return strings.HasPrefix(url, "/api/")
+}
+
 // SignedInId returns the id of signed in user.
 func SignedInId(req *http.Request, sess session.Store) int64 {
 	if !models.HasEngine {
@@ -28,7 +32,7 @@ func SignedInId(req *http.Request, sess session.Store) int64 {
 	}
 
 	// API calls need to check access token.
-	if strings.HasPrefix(req.URL.Path, "/api/") {
+	if IsAPIPath(req.URL.Path) {
 		auHead := req.Header.Get("Authorization")
 		if len(auHead) > 0 {
 			auths := strings.Fields(auHead)

+ 7 - 0
modules/middleware/auth.go

@@ -10,6 +10,7 @@ import (
 	"github.com/Unknwon/macaron"
 	"github.com/macaron-contrib/csrf"
 
+	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/setting"
 )
 
@@ -49,6 +50,12 @@ func Toggle(options *ToggleOptions) macaron.Handler {
 
 		if options.SignInRequire {
 			if !ctx.IsSigned {
+				// Restrict API calls with error message.
+				if auth.IsAPIPath(ctx.Req.URL.Path) {
+					ctx.HandleAPI(403, "Only signed in user is allowed to call APIs.")
+					return
+				}
+
 				ctx.SetCookie("redirect_to", url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI), 0, setting.AppSubUrl)
 				ctx.Redirect(setting.AppSubUrl + "/user/login")
 				return

+ 1 - 1
templates/.VERSION

@@ -1 +1 @@
-0.6.1.0714 Beta
+0.6.1.0715 Beta