1
0
mirror of https://github.com/oauth2-proxy/oauth2-proxy.git synced 2025-03-17 21:17:53 +02:00

Small adjustments to doc and code

This commit is contained in:
Kevin Kreitner 2021-02-22 09:48:12 +01:00
parent 69d6fc8a08
commit 45123d248d
3 changed files with 25 additions and 22 deletions

View File

@ -108,6 +108,7 @@ func (s *storedSessionLoader) getValidatedSession(rw http.ResponseWriter, req *h
}
session, err = s.store.LoadWithLock(req)
defer s.store.ReleaseLock(req)
if err != nil {
return nil, err
}
@ -117,12 +118,10 @@ func (s *storedSessionLoader) getValidatedSession(rw http.ResponseWriter, req *h
}
if !s.isSessionRefreshNeeded(session) {
_ = s.store.ReleaseLock(req)
return session, nil
}
logger.Printf("Refreshing %s old session cookie for %s (refresh after %s)", session.Age(), session, s.refreshPeriod)
refreshed, err := s.refreshSession(rw, req, session)
_ = s.store.ReleaseLock(req)
if err != nil {
return nil, fmt.Errorf("error refreshing access token for session (%s): %v", session, err)
}

View File

@ -51,7 +51,7 @@ func (c *client) Get(ctx context.Context, key string) ([]byte, error) {
func (c *client) Lock(ctx context.Context, key string, expiration time.Duration) error {
if c.locks[key] != nil {
return fmt.Errorf("locks for key %s already exists", key)
return fmt.Errorf("lock for key %s already exists", key)
}
lock, err := c.locker.Obtain(ctx, key, expiration, nil)
if err != nil {
@ -65,23 +65,13 @@ func (c *client) Unlock(ctx context.Context, key string) error {
if c.locks[key] == nil {
return nil
}
return c.locks[key].Release(ctx)
err := c.locks[key].Release(ctx)
delete(c.locks, key)
return err
}
func (c *client) Set(ctx context.Context, key string, value []byte, expiration time.Duration) error {
err := c.Client.Set(ctx, key, value, expiration).Err()
if err != nil {
return err
}
if c.locks[key] == nil {
return nil
}
err = c.locks[key].Release(ctx)
if err != nil {
return err
}
c.locks = nil
return nil
return c.Client.Set(ctx, key, value, expiration).Err()
}
func (c *client) Del(ctx context.Context, key string) error {
@ -105,12 +95,23 @@ func newClusterClient(c *redis.ClusterClient) Client {
}
func (c *clusterClient) Get(ctx context.Context, key string) ([]byte, error) {
if c.locks[key] != nil {
for {
ttl, err := c.locks[key].TTL(ctx)
if err != nil {
return nil, err
}
if ttl <= 0 {
break
}
}
}
return c.ClusterClient.Get(ctx, key).Bytes()
}
func (c *clusterClient) Lock(ctx context.Context, key string, expiration time.Duration) error {
if c.locks[key] != nil {
return fmt.Errorf("locks for key %s already exists", key)
return fmt.Errorf("lock for key %s already exists", key)
}
lock, err := c.locker.Obtain(ctx, key, expiration, nil)
if err != nil {
@ -124,7 +125,9 @@ func (c *clusterClient) Unlock(ctx context.Context, key string) error {
if c.locks[key] == nil {
return nil
}
return c.locks[key].Release(ctx)
err := c.locks[key].Release(ctx)
delete(c.locks, key)
return err
}
func (c *clusterClient) Set(ctx context.Context, key string, value []byte, expiration time.Duration) error {

View File

@ -54,16 +54,17 @@ func (store *SessionStore) Load(ctx context.Context, key string) ([]byte, error)
return value, nil
}
// ReleaseLock sessions.SessionState information from a persistence
// Load reads sessions.SessionState information from a persistence
// cookie within the HTTP request object and locks it on redis
func (store *SessionStore) LoadWithLock(ctx context.Context, key string) ([]byte, error) {
value, err := store.Client.Get(ctx, key)
if err != nil {
return nil, fmt.Errorf("error loading redis session: %v", err)
}
err = store.Client.Lock(ctx, key, 200*time.Millisecond)
err = store.Client.Lock(ctx, key, 300*time.Millisecond)
if err != nil {
return nil, fmt.Errorf("error setting redis locks: %v", err)
return nil, fmt.Errorf("error setting redis lock: %v", err)
}
return value, nil
}