Mercurial > gemma
diff auth/session.go @ 339:33b59c848771
Factored out some miscellaneous code into own package.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 05 Aug 2018 15:35:29 +0200 |
parents | e48da6f427c8 |
children | 4c211ad5349e |
line wrap: on
line diff
--- a/auth/session.go Fri Aug 03 22:20:06 2018 +0200 +++ b/auth/session.go Sun Aug 05 15:35:29 2018 +0200 @@ -1,10 +1,11 @@ package auth import ( - "crypto/rand" "encoding/base64" "io" "time" + + "gemma.intevation.de/gemma/misc" ) type Roles []string @@ -42,45 +43,38 @@ } func (s *Session) serialize(w io.Writer) error { - wr := binWriter{w: w} - wr.write(s.ExpiresAt) - wr.writeString(s.User) - wr.writeString(s.Password) - wr.write(uint32(len(s.Roles))) + wr := misc.BinWriter{W: w} + wr.Write(s.ExpiresAt) + wr.WriteString(s.User) + wr.WriteString(s.Password) + wr.Write(uint32(len(s.Roles))) for _, role := range s.Roles { - wr.writeString(role) + wr.WriteString(role) } - return wr.err + return wr.Err } func (s *Session) deserialize(r io.Reader) error { var x Session var n uint32 - rd := binReader{r: r} - rd.read(&x.ExpiresAt) - rd.readString(&x.User) - rd.readString(&x.Password) - rd.read(&n) + rd := misc.BinReader{R: r} + rd.Read(&x.ExpiresAt) + rd.ReadString(&x.User) + rd.ReadString(&x.Password) + rd.Read(&n) x.Roles = make(Roles, n) for i := uint32(0); n > 0 && i < n; i++ { - rd.readString(&x.Roles[i]) + rd.ReadString(&x.Roles[i]) } - if rd.err == nil { + if rd.Err == nil { *s = x } - return rd.err + return rd.Err } func GenerateSessionKey() string { - return base64.URLEncoding.EncodeToString(GenerateRandomKey(sessionKeyLength)) -} - -func GenerateRandomKey(length int) []byte { - k := make([]byte, length) - if _, err := io.ReadFull(rand.Reader, k); err != nil { - return nil - } - return k + return base64.URLEncoding.EncodeToString( + misc.GenerateRandomKey(sessionKeyLength)) } func GenerateSession(user, password string) (string, *Session, error) {