-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Expand file tree
/
Copy pathCredentialsCommand.cs
More file actions
78 lines (65 loc) · 2.63 KB
/
CredentialsCommand.cs
File metadata and controls
78 lines (65 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.CommandLine;
using System.CommandLine.Invocation;
using System.Threading;
using System.Threading.Tasks;
using Atlassian.Bitbucket.UI.ViewModels;
using GitCredentialManager;
using GitCredentialManager.UI;
namespace Atlassian.Bitbucket.UI.Commands
{
public abstract class CredentialsCommand : HelperCommand
{
protected CredentialsCommand(ICommandContext context)
: base(context, "prompt", "Show authentication prompt.")
{
var url = new Option<Uri>("--url", "Bitbucket Server or Data Center URL");
AddOption(url);
var userName = new Option<string>("--username", "Username or email.");
AddOption(userName);
var oauth = new Option<bool>("--show-oauth", "Show OAuth option.");
AddOption(oauth);
var basic = new Option<bool>("--show-basic", "Show username/password option.");
AddOption(basic);
this.SetHandler(ExecuteAsync, url, userName, oauth, basic);
}
private async Task<int> ExecuteAsync(Uri url, string userName, bool showOAuth, bool showBasic)
{
var viewModel = new CredentialsViewModel(Context.SessionManager)
{
Url = url,
UserName = userName,
ShowOAuth = showOAuth,
ShowBasic = showBasic
};
await ShowAsync(viewModel, CancellationToken.None);
if (!viewModel.WindowResult || viewModel.SelectedMode == AuthenticationModes.None)
{
throw new Trace2Exception(Context.Trace2, "User cancelled dialog.");
}
switch (viewModel.SelectedMode)
{
case AuthenticationModes.OAuth:
WriteResult(new Dictionary<string, string>
{
["mode"] = "oauth"
});
break;
case AuthenticationModes.Basic:
WriteResult(new Dictionary<string, string>
{
["mode"] = "basic",
["username"] = viewModel.UserName,
["password"] = viewModel.Password,
});
break;
default:
throw new ArgumentOutOfRangeException(nameof(AuthenticationModes),
"Unknown authentication mode", viewModel.SelectedMode.ToString());
}
return 0;
}
protected abstract Task ShowAsync(CredentialsViewModel viewModel, CancellationToken ct);
}
}