mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-11-04 00:40:20 +00:00
* feat(auth): allow JWT IP changes by configuration * fix(auth): make JWT IP change setting concurrency-safe * test(auth): move JWT IP change setting tests out of MCP test file
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package model
|
|
|
|
import (
|
|
"path/filepath"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
func TestJWTIPChangeAllowedPersistence(t *testing.T) {
|
|
c := &Config{}
|
|
if c.JWTIPChangeAllowed() {
|
|
t.Fatal("zero-value Config must bind JWT sessions to their IP")
|
|
}
|
|
// An absent agent secret makes Read save the config during initialization.
|
|
path := newTempConfig(t, "jwt_secret_key: test\nallow_jwt_ip_change: true\n")
|
|
if err := c.Read(path, nil); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !c.JWTIPChangeAllowed() {
|
|
t.Fatal("Read must initialize the atomic mirror before saving")
|
|
}
|
|
for _, want := range []bool{true, false} {
|
|
c.SetJWTIPChangeAllowed(want)
|
|
if err := c.Save(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
reloaded := &Config{}
|
|
if err := reloaded.Read(path, nil); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if c.AllowJWTIPChange != want || reloaded.JWTIPChangeAllowed() != want {
|
|
t.Fatalf("saved and reloaded setting must be %v", want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestJWTIPChangeAllowedConcurrentAccess(t *testing.T) {
|
|
c := &Config{filePath: filepath.Join(t.TempDir(), "config.yaml")}
|
|
var wg sync.WaitGroup
|
|
wg.Go(func() {
|
|
for i := 0; i < 10000; i++ {
|
|
c.SetJWTIPChangeAllowed(i%2 == 0)
|
|
}
|
|
})
|
|
wg.Go(func() {
|
|
for i := 0; i < 10000; i++ {
|
|
_ = c.JWTIPChangeAllowed()
|
|
}
|
|
})
|
|
for i := 0; i < 20; i++ {
|
|
if err := c.Save(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
wg.Wait()
|
|
}
|