mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2026-05-11 06:48:11 +00:00
tests: fix middleware tests
This commit is contained in:
@@ -5,7 +5,7 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"path"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -17,36 +17,14 @@ import (
|
|||||||
"github.com/tinyauthapp/tinyauth/internal/model"
|
"github.com/tinyauthapp/tinyauth/internal/model"
|
||||||
"github.com/tinyauthapp/tinyauth/internal/repository"
|
"github.com/tinyauthapp/tinyauth/internal/repository"
|
||||||
"github.com/tinyauthapp/tinyauth/internal/service"
|
"github.com/tinyauthapp/tinyauth/internal/service"
|
||||||
"github.com/tinyauthapp/tinyauth/internal/utils/tlog"
|
"github.com/tinyauthapp/tinyauth/internal/utils/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestContextMiddleware(t *testing.T) {
|
func TestContextMiddleware(t *testing.T) {
|
||||||
tlog.NewTestLogger().Init()
|
log := logger.NewLogger().WithTestConfig()
|
||||||
tempDir := t.TempDir()
|
log.Init()
|
||||||
|
|
||||||
authServiceCfg := service.AuthServiceConfig{
|
cfg, runtime := createTestConfigs(t)
|
||||||
LocalUsers: &[]model.LocalUser{
|
|
||||||
{
|
|
||||||
Username: "testuser",
|
|
||||||
Password: "$2a$10$ZwVYQH07JX2zq7Fjkt3gU.BjwvvwPeli4OqOno04RQIv0P7usBrXa", // password
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Username: "totpuser",
|
|
||||||
Password: "$2a$10$ZwVYQH07JX2zq7Fjkt3gU.BjwvvwPeli4OqOno04RQIv0P7usBrXa", // password
|
|
||||||
TOTPSecret: "JPIEBDKJH6UGWJMX66RR3S55UFP2SGKK",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
SessionExpiry: 10, // 10 seconds, useful for testing
|
|
||||||
CookieDomain: "example.com",
|
|
||||||
LoginTimeout: 10, // 10 seconds, useful for testing
|
|
||||||
LoginMaxRetries: 3,
|
|
||||||
SessionCookieName: "tinyauth-session",
|
|
||||||
}
|
|
||||||
|
|
||||||
middlewareCfg := middleware.ContextMiddlewareConfig{
|
|
||||||
CookieDomain: "example.com",
|
|
||||||
SessionCookieName: "tinyauth-session",
|
|
||||||
}
|
|
||||||
|
|
||||||
basicAuthHeader := func(username, password string) string {
|
basicAuthHeader := func(username, password string) string {
|
||||||
return "Basic " + base64.StdEncoding.EncodeToString([]byte(username+":"+password))
|
return "Basic " + base64.StdEncoding.EncodeToString([]byte(username+":"+password))
|
||||||
@@ -270,30 +248,20 @@ func TestContextMiddleware(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
oauthBrokerCfgs := make(map[string]model.OAuthServiceConfig)
|
ctx := context.TODO()
|
||||||
|
wg := &sync.WaitGroup{}
|
||||||
|
|
||||||
app := bootstrap.NewBootstrapApp(model.Config{})
|
app := bootstrap.NewBootstrapApp(cfg)
|
||||||
|
|
||||||
db, err := app.SetupDatabase(path.Join(tempDir, "tinyauth.db"))
|
err := app.SetupDatabase()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
queries := repository.New(db)
|
queries := repository.New(app.GetDB())
|
||||||
|
|
||||||
ldap := service.NewLdapService(service.LdapServiceConfig{})
|
broker := service.NewOAuthBrokerService(log, map[string]model.OAuthServiceConfig{}, ctx)
|
||||||
err = ldap.Init()
|
authService := service.NewAuthService(log, cfg, runtime, ctx, wg, nil, queries, broker)
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
broker := service.NewOAuthBrokerService(oauthBrokerCfgs)
|
contextMiddleware := middleware.NewContextMiddleware(log, runtime, authService, broker)
|
||||||
err = broker.Init()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
authService := service.NewAuthService(authServiceCfg, ldap, queries, broker)
|
|
||||||
err = authService.Init()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
contextMiddleware := middleware.NewContextMiddleware(middlewareCfg, authService, broker)
|
|
||||||
err = contextMiddleware.Init()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
authService.ClearRateLimitsTestingOnly()
|
authService.ClearRateLimitsTestingOnly()
|
||||||
@@ -322,7 +290,6 @@ func TestContextMiddleware(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
err = db.Close()
|
app.GetDB().Close()
|
||||||
require.NoError(t, err)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
package middleware_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"github.com/tinyauthapp/tinyauth/internal/model"
|
||||||
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Note: This code is duplicated from controller_test.go
|
||||||
|
|
||||||
|
var testingTOTPSecret = "JPIEBDKJH6UGWJMX66RR3S55UFP2SGKK"
|
||||||
|
|
||||||
|
func createTestConfigs(t *testing.T) (model.Config, model.RuntimeConfig) {
|
||||||
|
tempDir := t.TempDir()
|
||||||
|
|
||||||
|
config := model.Config{
|
||||||
|
UI: model.UIConfig{
|
||||||
|
Title: "Tinyauth Test",
|
||||||
|
ForgotPasswordMessage: "foo",
|
||||||
|
BackgroundImage: "/background.jpg",
|
||||||
|
WarningsEnabled: true,
|
||||||
|
},
|
||||||
|
OAuth: model.OAuthConfig{
|
||||||
|
AutoRedirect: "none",
|
||||||
|
},
|
||||||
|
OIDC: model.OIDCConfig{
|
||||||
|
Clients: map[string]model.OIDCClientConfig{
|
||||||
|
"test": {
|
||||||
|
ClientID: "some-client-id",
|
||||||
|
ClientSecret: "some-client-secret",
|
||||||
|
TrustedRedirectURIs: []string{"https://test.example.com/callback"},
|
||||||
|
Name: "Test Client",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
PrivateKeyPath: path.Join(tempDir, "key.pem"),
|
||||||
|
PublicKeyPath: path.Join(tempDir, "key.pub"),
|
||||||
|
},
|
||||||
|
Auth: model.AuthConfig{
|
||||||
|
SessionExpiry: 10,
|
||||||
|
LoginTimeout: 10,
|
||||||
|
LoginMaxRetries: 3,
|
||||||
|
},
|
||||||
|
Database: model.DatabaseConfig{
|
||||||
|
Path: path.Join(tempDir, "test.db"),
|
||||||
|
},
|
||||||
|
Resources: model.ResourcesConfig{
|
||||||
|
Enabled: true,
|
||||||
|
Path: path.Join(tempDir, "resources"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
passwd, err := bcrypt.GenerateFromPassword([]byte("password"), bcrypt.DefaultCost)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
runtime := model.RuntimeConfig{
|
||||||
|
ConfiguredProviders: []model.Provider{
|
||||||
|
{
|
||||||
|
Name: "Local",
|
||||||
|
ID: "local",
|
||||||
|
OAuth: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
LocalUsers: []model.LocalUser{
|
||||||
|
{
|
||||||
|
Username: "testuser",
|
||||||
|
Password: string(passwd),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Username: "totpuser",
|
||||||
|
Password: string(passwd),
|
||||||
|
TOTPSecret: testingTOTPSecret,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Username: "attruser",
|
||||||
|
Password: string(passwd),
|
||||||
|
Attributes: model.UserAttributes{
|
||||||
|
Name: "Alice Smith",
|
||||||
|
Email: "alice@example.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Username: "attrtotpuser",
|
||||||
|
Password: string(passwd),
|
||||||
|
TOTPSecret: testingTOTPSecret,
|
||||||
|
Attributes: model.UserAttributes{
|
||||||
|
Name: "Bob Jones",
|
||||||
|
Email: "bob@example.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CookieDomain: "example.com",
|
||||||
|
AppURL: "https://tinyauth.example.com",
|
||||||
|
SessionCookieName: "tinyauth-session",
|
||||||
|
OIDCClients: func() []model.OIDCClientConfig {
|
||||||
|
var clients []model.OIDCClientConfig
|
||||||
|
for id, client := range config.OIDC.Clients {
|
||||||
|
client.ID = id
|
||||||
|
clients = append(clients, client)
|
||||||
|
}
|
||||||
|
return clients
|
||||||
|
}(),
|
||||||
|
}
|
||||||
|
|
||||||
|
return config, runtime
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user