Skip to content
2 changes: 1 addition & 1 deletion docs/architecture/rfc-002-github-oauth-multi-tenancy.md
Original file line number Diff line number Diff line change
Expand Up @@ -1112,7 +1112,7 @@ However, PR #7 alone is **not sufficient** for secure multi-tenant operation. Co
2. [GitHub OAuth2 Token Types](https://docs.github.com/en/authentication)
3. [GitHub Enterprise Authentication](https://docs.github.com/en/enterprise-server/authentication)
4. [RFC-001: Secure Multi-Tenant Cache](secure-multi-tenant-rfc.md)
5. [PR #7: Upstream Authentication Improvements](https://github.com/jrepp/github-cache-daemon/pull/7)
5. [PR #7: Upstream Authentication Improvements](https://github.com/jrepp/goblet/pull/7)
6. [Isolation Strategies](../security/isolation-strategies.md)

---
Expand Down
10 changes: 6 additions & 4 deletions goblet-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,10 +331,12 @@ func main() {
}

config := &goblet.ServerConfig{
LocalDiskCacheRoot: *cacheRoot,
URLCanonializer: urlCanonicalizer,
RequestAuthorizer: authorizer,
TokenSource: ts,
LocalDiskCacheRoot: *cacheRoot,
URLCanonializer: urlCanonicalizer,
RequestAuthorizer: authorizer,
TokenSource: func(upstreamURL *url.URL) (*oauth2.Token, error) {
return ts.Token()
},
ErrorReporter: er,
RequestLogger: rl,
LongRunningOperationLogger: lrol,
Expand Down
2 changes: 1 addition & 1 deletion goblet.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ type ServerConfig struct {

RequestAuthorizer func(*http.Request) error

TokenSource oauth2.TokenSource
TokenSource func(upstreamURL *url.URL) (*oauth2.Token, error)

ErrorReporter func(*http.Request, error)

Expand Down
6 changes: 3 additions & 3 deletions managed_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func (r *managedRepository) lsRefsUpstream(command []*gitprotocolio.ProtocolV2Re
if err != nil {
return nil, status.Errorf(codes.Internal, "cannot construct a request object: %v", err)
}
t, err := r.config.TokenSource.Token()
t, err := r.config.TokenSource(r.upstreamURL)
if err != nil {
return nil, status.Errorf(codes.Internal, "cannot obtain an OAuth2 access token for the server: %v", err)
}
Expand Down Expand Up @@ -325,7 +325,7 @@ func (r *managedRepository) fetchUpstream() (err error) {
defer r.mu.Unlock()
if splitGitFetch {
// Fetch heads and changes first.
t, err = r.config.TokenSource.Token()
t, err = r.config.TokenSource(r.upstreamURL)
if err != nil {
err = status.Errorf(codes.Internal, "cannot obtain an OAuth2 access token for the server: %v", err)
return err
Expand All @@ -337,7 +337,7 @@ func (r *managedRepository) fetchUpstream() (err error) {
}
}
if err == nil {
t, err = r.config.TokenSource.Token()
t, err = r.config.TokenSource(r.upstreamURL)
if err != nil {
err = status.Errorf(codes.Internal, "cannot obtain an OAuth2 access token for the server: %v", err)
return err
Expand Down
Loading