Skip to content

Commit

Permalink
Fix nil pointer exception in webfinger
Browse files Browse the repository at this point in the history
Co-authoredjby: Jörn Dreyer <jdreyer@owncloud.com>
Signed-off-by: Christian Richter <crichter@owncloud.com>
  • Loading branch information
dragonchaser committed Apr 21, 2023
1 parent e0b6ca0 commit 4a347e8
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 2 deletions.
4 changes: 2 additions & 2 deletions ocis-pkg/middleware/oidc.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func OidcAuth(opts ...Option) func(http.Handler) http.Handler {
// it will fetch the keys from the issuer using the .well-known
// endpoint
return goidc.NewProvider(
context.WithValue(context.Background(), oauth2.HTTPClient, http.Client{}),
context.WithValue(context.Background(), oauth2.HTTPClient, &opt.HttpClient),
opt.OidcIssuer,
)
}
Expand All @@ -65,7 +65,7 @@ func OidcAuth(opts ...Option) func(http.Handler) http.Handler {
}

userInfo, err := provider.UserInfo(
context.WithValue(ctx, oauth2.HTTPClient, http.Client{}),
context.WithValue(ctx, oauth2.HTTPClient, &opt.HttpClient),
oauth2.StaticTokenSource(oauth2Token),
)
if err != nil {
Expand Down
11 changes: 11 additions & 0 deletions ocis-pkg/middleware/options.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package middleware

import (
"net/http"

gatewayv1beta1 "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
"github.com/owncloud/ocis/v2/ocis-pkg/log"
)
Expand All @@ -16,6 +18,8 @@ type Options struct {
OidcIssuer string
// GatewayAPIClient is a reva gateway client
GatewayAPIClient gatewayv1beta1.GatewayAPIClient
// HttpClient is a http client
HttpClient http.Client
}

// WithLogger provides a function to set the openid connect issuer option.
Expand All @@ -38,3 +42,10 @@ func WithGatewayAPIClient(val gatewayv1beta1.GatewayAPIClient) Option {
o.GatewayAPIClient = val
}
}

// HttpClient provides a function to set the http client option.
func WithHttpClient(val http.Client) Option {
return func(o *Options) {
o.HttpClient = val
}
}
1 change: 1 addition & 0 deletions services/webfinger/pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ type Config struct {
Relations []string `yaml:"relations" env:"WEBFINGER_RELATIONS" desc:"A comma-separated list of relation URIs or registered relation types to add to webfinger responses."`
IDP string `yaml:"idp" env:"OCIS_URL;OCIS_OIDC_ISSUER;WEBFINGER_OIDC_ISSUER" desc:"The identity provider href for the openid-discovery relation."`
OcisURL string `yaml:"ocis_url" env:"OCIS_URL;WEBFINGER_OWNCLOUD_SERVER_INSTANCE_URL" desc:"The URL for the legacy ownCloud server instance relation (not to be confused with the product ownCloud Server). It defaults to the OCIS_URL but can be overridden to support some reverse proxy corner cases. To shard the deployment, multiple instances can be configured in the configuration file."`
Insecure bool `yaml:"insecure" env:"OCIS_INSECURE;WEBFINGER_INSECURE" desc:"Allow insecure connections to the WEBFINGER service."`

Context context.Context `yaml:"-"`
}
Expand Down
2 changes: 2 additions & 0 deletions services/webfinger/pkg/config/defaults/defaultconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ func DefaultConfig() *config.Config {
},
},
},
IDP: "https://localhost:9200",
Insecure: false,
}
}

Expand Down
14 changes: 14 additions & 0 deletions services/webfinger/pkg/server/http/server.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package http

import (
"crypto/tls"
"net/http"
"net/url"
"time"

"github.com/go-chi/chi/v5"
chimiddleware "github.com/go-chi/chi/v5/middleware"
Expand Down Expand Up @@ -60,9 +62,21 @@ func Server(opts ...Option) (ohttp.Service, error) {
version.String,
))

var oidcHTTPClient = &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
InsecureSkipVerify: options.Config.Insecure, //nolint:gosec
},
DisableKeepAlives: true,
},
Timeout: time.Second * 10,
}

mux.Use(middleware.OidcAuth(
middleware.WithLogger(options.Logger),
middleware.WithOidcIssuer(options.Config.IDP),
middleware.WithHttpClient(*oidcHTTPClient),
))

// this logs http request related data
Expand Down

0 comments on commit 4a347e8

Please sign in to comment.