@@ -21,7 +21,7 @@ public class RawCredentials
21
21
[ JsonSerializable ( typeof ( RawCredentials ) ) ]
22
22
public partial class RawCredentialsJsonContext : JsonSerializerContext ;
23
23
24
- public interface ICredentialManager
24
+ public interface ICredentialManager : ICoderApiClientCredentialProvider
25
25
{
26
26
public event EventHandler < CredentialModel > CredentialsChanged ;
27
27
@@ -59,7 +59,8 @@ public interface ICredentialBackend
59
59
/// </summary>
60
60
public class CredentialManager : ICredentialManager
61
61
{
62
- private const string CredentialsTargetName = "Coder.Desktop.App.Credentials" ;
62
+ private readonly ICredentialBackend Backend ;
63
+ private readonly ICoderApiClientFactory CoderApiClientFactory ;
63
64
64
65
// _opLock is held for the full duration of SetCredentials, and partially
65
66
// during LoadCredentials. _opLock protects _inFlightLoad, _loadCts, and
@@ -79,14 +80,6 @@ public class CredentialManager : ICredentialManager
79
80
// immediate).
80
81
private volatile CredentialModel ? _latestCredentials ;
81
82
82
- private ICredentialBackend Backend { get ; } = new WindowsCredentialBackend ( CredentialsTargetName ) ;
83
-
84
- private ICoderApiClientFactory CoderApiClientFactory { get ; } = new CoderApiClientFactory ( ) ;
85
-
86
- public CredentialManager ( )
87
- {
88
- }
89
-
90
83
public CredentialManager ( ICredentialBackend backend , ICoderApiClientFactory coderApiClientFactory )
91
84
{
92
85
Backend = backend ;
@@ -108,6 +101,20 @@ public CredentialModel GetCachedCredentials()
108
101
} ;
109
102
}
110
103
104
+ // Implements ICoderApiClientCredentialProvider
105
+ public CoderApiClientCredential ? GetCoderApiClientCredential ( )
106
+ {
107
+ var latestCreds = _latestCredentials ;
108
+ if ( latestCreds is not { State : CredentialState . Valid } )
109
+ return null ;
110
+
111
+ return new CoderApiClientCredential
112
+ {
113
+ CoderUrl = latestCreds . CoderUrl ,
114
+ ApiToken = latestCreds . ApiToken ?? "" ,
115
+ } ;
116
+ }
117
+
111
118
public async Task < string ? > GetSignInUri ( )
112
119
{
113
120
try
@@ -253,6 +260,12 @@ private async Task<CredentialModel> PopulateModel(RawCredentials? credentials, C
253
260
State = CredentialState . Invalid ,
254
261
} ;
255
262
263
+ if ( ! Uri . TryCreate ( credentials . CoderUrl , UriKind . Absolute , out var uri ) )
264
+ return new CredentialModel
265
+ {
266
+ State = CredentialState . Invalid ,
267
+ } ;
268
+
256
269
BuildInfo buildInfo ;
257
270
User me ;
258
271
try
@@ -279,7 +292,7 @@ private async Task<CredentialModel> PopulateModel(RawCredentials? credentials, C
279
292
return new CredentialModel
280
293
{
281
294
State = CredentialState . Valid ,
282
- CoderUrl = credentials . CoderUrl ,
295
+ CoderUrl = uri ,
283
296
ApiToken = credentials . ApiToken ,
284
297
Username = me . Username ,
285
298
} ;
@@ -298,6 +311,8 @@ private void UpdateState(CredentialModel newModel)
298
311
299
312
public class WindowsCredentialBackend : ICredentialBackend
300
313
{
314
+ public const string CoderCredentialsTargetName = "Coder.Desktop.App.Credentials" ;
315
+
301
316
private readonly string _credentialsTargetName ;
302
317
303
318
public WindowsCredentialBackend ( string credentialsTargetName )
0 commit comments