2025-04-29 10:34:07 +00:00
|
|
|
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package auth
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"forgejo.org/models/unittest"
|
|
|
|
|
2025-09-18 00:39:06 +02:00
|
|
|
"github.com/pquerna/otp/totp"
|
2025-04-29 10:34:07 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestHasTwoFactorByUID(t *testing.T) {
|
|
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
|
|
|
|
t.Run("No twofactor", func(t *testing.T) {
|
|
|
|
ok, err := HasTwoFactorByUID(t.Context(), 2)
|
|
|
|
require.NoError(t, err)
|
|
|
|
assert.False(t, ok)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("WebAuthn credential", func(t *testing.T) {
|
|
|
|
ok, err := HasTwoFactorByUID(t.Context(), 32)
|
|
|
|
require.NoError(t, err)
|
|
|
|
assert.True(t, ok)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("TOTP", func(t *testing.T) {
|
|
|
|
ok, err := HasTwoFactorByUID(t.Context(), 24)
|
|
|
|
require.NoError(t, err)
|
|
|
|
assert.True(t, ok)
|
|
|
|
})
|
|
|
|
}
|
2025-09-18 00:39:06 +02:00
|
|
|
|
|
|
|
func TestNewTwoFactor(t *testing.T) {
|
|
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
|
|
|
|
otpKey, err := totp.Generate(totp.GenerateOpts{
|
|
|
|
SecretSize: 40,
|
|
|
|
Issuer: "forgejo-test",
|
|
|
|
AccountName: "user2",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
t.Run("Transaction failed", func(t *testing.T) {
|
|
|
|
reset := unittest.SetFaultInjector(2)
|
|
|
|
require.ErrorIs(t, NewTwoFactor(t.Context(), &TwoFactor{UID: 44}, otpKey.Secret()), unittest.ErrFaultInjected)
|
|
|
|
reset()
|
|
|
|
|
|
|
|
unittest.AssertExistsIf(t, false, &TwoFactor{UID: 44})
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Normal", func(t *testing.T) {
|
|
|
|
reset := unittest.SetFaultInjector(4)
|
|
|
|
require.NoError(t, NewTwoFactor(t.Context(), &TwoFactor{UID: 44}, otpKey.Secret()))
|
|
|
|
reset()
|
|
|
|
|
|
|
|
unittest.AssertExistsIf(t, true, &TwoFactor{UID: 44})
|
|
|
|
})
|
|
|
|
}
|