code.gitea.io/gitea@v1.21.7/routers/web/githttp.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package web
     5  
     6  import (
     7  	"net/http"
     8  
     9  	"code.gitea.io/gitea/modules/context"
    10  	"code.gitea.io/gitea/modules/setting"
    11  	"code.gitea.io/gitea/modules/web"
    12  	"code.gitea.io/gitea/routers/web/repo"
    13  	context_service "code.gitea.io/gitea/services/context"
    14  )
    15  
    16  func requireSignIn(ctx *context.Context) {
    17  	if !setting.Service.RequireSignInView {
    18  		return
    19  	}
    20  
    21  	// rely on the results of Contexter
    22  	if !ctx.IsSigned {
    23  		// TODO: support digit auth - which would be Authorization header with digit
    24  		ctx.Resp.Header().Set("WWW-Authenticate", `Basic realm="Gitea"`)
    25  		ctx.Error(http.StatusUnauthorized)
    26  	}
    27  }
    28  
    29  func gitHTTPRouters(m *web.Route) {
    30  	m.Group("", func() {
    31  		m.Methods("POST,OPTIONS", "/git-upload-pack", repo.ServiceUploadPack)
    32  		m.Methods("POST,OPTIONS", "/git-receive-pack", repo.ServiceReceivePack)
    33  		m.Methods("GET,OPTIONS", "/info/refs", repo.GetInfoRefs)
    34  		m.Methods("GET,OPTIONS", "/HEAD", repo.GetTextFile("HEAD"))
    35  		m.Methods("GET,OPTIONS", "/objects/info/alternates", repo.GetTextFile("objects/info/alternates"))
    36  		m.Methods("GET,OPTIONS", "/objects/info/http-alternates", repo.GetTextFile("objects/info/http-alternates"))
    37  		m.Methods("GET,OPTIONS", "/objects/info/packs", repo.GetInfoPacks)
    38  		m.Methods("GET,OPTIONS", "/objects/info/{file:[^/]*}", repo.GetTextFile(""))
    39  		m.Methods("GET,OPTIONS", "/objects/{head:[0-9a-f]{2}}/{hash:[0-9a-f]{38}}", repo.GetLooseObject)
    40  		m.Methods("GET,OPTIONS", "/objects/pack/pack-{file:[0-9a-f]{40}}.pack", repo.GetPackFile)
    41  		m.Methods("GET,OPTIONS", "/objects/pack/pack-{file:[0-9a-f]{40}}.idx", repo.GetIdxFile)
    42  	}, ignSignInAndCsrf, requireSignIn, repo.HTTPGitEnabledHandler, repo.CorsHandler(), context_service.UserAssignmentWeb())
    43  }