1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider.git.jgit.command;
20
21 import java.util.Arrays;
22
23 import org.codehaus.plexus.components.interactivity.Prompter;
24 import org.codehaus.plexus.components.interactivity.PrompterException;
25 import org.eclipse.jgit.errors.UnsupportedCredentialItem;
26 import org.eclipse.jgit.transport.CredentialItem;
27 import org.eclipse.jgit.transport.CredentialsProvider;
28 import org.eclipse.jgit.transport.URIish;
29
30
31
32
33
34 public class PlexusInteractivityCredentialsProvider extends CredentialsProvider {
35 private boolean interactive;
36 private final Prompter prompter;
37
38 public PlexusInteractivityCredentialsProvider(Prompter prompter) {
39 this.interactive = true;
40 this.prompter = prompter;
41 }
42
43 @Override
44 public boolean get(URIish uri, CredentialItem... items) {
45 for (CredentialItem item : items) {
46 try {
47 get(uri, item);
48 } catch (PrompterException e) {
49 throw new IllegalStateException("Cannot prompt user", e);
50 }
51 }
52 return true;
53 }
54
55 private void get(URIish uri, CredentialItem item) throws PrompterException {
56 if (item instanceof CredentialItem.InformationalMessage) {
57
58 prompter.showMessage(item.getPromptText());
59 } else {
60 if (!interactive) {
61 throw new UnsupportedCredentialItem(
62 uri, "Cannot provide '" + item.getClass() + "' in non-interactive mode");
63 }
64 if (item instanceof CredentialItem.YesNoType) {
65 CredentialItem.YesNoType yesNoItem = (CredentialItem.YesNoType) item;
66 String value = prompter.prompt(item.getPromptText(), Arrays.asList("yes", "no"));
67 yesNoItem.setValue(value.equals("yes"));
68 } else if (item instanceof CredentialItem.Password) {
69 CredentialItem.Password passwordItem = (CredentialItem.Password) item;
70 String password = prompter.promptForPassword(passwordItem.getPromptText());
71 passwordItem.setValue(password.toCharArray());
72 } else if (item instanceof CredentialItem.Username) {
73 CredentialItem.Username usernameItem = (CredentialItem.Username) item;
74 String username = prompter.prompt(usernameItem.getPromptText());
75 usernameItem.setValue(username);
76 } else if (item instanceof CredentialItem.StringType) {
77 CredentialItem.StringType stringItem = (CredentialItem.StringType) item;
78 String value = prompter.prompt(stringItem.getPromptText());
79 stringItem.setValue(value);
80 } else if (item instanceof CredentialItem.CharArrayType) {
81 CredentialItem.CharArrayType charArrayItem = (CredentialItem.CharArrayType) item;
82 String value = prompter.prompt(charArrayItem.getPromptText());
83 charArrayItem.setValue(value.toCharArray());
84 } else {
85 throw new UnsupportedCredentialItem(
86 uri, "This provider does not support items of type '" + item.getClass() + "'");
87 }
88 }
89 }
90
91 public void setInteractive(boolean interactive) {
92 this.interactive = interactive;
93 }
94
95 @Override
96 public boolean isInteractive() {
97 return interactive;
98 }
99
100 @Override
101 public boolean supports(CredentialItem... items) {
102 return true;
103 }
104 }