2017-04-19 09:15:01 +05:30
// Copyright 2017 The Gitea 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 private includes all internal routes. The package name internal is ideal but Golang is not allowed, so we use private as package name instead.
package private
import (
"strings"
"code.gitea.io/gitea/models"
2019-12-24 05:41:12 +05:30
"code.gitea.io/gitea/modules/log"
2019-12-26 16:59:45 +05:30
"code.gitea.io/gitea/modules/private"
2017-04-19 09:15:01 +05:30
"code.gitea.io/gitea/modules/setting"
2017-05-04 11:12:02 +05:30
2019-12-26 16:59:45 +05:30
"gitea.com/macaron/binding"
2019-08-23 22:10:30 +05:30
"gitea.com/macaron/macaron"
2017-04-19 09:15:01 +05:30
)
// CheckInternalToken check internal token is set
func CheckInternalToken ( ctx * macaron . Context ) {
tokens := ctx . Req . Header . Get ( "Authorization" )
fields := strings . Fields ( tokens )
if len ( fields ) != 2 || fields [ 0 ] != "Bearer" || fields [ 1 ] != setting . InternalToken {
2019-12-24 05:41:12 +05:30
log . Debug ( "Forbidden attempt to access internal url: Authorization header: %s" , tokens )
2017-04-19 09:15:01 +05:30
ctx . Error ( 403 )
}
}
2018-10-30 11:50:13 +05:30
//GetRepositoryByOwnerAndName chainload to models.GetRepositoryByOwnerAndName
func GetRepositoryByOwnerAndName ( ctx * macaron . Context ) {
//TODO use repo.Get(ctx *context.APIContext) ?
ownerName := ctx . Params ( ":owner" )
repoName := ctx . Params ( ":repo" )
repo , err := models . GetRepositoryByOwnerAndName ( ownerName , repoName )
if err != nil {
2017-04-19 09:15:01 +05:30
ctx . JSON ( 500 , map [ string ] interface { } {
"err" : err . Error ( ) ,
} )
return
}
2018-10-30 11:50:13 +05:30
ctx . JSON ( 200 , repo )
}
2018-11-28 16:56:14 +05:30
//CheckUnitUser chainload to models.CheckUnitUser
func CheckUnitUser ( ctx * macaron . Context ) {
2018-10-30 11:50:13 +05:30
repoID := ctx . ParamsInt64 ( ":repoid" )
userID := ctx . ParamsInt64 ( ":userid" )
repo , err := models . GetRepositoryByID ( repoID )
if err != nil {
ctx . JSON ( 500 , map [ string ] interface { } {
"err" : err . Error ( ) ,
} )
return
}
2018-11-28 16:56:14 +05:30
var user * models . User
if userID > 0 {
user , err = models . GetUserByID ( userID )
if err != nil {
ctx . JSON ( 500 , map [ string ] interface { } {
"err" : err . Error ( ) ,
} )
return
}
2018-10-30 11:50:13 +05:30
}
2017-04-19 09:15:01 +05:30
2018-11-28 16:56:14 +05:30
perm , err := models . GetUserRepoPermission ( repo , user )
2018-10-30 11:50:13 +05:30
if err != nil {
ctx . JSON ( 500 , map [ string ] interface { } {
"err" : err . Error ( ) ,
} )
return
}
2018-11-28 16:56:14 +05:30
ctx . JSON ( 200 , perm . UnitAccessMode ( models . UnitType ( ctx . QueryInt ( "unitType" ) ) ) )
2017-04-19 09:15:01 +05:30
}
// RegisterRoutes registers all internal APIs routes to web application.
// These APIs will be invoked by internal commands for example `gitea serv` and etc.
func RegisterRoutes ( m * macaron . Macaron ) {
2019-12-26 16:59:45 +05:30
bind := binding . Bind
2017-04-19 09:15:01 +05:30
m . Group ( "/" , func ( ) {
2019-12-17 07:19:07 +05:30
m . Post ( "/ssh/authorized_keys" , AuthorizedPublicKeyByContent )
2019-06-01 20:30:21 +05:30
m . Post ( "/ssh/:id/update/:repoid" , UpdatePublicKeyInRepo )
2019-12-26 16:59:45 +05:30
m . Post ( "/hook/pre-receive/:owner/:repo" , bind ( private . HookOptions { } ) , HookPreReceive )
m . Post ( "/hook/post-receive/:owner/:repo" , bind ( private . HookOptions { } ) , HookPostReceive )
m . Post ( "/hook/set-default-branch/:owner/:repo/:branch" , SetDefaultBranch )
2019-06-01 20:30:21 +05:30
m . Get ( "/serv/none/:keyid" , ServNoCommand )
m . Get ( "/serv/command/:keyid/:owner/:repo" , ServCommand )
2017-04-19 09:15:01 +05:30
} , CheckInternalToken )
}