Skip to content

Commit 1013a3a

Browse files
authored
Merge pull request #2154 from zhanggbj/secure_session
✨ Improve session handling with a secure session key
2 parents 5ba5364 + 76b1dd8 commit 1013a3a

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

pkg/session/session.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package session
1818

1919
import (
2020
"context"
21+
"crypto/sha256"
2122
"fmt"
2223
"net/netip"
2324
"net/url"
@@ -113,14 +114,22 @@ func (p *Params) WithFeatures(feature Feature) *Params {
113114
// GetOrCreate gets a cached session or creates a new one if one does not
114115
// already exist.
115116
func GetOrCreate(ctx context.Context, params *Params) (*Session, error) {
116-
logger := ctrl.LoggerFrom(ctx).WithName("session")
117+
logger := ctrl.LoggerFrom(ctx).WithName("session").WithValues(
118+
"server", params.server,
119+
"datacenter", params.datacenter,
120+
"username", params.userinfo.Username())
121+
117122
sessionMU.Lock()
118123
defer sessionMU.Unlock()
119124

120-
sessionKey := params.server + params.userinfo.Username() + params.datacenter
125+
userPassword, _ := params.userinfo.Password()
126+
h := sha256.New()
127+
h.Write([]byte(userPassword))
128+
hashedUserPassword := h.Sum(nil)
129+
sessionKey := fmt.Sprintf("%s#%s#%s#%x", params.server, params.datacenter, params.userinfo.Username(),
130+
hashedUserPassword)
121131
if cachedSession, ok := sessionCache.Load(sessionKey); ok {
122132
s := cachedSession.(*Session)
123-
logger = logger.WithValues("server", params.server, "datacenter", params.datacenter)
124133

125134
vimSessionActive, err := s.SessionManager.SessionIsActive(ctx)
126135
if err != nil {
@@ -220,7 +229,7 @@ func newClient(ctx context.Context, logger logr.Logger, sessionKey string, url *
220229
_, err := methods.GetCurrentTime(ctx, tripper)
221230
if err != nil {
222231
logger.Error(err, "failed to keep alive govmomi client")
223-
logger.Info("clearing the session", "key", sessionKey)
232+
logger.Info("clearing the session")
224233
sessionCache.Delete(sessionKey)
225234
}
226235
return err
@@ -247,7 +256,7 @@ func newManager(ctx context.Context, logger logr.Logger, sessionKey string, clie
247256
return nil
248257
}
249258

250-
logger.Info("rest client session expired, clearing session", "key", sessionKey)
259+
logger.Info("rest client session expired, clearing session")
251260
sessionCache.Delete(sessionKey)
252261
return errors.New("rest client session expired")
253262
})

0 commit comments

Comments
 (0)