diff --git a/common/token/token.go b/common/token/token.go new file mode 100644 index 000000000..73568bcbc --- /dev/null +++ b/common/token/token.go @@ -0,0 +1,13 @@ +package token + +import "math/rand" + +// Generate returns an alphanumeric token of specified length +func Generate(length int) string { + var chars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") + b := make([]rune, length) + for i := range b { + b[i] = chars[rand.Intn(len(chars))] + } + return string(b) +} diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 3966af8d6..89b1ed6f9 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -4,6 +4,7 @@ import ( "erupe-ce/common/byteframe" ps "erupe-ce/common/pascalstring" "erupe-ce/common/stringsupport" + "erupe-ce/common/token" "erupe-ce/server/channelserver" "fmt" "math/rand" @@ -18,15 +19,6 @@ func makeSignInFailureResp(respID RespID) []byte { return bf.Data() } -func randSeq(n int) string { - var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - b := make([]rune, n) - for i := range b { - b[i] = letters[rand.Intn(len(letters))] - } - return string(b) -} - func (s *Session) makeSignInResp(uid int) []byte { returnExpiry := s.server.getReturnExpiry(uid) @@ -37,8 +29,8 @@ func (s *Session) makeSignInResp(uid int) []byte { } rand.Seed(time.Now().UnixNano()) - token := randSeq(16) - s.server.registerToken(uid, token) + sessToken := token.Generate(16) + s.server.registerToken(uid, sessToken) bf := byteframe.NewByteFrame() @@ -51,7 +43,7 @@ func (s *Session) makeSignInResp(uid int) []byte { bf.WriteUint8(1) // entrance server count bf.WriteUint8(uint8(len(chars))) // character count bf.WriteUint32(0xFFFFFFFF) // login_token_number - bf.WriteBytes([]byte(token)) // login_token + bf.WriteBytes([]byte(sessToken)) // login_token bf.WriteUint32(uint32(time.Now().Unix())) // current time if s.server.erupeConfig.DevMode { if s.server.erupeConfig.DevModeOptions.PatchServerManifest != "" && s.server.erupeConfig.DevModeOptions.PatchServerFile != "" {