Skip to content

Commit 5d0489b

Browse files
committed
refactor validate to check expiary
1 parent 3b6a39f commit 5d0489b

File tree

5 files changed

+22
-6
lines changed

5 files changed

+22
-6
lines changed

coderd/database/modelmethods.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"time"
77

88
"golang.org/x/exp/maps"
9+
"golang.org/x/oauth2"
910

1011
"github.com/coder/coder/v2/coderd/database/dbtime"
1112
"github.com/coder/coder/v2/coderd/rbac"
@@ -268,6 +269,14 @@ func (u ExternalAuthLink) RBACObject() rbac.Object {
268269
return rbac.ResourceUserData.WithID(u.UserID).WithOwner(u.UserID.String())
269270
}
270271

272+
func (u ExternalAuthLink) OAuthToken() *oauth2.Token {
273+
return &oauth2.Token{
274+
AccessToken: u.OAuthAccessToken,
275+
RefreshToken: u.OAuthRefreshToken,
276+
Expiry: u.OAuthExpiry,
277+
}
278+
}
279+
271280
func (u UserLink) RBACObject() rbac.Object {
272281
// I assume UserData is ok?
273282
return rbac.ResourceUserData.WithOwner(u.UserID.String()).WithID(u.UserID)

coderd/externalauth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (api *API) externalAuthByID(w http.ResponseWriter, r *http.Request) {
5757
}
5858
var eg errgroup.Group
5959
eg.Go(func() (err error) {
60-
res.Authenticated, res.User, err = config.ValidateToken(ctx, link.OAuthAccessToken)
60+
res.Authenticated, res.User, err = config.ValidateToken(ctx, link.OAuthToken())
6161
return err
6262
})
6363
eg.Go(func() (err error) {

coderd/externalauth/externalauth.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ func (c *Config) RefreshToken(ctx context.Context, db database.Store, externalAu
138138
retryCtx, retryCtxCancel := context.WithTimeout(ctx, time.Second)
139139
defer retryCtxCancel()
140140
validate:
141-
valid, _, err := c.ValidateToken(ctx, token.AccessToken)
141+
valid, _, err := c.ValidateToken(ctx, token)
142142
if err != nil {
143143
return externalAuthLink, false, xerrors.Errorf("validate external auth token: %w", err)
144144
}
@@ -179,7 +179,14 @@ validate:
179179

180180
// ValidateToken ensures the Git token provided is valid!
181181
// The user is optionally returned if the provider supports it.
182-
func (c *Config) ValidateToken(ctx context.Context, token string) (bool, *codersdk.ExternalAuthUser, error) {
182+
func (c *Config) ValidateToken(ctx context.Context, link *oauth2.Token) (bool, *codersdk.ExternalAuthUser, error) {
183+
if link == nil {
184+
return false, nil, xerrors.New("validate external auth token: token is nil")
185+
}
186+
if !link.Expiry.IsZero() && link.Expiry.Before(dbtime.Now()) {
187+
return false, nil, nil
188+
}
189+
183190
if c.ValidateURL == "" {
184191
// Default that the token is valid if no validation URL is provided.
185192
return true, nil, nil
@@ -189,7 +196,7 @@ func (c *Config) ValidateToken(ctx context.Context, token string) (bool, *coders
189196
return false, nil, err
190197
}
191198

192-
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
199+
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", link.AccessToken))
193200
res, err := c.InstrumentedOAuth2Config.Do(ctx, promoauth.SourceValidateToken, req)
194201
if err != nil {
195202
return false, nil, err

coderd/promoauth/oauth2_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func TestInstrument(t *testing.T) {
7575
require.Equal(t, count("TokenSource"), 1)
7676

7777
// Try a validate
78-
valid, _, err := cfg.ValidateToken(ctx, refreshed.AccessToken)
78+
valid, _, err := cfg.ValidateToken(ctx, refreshed)
7979
require.NoError(t, err)
8080
require.True(t, valid)
8181
require.Equal(t, count("ValidateToken"), 1)

coderd/workspaceagents.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2143,7 +2143,7 @@ func (api *API) workspaceAgentsExternalAuthListen(rw http.ResponseWriter, ctx co
21432143
continue
21442144
}
21452145

2146-
valid, _, err := externalAuthConfig.ValidateToken(ctx, externalAuthLink.OAuthAccessToken)
2146+
valid, _, err := externalAuthConfig.ValidateToken(ctx, externalAuthLink.OAuthToken())
21472147
if err != nil {
21482148
api.Logger.Warn(ctx, "failed to validate external auth token",
21492149
slog.F("workspace_owner_id", workspace.OwnerID.String()),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy