Some checks are pending
CI Pipeline / Run Tests (push) Waiting to run
CI Pipeline / Lint Code (push) Waiting to run
CI Pipeline / Security Scan (push) Waiting to run
CI Pipeline / Build Docker Images (push) Blocked by required conditions
CI Pipeline / E2E Tests (push) Blocked by required conditions
134 lines
3.6 KiB
Go
134 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
"net/http"
|
|
"time"
|
|
|
|
"git.sovbit.dev/enki/torrentGateway/internal/auth"
|
|
"git.sovbit.dev/enki/torrentGateway/internal/middleware"
|
|
)
|
|
|
|
// Common auth errors for testing
|
|
var (
|
|
ErrInvalidSession = errors.New("invalid or expired session")
|
|
ErrUserNotFound = errors.New("user not found")
|
|
)
|
|
|
|
// MockAuth provides authentication bypass for testing
|
|
type MockAuth struct {
|
|
testPubkey string
|
|
isAdmin bool
|
|
}
|
|
|
|
// NewMockAuth creates a new mock authentication system
|
|
func NewMockAuth(testPubkey string, isAdmin bool) *MockAuth {
|
|
return &MockAuth{
|
|
testPubkey: testPubkey,
|
|
isAdmin: isAdmin,
|
|
}
|
|
}
|
|
|
|
// GetTestSessionToken returns a mock session token for testing
|
|
func (m *MockAuth) GetTestSessionToken() string {
|
|
return "test_session_token_" + m.testPubkey
|
|
}
|
|
|
|
// CreateTestMiddleware creates middleware that bypasses auth for testing
|
|
func (m *MockAuth) CreateTestMiddleware() func(http.Handler) http.Handler {
|
|
return func(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
// Add test user to context
|
|
ctx := context.WithValue(r.Context(), middleware.UserKey, m.testPubkey)
|
|
next.ServeHTTP(w, r.WithContext(ctx))
|
|
})
|
|
}
|
|
}
|
|
|
|
// MockNostrAuth implements the auth.NostrAuth interface for testing
|
|
type MockNostrAuth struct {
|
|
db *sql.DB
|
|
testPubkey string
|
|
isAdmin bool
|
|
}
|
|
|
|
// NewMockNostrAuth creates a mock NostrAuth for testing
|
|
func NewMockNostrAuth(db *sql.DB, testPubkey string, isAdmin bool) *MockNostrAuth {
|
|
return &MockNostrAuth{
|
|
db: db,
|
|
testPubkey: testPubkey,
|
|
isAdmin: isAdmin,
|
|
}
|
|
}
|
|
|
|
// ValidateNIP07 always returns the test pubkey for testing
|
|
func (m *MockNostrAuth) ValidateNIP07(authEvent string) (string, error) {
|
|
return m.testPubkey, nil
|
|
}
|
|
|
|
// ValidateNIP46 always returns the test pubkey for testing
|
|
func (m *MockNostrAuth) ValidateNIP46(bunkerURL string) (string, error) {
|
|
return m.testPubkey, nil
|
|
}
|
|
|
|
// CreateSession creates a mock session
|
|
func (m *MockNostrAuth) CreateSession(pubkey string) (*auth.Session, error) {
|
|
return &auth.Session{
|
|
Token: "test_session_token_" + pubkey,
|
|
Pubkey: pubkey,
|
|
CreatedAt: time.Now(),
|
|
ExpiresAt: time.Now().Add(24 * time.Hour),
|
|
}, nil
|
|
}
|
|
|
|
// ValidateSession validates mock sessions
|
|
func (m *MockNostrAuth) ValidateSession(token string) (string, error) {
|
|
if token == "test_session_token_"+m.testPubkey {
|
|
return m.testPubkey, nil
|
|
}
|
|
return "", ErrInvalidSession
|
|
}
|
|
|
|
// GetUser returns mock user data
|
|
func (m *MockNostrAuth) GetUser(pubkey string) (*auth.User, error) {
|
|
return &auth.User{
|
|
Pubkey: pubkey,
|
|
LastLogin: time.Now(),
|
|
}, nil
|
|
}
|
|
|
|
// IsAdmin returns the mock admin status
|
|
func (m *MockNostrAuth) IsAdmin(pubkey string) bool {
|
|
return m.isAdmin && pubkey == m.testPubkey
|
|
}
|
|
|
|
// UpdateUserStats is a no-op for testing
|
|
func (m *MockNostrAuth) UpdateUserStats(pubkey string, storageUsed int64, fileCount int) error {
|
|
return nil
|
|
}
|
|
|
|
// RevokeSession revokes a session (no-op for testing)
|
|
func (m *MockNostrAuth) RevokeSession(token string) error {
|
|
return nil
|
|
}
|
|
|
|
// CleanExpiredSessions cleans expired sessions (no-op for testing)
|
|
func (m *MockNostrAuth) CleanExpiredSessions() error {
|
|
return nil
|
|
}
|
|
|
|
// UpdateUserProfile updates user profile (no-op for testing)
|
|
func (m *MockNostrAuth) UpdateUserProfile(pubkey, displayName, profileImage string) error {
|
|
return nil
|
|
}
|
|
|
|
// CreateTestUser creates a test user in the database
|
|
func (m *MockNostrAuth) CreateTestUser() error {
|
|
_, err := m.db.Exec(`
|
|
INSERT OR IGNORE INTO users (pubkey, storage_used, file_count, last_login, created_at)
|
|
VALUES (?, 0, 0, ?, ?)
|
|
`, m.testPubkey, time.Now(), time.Now())
|
|
return err
|
|
} |