Skip to content

Commit fd512ee

Browse files
committed
Add Validation for External OAuth Config
1 parent 96f1259 commit fd512ee

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

pkg/cmd/server/apis/config/validation/master.go

+16
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
2626
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
2727
"github.com/openshift/origin/pkg/cmd/server/cm"
28+
oauthutil "github.com/openshift/origin/pkg/oauth/util"
2829
"github.com/openshift/origin/pkg/security/mcs"
2930
"github.com/openshift/origin/pkg/security/uid"
3031
"github.com/openshift/origin/pkg/util/labelselector"
@@ -144,6 +145,21 @@ func ValidateMasterConfig(config *configapi.MasterConfig, fldPath *field.Path) V
144145
if config.OAuthConfig != nil {
145146
validationResults.Append(ValidateOAuthConfig(config.OAuthConfig, fldPath.Child("oauthConfig")))
146147
}
148+
if config.ExternalOAuthConfig != nil {
149+
if config.OAuthConfig != nil {
150+
validationResults.AddErrors(field.Invalid(fldPath.Child("externalOAuthConfig"), config.ExternalOAuthConfig, "Cannot specify External OAuth Config when the internal Oauth Server is configured"))
151+
}
152+
_, err := oauthutil.LoadOAuthMetadataFile(config.ExternalOAuthConfig.MetadataFile)
153+
if err != nil {
154+
validationResults.AddErrors(field.Invalid(fldPath.Child("externalOAuthConfig", "metadataFile"), config.ExternalOAuthConfig.MetadataFile, fmt.Sprintf("Metadata validation failed: %v", err)))
155+
}
156+
if len(config.ExternalOAuthConfig.MasterPublicURL) == 0 {
157+
validationResults.AddErrors(field.Required(fldPath.Child("externalOAuthConfig", "masterPublicURL"), ""))
158+
}
159+
if len(config.ExternalOAuthConfig.AssetPublicURL) == 0 {
160+
validationResults.AddErrors(field.Required(fldPath.Child("externalOAuthConfig", "assetPublicURL"), ""))
161+
}
162+
}
147163

148164
validationResults.Append(ValidateServiceAccountConfig(config.ServiceAccountConfig, builtInKubernetes, fldPath.Child("serviceAccountConfig")))
149165

pkg/oauth/util/discovery.go

+27
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66
"io/ioutil"
7+
"net/url"
78

89
"github.com/RangelReale/osin"
910
"github.com/openshift/origin/pkg/authorization/authorizer/scope"
@@ -56,6 +57,20 @@ func GetOauthMetadata(masterPublicURL string) OauthAuthorizationServerMetadata {
5657
}
5758
}
5859

60+
func validateURL(urlString string) error {
61+
urlObj, err := url.Parse(urlString)
62+
if err != nil {
63+
return fmt.Errorf("%q is an invalid URL: %v", urlString, err)
64+
}
65+
if urlObj.Scheme != "https" {
66+
return fmt.Errorf("must use https scheme")
67+
}
68+
if len(urlObj.Host) == 0 {
69+
return fmt.Errorf("must contain a valid host")
70+
}
71+
return nil
72+
}
73+
5974
func LoadOAuthMetadataFile(metadataFile string) ([]byte, error) {
6075
data, err := ioutil.ReadFile(metadataFile)
6176
if err != nil {
@@ -67,5 +82,17 @@ func LoadOAuthMetadataFile(metadataFile string) ([]byte, error) {
6782
return nil, fmt.Errorf("Unable to decode External OAuth Metadata file: %v", err)
6883
}
6984

85+
if err := validateURL(oauthMetadata.Issuer); err != nil {
86+
return nil, fmt.Errorf("Error validating External OAuth Metadata Issuer field: %v", err)
87+
}
88+
89+
if err := validateURL(oauthMetadata.AuthorizationEndpoint); err != nil {
90+
return nil, fmt.Errorf("Error validating External OAuth Metadata AuthorizationEndpoint field: %v", err)
91+
}
92+
93+
if err := validateURL(oauthMetadata.TokenEndpoint); err != nil {
94+
return nil, fmt.Errorf("Error validating External OAuth Metadata TokenEndpoint field: %v", err)
95+
}
96+
7097
return data, nil
7198
}

0 commit comments

Comments
 (0)