fix randomizer and err in config

This commit is contained in:
ycc
2026-02-02 15:32:36 +01:00
parent f498cfad1e
commit bb56b8dd9c
4 changed files with 96 additions and 26 deletions

View File

@@ -6,6 +6,8 @@ import (
"math/rand"
"os"
"path/filepath"
"strings"
"sync"
"time"
"forge.redroom.link/yves/meowlib"
@@ -15,6 +17,12 @@ import (
const maxHiddenCount = 30
// Package-level random number generator with mutex for thread-safe access
var (
rngMu sync.Mutex
rng = rand.New(rand.NewSource(time.Now().UnixNano()))
)
type Identity struct {
Nickname string `json:"nickname,omitempty"`
DefaultAvatar string `json:"default_avatar,omitempty"`
@@ -282,8 +290,9 @@ func (id *Identity) HidePeer(peerIdx int, password string) error {
func (id *Identity) generateRandomHiddenStuff() error {
var err error
r := rand.New(rand.NewSource(time.Now().UnixNano()))
count := r.Intn(maxHiddenCount) + 1
rngMu.Lock()
count := rng.Intn(maxHiddenCount) + 1
rngMu.Unlock()
for i := 1; i < count; i++ {
var p Peer
p.Uid = uuid.New().String()
@@ -385,17 +394,29 @@ func (id *Identity) SaveBackgroundJob() error {
}
func randomLenString(min int, max int) string {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
n := r.Intn(max-min) + min
return randomString(n)
rngMu.Lock()
defer rngMu.Unlock()
length := rng.Intn(max-min+1) + min
return randomStringLocked(length)
}
func randomString(n int) string {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
s := make([]rune, n)
for i := range s {
s[i] = letters[r.Intn(len(letters))]
}
return string(s)
rngMu.Lock()
defer rngMu.Unlock()
return randomStringLocked(n)
}
// randomStringLocked generates a random string of length n.
// Must be called with rngMu already locked.
func randomStringLocked(n int) string {
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var b strings.Builder
b.Grow(n)
for i := 0; i < n; i++ {
b.WriteByte(letterBytes[rng.Intn(len(letterBytes))])
}
return b.String()
}