|
1 | 1 | using System;
|
| 2 | +using System.Collections.Generic; |
| 3 | +using System.Linq; |
2 | 4 | using GitCredentialManager.Authentication.OAuth;
|
3 | 5 |
|
4 | 6 | namespace GitCredentialManager
|
5 | 7 | {
|
6 | 8 | public class GenericOAuthConfig
|
7 | 9 | {
|
8 |
| - public static bool TryGet(ITrace trace, ISettings settings, Uri remoteUri, out GenericOAuthConfig config) |
| 10 | + public static bool TryGet(ITrace trace, ISettings settings, InputArguments input, out GenericOAuthConfig config) |
9 | 11 | {
|
10 | 12 | config = new GenericOAuthConfig();
|
| 13 | + Uri authzEndpointUri = null; |
| 14 | + Uri tokenEndpointUri = null; |
| 15 | + var remoteUri = input.GetRemoteUri(); |
11 | 16 |
|
12 |
| - if (!settings.TryGetSetting( |
| 17 | + if (input.WwwAuth.Any(x => x.Contains("Basic realm=\"Gitea\""))) |
| 18 | + { |
| 19 | + // https://docs.gitea.com/next/development/oauth2-provider?_highlight=oauth#pre-configured-applications |
| 20 | + trace.WriteLine($"Using universal Gitea OAuth configuration"); |
| 21 | + Uri.TryCreate(remoteUri, "/login/oauth/authorize", out authzEndpointUri); |
| 22 | + Uri.TryCreate(remoteUri, "/login/oauth/access_token", out tokenEndpointUri); |
| 23 | + config.ClientId = "e90ee53c-94e2-48ac-9358-a874fb9e0662"; |
| 24 | + config.RedirectUri = new Uri("http://127.0.0.1"); |
| 25 | + } |
| 26 | + |
| 27 | + if (settings.TryGetSetting( |
13 | 28 | Constants.EnvironmentVariables.OAuthAuthzEndpoint,
|
14 | 29 | Constants.GitConfiguration.Credential.SectionName,
|
15 | 30 | Constants.GitConfiguration.Credential.OAuthAuthzEndpoint,
|
16 |
| - out string authzEndpoint) || |
17 |
| - !Uri.TryCreate(remoteUri, authzEndpoint, out Uri authzEndpointUri)) |
| 31 | + out string authzEndpoint)) |
| 32 | + { |
| 33 | + Uri.TryCreate(remoteUri, authzEndpoint, out authzEndpointUri); |
| 34 | + } |
| 35 | + |
| 36 | + if (authzEndpointUri == null) |
18 | 37 | {
|
19 | 38 | trace.WriteLine($"Invalid OAuth configuration - missing/invalid authorize endpoint: {authzEndpoint}");
|
20 | 39 | config = null;
|
21 | 40 | return false;
|
22 | 41 | }
|
23 | 42 |
|
24 |
| - if (!settings.TryGetSetting( |
| 43 | + if (settings.TryGetSetting( |
25 | 44 | Constants.EnvironmentVariables.OAuthTokenEndpoint,
|
26 | 45 | Constants.GitConfiguration.Credential.SectionName,
|
27 | 46 | Constants.GitConfiguration.Credential.OAuthTokenEndpoint,
|
28 |
| - out string tokenEndpoint) || |
29 |
| - !Uri.TryCreate(remoteUri, tokenEndpoint, out Uri tokenEndpointUri)) |
| 47 | + out string tokenEndpoint)) |
| 48 | + { |
| 49 | + Uri.TryCreate(remoteUri, tokenEndpoint, out tokenEndpointUri); |
| 50 | + } |
| 51 | + |
| 52 | + if (tokenEndpointUri == null) |
30 | 53 | {
|
31 | 54 | trace.WriteLine($"Invalid OAuth configuration - missing/invalid token endpoint: {tokenEndpoint}");
|
32 | 55 | config = null;
|
@@ -74,12 +97,12 @@ public static bool TryGet(ITrace trace, ISettings settings, Uri remoteUri, out G
|
74 | 97 | Constants.EnvironmentVariables.OAuthRedirectUri,
|
75 | 98 | Constants.GitConfiguration.Credential.SectionName,
|
76 | 99 | Constants.GitConfiguration.Credential.OAuthRedirectUri,
|
77 |
| - out string redirectUrl) && |
78 |
| - Uri.TryCreate(redirectUrl, UriKind.Absolute, out Uri redirectUri)) |
| 100 | + out string redirectUrl) && Uri.TryCreate(redirectUrl, UriKind.Absolute, out Uri redirectUri)) |
79 | 101 | {
|
80 | 102 | config.RedirectUri = redirectUri;
|
81 | 103 | }
|
82 |
| - else |
| 104 | + |
| 105 | + if (config.RedirectUri == null) |
83 | 106 | {
|
84 | 107 | trace.WriteLine($"Invalid OAuth configuration - missing/invalid redirect URI: {redirectUrl}");
|
85 | 108 | config = null;
|
|
0 commit comments