(config *codersdk.ExternalAuthConfig)
| 1233 | } |
| 1234 | |
| 1235 | func azureDevopsEntraDefaults(config *codersdk.ExternalAuthConfig) codersdk.ExternalAuthConfig { |
| 1236 | defaults := codersdk.ExternalAuthConfig{ |
| 1237 | DisplayName: "Azure DevOps (Entra)", |
| 1238 | DisplayIcon: "/icon/azure-devops.svg", |
| 1239 | Regex: `^(https?://)?dev\.azure\.com(/.*)?$`, |
| 1240 | // TODO: Investigate if 'S256' is accepted and PKCE is supported |
| 1241 | CodeChallengeMethodsSupported: []string{string(promoauth.PKCEChallengeMethodNone)}, |
| 1242 | } |
| 1243 | // The tenant ID is required for urls and is in the auth url. |
| 1244 | if config.AuthURL == "" { |
| 1245 | // No auth url, means we cannot guess the urls. |
| 1246 | return defaults |
| 1247 | } |
| 1248 | |
| 1249 | auth, err := url.Parse(config.AuthURL) |
| 1250 | if err != nil { |
| 1251 | // We need a valid URL to continue with. |
| 1252 | return defaults |
| 1253 | } |
| 1254 | |
| 1255 | // Only extract the tenant ID if the path is what we expect. |
| 1256 | // The path should be /{tenantId}/oauth2/authorize. |
| 1257 | parts := strings.Split(auth.Path, "/") |
| 1258 | if len(parts) < 4 && parts[2] != "oauth2" || parts[3] != "authorize" { |
| 1259 | // Not sure what this path is, abort. |
| 1260 | return defaults |
| 1261 | } |
| 1262 | tenantID := parts[1] |
| 1263 | |
| 1264 | tokenURL := auth.ResolveReference(&url.URL{Path: fmt.Sprintf("/%s/oauth2/token", tenantID)}) |
| 1265 | defaults.TokenURL = tokenURL.String() |
| 1266 | |
| 1267 | // TODO: Discover a validate url for Azure DevOps. |
| 1268 | |
| 1269 | return defaults |
| 1270 | } |
| 1271 | |
| 1272 | var staticDefaults = map[codersdk.EnhancedExternalAuthProvider]codersdk.ExternalAuthConfig{ |
| 1273 | codersdk.EnhancedExternalAuthProviderAzureDevops: { |
no test coverage detected