Files
3x-ui-agent/internal/web/service/setting_security_test.go

55 lines
1.4 KiB
Go

package service
import (
"path/filepath"
"testing"
"github.com/mhsanaei/3x-ui/v3/internal/database"
)
func setupSettingTestDB(t *testing.T) {
t.Helper()
if err := database.InitDB(filepath.Join(t.TempDir(), "x-ui.db")); err != nil {
t.Fatal(err)
}
t.Cleanup(func() {
if err := database.CloseDB(); err != nil {
t.Fatal(err)
}
})
}
func TestSanitizePublicHTTPURLBlocksPrivateAddressUnlessAllowed(t *testing.T) {
if _, err := SanitizePublicHTTPURL("http://127.0.0.1:8080/hook", false); err == nil {
t.Fatal("expected localhost URL to be blocked")
}
if got, err := SanitizePublicHTTPURL("http://127.0.0.1:8080/hook", true); err != nil || got != "http://127.0.0.1:8080/hook" {
t.Fatalf("allowPrivate result = %q, %v", got, err)
}
}
func TestGetSecret_FallbacksOnEmptyDatabaseSetting(t *testing.T) {
setupSettingTestDB(t)
s := &SettingService{}
if err := s.saveSetting("secret", ""); err != nil {
t.Fatal(err)
}
secretBytes, err := s.GetSecret()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
secret := string(secretBytes)
if len(secret) != 32 {
t.Fatalf("secret length = %d, want 32-byte non-empty string", len(secret))
}
persisted, err := s.getString("secret")
if err != nil {
t.Fatalf("failed to retrieve persisted secret: %v", err)
}
if persisted != secret {
t.Fatalf("persisted secret = %q, want %q", persisted, secret)
}
}