mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-05-18 16:56:35 +00:00
[BRANDING] X-Forgejo-OTP can be used instead of X-Gitea-OTP
(cherry picked from commit7b0549cd70) (cherry picked from commit13e10a65d9) (cherry picked from commit89982e6c4a) (cherry picked from commita4acf6343d) (cherry picked from commit9886aec9f8) (cherry picked from commit1ee9bd7549) (cherry picked from commitf343cf5597)
This commit is contained in:
parent
0545142833
commit
eaca81faf4
4 changed files with 34 additions and 4 deletions
|
|
@ -188,13 +188,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.Context.Doer.ID)
|
||||
if err != nil {
|
||||
if auth.IsErrTwoFactorNotEnrolled(err) {
|
||||
|
|
@ -203,7 +210,7 @@ func (ctx *APIContext) CheckForOTP() {
|
|||
ctx.Context.Error(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
ok, err := twofa.ValidateTOTP(otpHeader)
|
||||
ok, err := twofa.ValidateTOTP(getOtpHeader(ctx.Req.Header))
|
||||
if err != nil {
|
||||
ctx.Context.Error(http.StatusInternalServerError)
|
||||
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.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -21018,7 +21018,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