|
|
|
|
@ -7,6 +7,7 @@ import (
|
|
|
|
|
"encoding/json" |
|
|
|
|
"errors" |
|
|
|
|
"fmt" |
|
|
|
|
"log/slog" |
|
|
|
|
"net" |
|
|
|
|
"net/http" |
|
|
|
|
"os" |
|
|
|
|
@ -17,7 +18,6 @@ import (
|
|
|
|
|
"golang.org/x/oauth2" |
|
|
|
|
|
|
|
|
|
"github.com/dexidp/dex/connector" |
|
|
|
|
"github.com/dexidp/dex/pkg/log" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type cloudfoundryConnector struct { |
|
|
|
|
@ -29,7 +29,7 @@ type cloudfoundryConnector struct {
|
|
|
|
|
authorizationURL string |
|
|
|
|
userInfoURL string |
|
|
|
|
httpClient *http.Client |
|
|
|
|
logger log.Logger |
|
|
|
|
logger *slog.Logger |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type connectorData struct { |
|
|
|
|
@ -106,7 +106,7 @@ type login struct {
|
|
|
|
|
Href string `json:"href"` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *Config) Open(id string, logger log.Logger) (connector.Connector, error) { |
|
|
|
|
func (c *Config) Open(id string, logger *slog.Logger) (connector.Connector, error) { |
|
|
|
|
var err error |
|
|
|
|
|
|
|
|
|
cloudfoundryConn := &cloudfoundryConnector{ |
|
|
|
|
@ -125,16 +125,14 @@ func (c *Config) Open(id string, logger log.Logger) (connector.Connector, error)
|
|
|
|
|
apiURL := strings.TrimRight(c.APIURL, "/") |
|
|
|
|
apiResp, err := cloudfoundryConn.httpClient.Get(apiURL) |
|
|
|
|
if err != nil { |
|
|
|
|
logger.Errorf("failed-to-send-request-to-cloud-controller-api", err) |
|
|
|
|
return nil, err |
|
|
|
|
return nil, fmt.Errorf("failed-to-send-request-to-cloud-controller-api: %w", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
defer apiResp.Body.Close() |
|
|
|
|
|
|
|
|
|
if apiResp.StatusCode != http.StatusOK { |
|
|
|
|
err = fmt.Errorf("request failed with status %d", apiResp.StatusCode) |
|
|
|
|
logger.Errorf("failed-get-info-response-from-api", err) |
|
|
|
|
return nil, err |
|
|
|
|
return nil, fmt.Errorf("failed-get-info-response-from-api: %w", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var apiResult infoResp |
|
|
|
|
@ -144,14 +142,12 @@ func (c *Config) Open(id string, logger log.Logger) (connector.Connector, error)
|
|
|
|
|
uaaURL := strings.TrimRight(apiResult.Links.Login.Href, "/") |
|
|
|
|
uaaResp, err := cloudfoundryConn.httpClient.Get(fmt.Sprintf("%s/.well-known/openid-configuration", uaaURL)) |
|
|
|
|
if err != nil { |
|
|
|
|
logger.Errorf("failed-to-send-request-to-uaa-api", err) |
|
|
|
|
return nil, err |
|
|
|
|
return nil, fmt.Errorf("failed-to-send-request-to-uaa-api: %w", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if apiResp.StatusCode != http.StatusOK { |
|
|
|
|
err = fmt.Errorf("request failed with status %d", apiResp.StatusCode) |
|
|
|
|
logger.Errorf("failed-to-get-well-known-config-response-from-api", err) |
|
|
|
|
return nil, err |
|
|
|
|
return nil, fmt.Errorf("failed-to-get-well-known-config-response-from-api: %w", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
defer uaaResp.Body.Close() |
|
|
|
|
@ -160,8 +156,7 @@ func (c *Config) Open(id string, logger log.Logger) (connector.Connector, error)
|
|
|
|
|
err = json.NewDecoder(uaaResp.Body).Decode(&uaaResult) |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
logger.Errorf("failed-to-decode-response-from-uaa-api", err) |
|
|
|
|
return nil, err |
|
|
|
|
return nil, fmt.Errorf("failed-to-decode-response-from-uaa-api: %w", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cloudfoundryConn.tokenURL, _ = uaaResult["token_endpoint"].(string) |
|
|
|
|
|