From ccfd2ac36f61e306698e25e1252a5836980e85f8 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 12 Mar 2023 23:29:50 +1100 Subject: [PATCH] create RNG in token module --- common/token/token.go | 13 +++++++++++-- server/channelserver/handlers_cast_binary.go | 5 ++--- server/channelserver/handlers_event.go | 6 +++--- server/channelserver/handlers_festa.go | 5 ++--- server/signserver/dsgn_resp.go | 5 +---- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/common/token/token.go b/common/token/token.go index 73568bcbc..c474fdaf5 100644 --- a/common/token/token.go +++ b/common/token/token.go @@ -1,13 +1,22 @@ package token -import "math/rand" +import ( + "math/rand" + "time" +) // Generate returns an alphanumeric token of specified length func Generate(length int) string { + rng := RNG() var chars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") b := make([]rune, length) for i := range b { - b[i] = chars[rand.Intn(len(chars))] + b[i] = chars[rng.Intn(len(chars))] } return string(b) } + +// RNG returns a new RNG generator +func RNG() *rand.Rand { + return rand.New(rand.NewSource(time.Now().UnixNano())) +} diff --git a/server/channelserver/handlers_cast_binary.go b/server/channelserver/handlers_cast_binary.go index 10d15938a..1b6b9a6ba 100644 --- a/server/channelserver/handlers_cast_binary.go +++ b/server/channelserver/handlers_cast_binary.go @@ -4,13 +4,13 @@ import ( "encoding/hex" "erupe-ce/common/byteframe" "erupe-ce/common/mhfcourse" + "erupe-ce/common/token" "erupe-ce/config" "erupe-ce/network/binpacket" "erupe-ce/network/mhfpacket" "fmt" "golang.org/x/exp/slices" "math" - "math/rand" "strings" "time" @@ -370,8 +370,7 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { roll.SetLE() roll.WriteUint16(4) // Unk roll.WriteUint16(authorLen) - rand.Seed(time.Now().UnixNano()) - dice := fmt.Sprintf("%d", rand.Intn(100)+1) + dice := fmt.Sprintf("%d", token.RNG().Intn(100)+1) roll.WriteUint16(uint16(len(dice) + 1)) roll.WriteNullTerminatedBytes([]byte(dice)) roll.WriteNullTerminatedBytes(tmp.ReadNullTerminatedBytes()) diff --git a/server/channelserver/handlers_event.go b/server/channelserver/handlers_event.go index 1c8d3f319..bd44e8a10 100644 --- a/server/channelserver/handlers_event.go +++ b/server/channelserver/handlers_event.go @@ -1,8 +1,8 @@ package channelserver import ( + "erupe-ce/common/token" "math" - "math/rand" "time" "erupe-ce/common/byteframe" @@ -95,9 +95,9 @@ func generateFeatureWeapons(count int) activeFeature { } nums := make([]int, 0) var result int - r := rand.New(rand.NewSource(time.Now().UnixNano())) + rng := token.RNG() for len(nums) < count { - num := r.Intn(14) + num := rng.Intn(14) exist := false for _, v := range nums { if v == num { diff --git a/server/channelserver/handlers_festa.go b/server/channelserver/handlers_festa.go index 2659aae1d..155cee3d8 100644 --- a/server/channelserver/handlers_festa.go +++ b/server/channelserver/handlers_festa.go @@ -4,8 +4,8 @@ import ( "encoding/hex" "erupe-ce/common/byteframe" ps "erupe-ce/common/pascalstring" + "erupe-ce/common/token" "erupe-ce/network/mhfpacket" - "math/rand" "sort" "time" ) @@ -336,8 +336,7 @@ func handleMsgMhfEntryFesta(s *Session, p mhfpacket.MHFPacket) { doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) return } - rand.Seed(time.Now().UnixNano()) - team := uint32(rand.Intn(2)) + team := uint32(token.RNG().Intn(2)) switch team { case 0: s.server.db.Exec("INSERT INTO festa_registrations VALUES ($1, 'blue')", guild.ID) diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 1fc78f3d9..3df3bdf71 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -7,11 +7,9 @@ import ( "erupe-ce/common/token" "erupe-ce/server/channelserver" "fmt" - "math/rand" + "go.uber.org/zap" "strings" "time" - - "go.uber.org/zap" ) func makeSignInFailureResp(respID RespID) []byte { @@ -29,7 +27,6 @@ func (s *Session) makeSignInResp(uid int) []byte { s.logger.Warn("Error getting characters from DB", zap.Error(err)) } - rand.Seed(time.Now().UnixNano()) sessToken := token.Generate(16) s.server.registerToken(uid, sessToken)