diff --git a/internal/client/auth.go b/internal/client/auth.go index 2e8ec66..c2e52df 100644 --- a/internal/client/auth.go +++ b/internal/client/auth.go @@ -38,15 +38,17 @@ func MakeSessionTicket(sta *State) []byte { // for encrypting the UID tthInterval := sta.Now().Unix() / int64(sta.TicketTimeHint) ec := ecdh.NewCurve25519ECDH() - ephKP := sta.getKeyPair(tthInterval) + sta.keyPairsM.Lock() + ephKP := sta.keyPairs[tthInterval] if ephKP == nil { ephPv, ephPub, _ := ec.GenerateKey(rand.Reader) ephKP = &keyPair{ ephPv, ephPub, } - sta.putKeyPair(tthInterval, ephKP) + sta.keyPairs[tthInterval] = ephKP } + sta.keyPairsM.Unlock() ticket := make([]byte, 192) copy(ticket[0:32], ec.Marshal(ephKP.PublicKey)) key, _ := ec.GenerateSharedSecret(ephKP.PrivateKey, sta.staticPub) diff --git a/internal/client/state.go b/internal/client/state.go index 29e6cc0..93ee3c7 100644 --- a/internal/client/state.go +++ b/internal/client/state.go @@ -123,15 +123,3 @@ func (sta *State) ParseConfig(conf string) (err error) { sta.staticPub = pub return nil } - -func (sta *State) getKeyPair(tthInterval int64) *keyPair { - sta.keyPairsM.Lock() - defer sta.keyPairsM.Unlock() - return sta.keyPairs[tthInterval] -} - -func (sta *State) putKeyPair(tthInterval int64, kp *keyPair) { - sta.keyPairsM.Lock() - sta.keyPairs[tthInterval] = kp - sta.keyPairsM.Unlock() -} diff --git a/internal/server/usermanager/userpanel.go b/internal/server/usermanager/userpanel.go index d1480c4..9747dbc 100644 --- a/internal/server/usermanager/userpanel.go +++ b/internal/server/usermanager/userpanel.go @@ -346,7 +346,8 @@ func (up *Userpanel) syncMemFromDB(UID []byte) error { return nil } -// the following functions will return err==nil if user is not active +// the following functions will update the db entries first, then if the +// user is active, it will update it in memory. func (up *Userpanel) setSessionsCap(UID []byte, cap uint32) error { err := up.updateDBEntryUint32(UID, "SessionsCap", cap) @@ -446,6 +447,7 @@ func (up *Userpanel) addUpCredit(UID []byte, delta int64) error { u.addUpCredit(delta) return nil } + func (up *Userpanel) addDownCredit(UID []byte, delta int64) error { err := up.db.Update(func(tx *bolt.Tx) error { b := tx.Bucket(UID)