[BRANDING] X-Forgejo-OTP can be used instead of X-Gitea-OTP
(cherry picked from commit7b0549cd70) (cherry picked from commit13e10a65d9) (cherry picked from commit65bdd73cf2) (cherry picked from commit64eba8bb92) (cherry picked from commit4c49b1a759) (cherry picked from commit93b4d06406) (cherry picked from commite2bc5f36d9) (cherry picked from commit2bee76f9df) (cherry picked from commit3d8a1b4a9f) (cherry picked from commit99dd092cd0) (cherry picked from commit0fdbd02204)
This commit is contained in:
		
							parent
							
								
									656ed94962
								
							
						
					
					
						commit
						70b277a183
					
				
					 4 changed files with 34 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -197,13 +197,20 @@ func (ctx *APIContext) SetLinkHeader(total, pageSize int) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getOtpHeader(header http.Header) string {
 | 
			
		||||
	otpHeader := header.Get("X-Gitea-OTP")
 | 
			
		||||
	if forgejoHeader := header.Get("X-Forgejo-OTP"); forgejoHeader != "" {
 | 
			
		||||
		otpHeader = forgejoHeader
 | 
			
		||||
	}
 | 
			
		||||
	return otpHeader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CheckForOTP validates OTP
 | 
			
		||||
func (ctx *APIContext) CheckForOTP() {
 | 
			
		||||
	if skip, ok := ctx.Data["SkipLocalTwoFA"]; ok && skip.(bool) {
 | 
			
		||||
		return // Skip 2FA
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	otpHeader := ctx.Req.Header.Get("X-Gitea-OTP")
 | 
			
		||||
	twofa, err := auth.GetTwoFactorByUID(ctx.Doer.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if auth.IsErrTwoFactorNotEnrolled(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +219,7 @@ func (ctx *APIContext) CheckForOTP() {
 | 
			
		|||
		ctx.Error(http.StatusInternalServerError, "GetTwoFactorByUID", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	ok, err := twofa.ValidateTOTP(otpHeader)
 | 
			
		||||
	ok, err := twofa.ValidateTOTP(getOtpHeader(ctx.Req.Header))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.Error(http.StatusInternalServerError, "ValidateTOTP", err)
 | 
			
		||||
		return
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								modules/context/api_forgejo_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								modules/context/api_forgejo_test.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package context
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestGetOtpHeader(t *testing.T) {
 | 
			
		||||
	header := http.Header{}
 | 
			
		||||
	assert.EqualValues(t, "", getOtpHeader(header))
 | 
			
		||||
	// Gitea
 | 
			
		||||
	giteaOtp := "123456"
 | 
			
		||||
	header.Set("X-Gitea-OTP", giteaOtp)
 | 
			
		||||
	assert.EqualValues(t, giteaOtp, getOtpHeader(header))
 | 
			
		||||
	// Forgejo has precedence
 | 
			
		||||
	forgejoOtp := "abcdef"
 | 
			
		||||
	header.Set("X-Forgejo-OTP", forgejoOtp)
 | 
			
		||||
	assert.EqualValues(t, forgejoOtp, getOtpHeader(header))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +56,7 @@
 | 
			
		|||
//	     description: Sudo API request as the user provided as the key. Admin privileges are required.
 | 
			
		||||
//	TOTPHeader:
 | 
			
		||||
//	     type: apiKey
 | 
			
		||||
//	     name: X-GITEA-OTP
 | 
			
		||||
//	     name: X-FORGEJO-OTP
 | 
			
		||||
//	     in: header
 | 
			
		||||
//	     description: Must be used in combination with BasicAuth if two-factor authentication is enabled.
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								templates/swagger/v1_json.tmpl
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								templates/swagger/v1_json.tmpl
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -22363,7 +22363,7 @@
 | 
			
		|||
    "TOTPHeader": {
 | 
			
		||||
      "description": "Must be used in combination with BasicAuth if two-factor authentication is enabled.",
 | 
			
		||||
      "type": "apiKey",
 | 
			
		||||
      "name": "X-GITEA-OTP",
 | 
			
		||||
      "name": "X-FORGEJO-OTP",
 | 
			
		||||
      "in": "header"
 | 
			
		||||
    },
 | 
			
		||||
    "Token": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue