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 public class PlexusInteractivityCredentialsProvider extends CredentialsProvider {
34 private boolean interactive;
35 private final Prompter prompter;
36
37 public PlexusInteractivityCredentialsProvider(Prompter prompter) {
38 this.interactive = true;
39 this.prompter = prompter;
40 }
41
42 @Override
43 public boolean get(URIish uri, CredentialItem... items) {
44 for (CredentialItem item : items) {
45 try {
46 get(uri, item);
47 } catch (PrompterException e) {
48 throw new IllegalStateException("Cannot prompt user", e);
49 }
50 }
51 return true;
52 }
53
54 private void get(URIish uri, CredentialItem item) throws PrompterException {
55 if (item instanceof CredentialItem.InformationalMessage) {
56
57 prompter.showMessage(item.getPromptText());
58 } else {
59 if (!interactive) {
60 throw new UnsupportedCredentialItem(
61 uri, "Cannot provide '" + item.getClass() + "' in non-interactive mode");
62 }
63 if (item instanceof CredentialItem.YesNoType) {
64 CredentialItem.YesNoType yesNoItem = (CredentialItem.YesNoType) item;
65 String value = prompter.prompt(item.getPromptText(), Arrays.asList("yes", "no"));
66 yesNoItem.setValue(value.equals("yes"));
67 } else if (item instanceof CredentialItem.Password) {
68 CredentialItem.Password passwordItem = (CredentialItem.Password) item;
69 String password = prompter.promptForPassword(passwordItem.getPromptText());
70 passwordItem.setValue(password.toCharArray());
71 } else if (item instanceof CredentialItem.Username) {
72 CredentialItem.Username usernameItem = (CredentialItem.Username) item;
73 String username = prompter.prompt(usernameItem.getPromptText());
74 usernameItem.setValue(username);
75 } else if (item instanceof CredentialItem.StringType) {
76 CredentialItem.StringType stringItem = (CredentialItem.StringType) item;
77 String value = prompter.prompt(stringItem.getPromptText());
78 stringItem.setValue(value);
79 } else if (item instanceof CredentialItem.CharArrayType) {
80 CredentialItem.CharArrayType charArrayItem = (CredentialItem.CharArrayType) item;
81 String value = prompter.prompt(charArrayItem.getPromptText());
82 charArrayItem.setValue(value.toCharArray());
83 } else {
84 throw new UnsupportedCredentialItem(
85 uri, "This provider does not support items of type '" + item.getClass() + "'");
86 }
87 }
88 }
89
90 public void setInteractive(boolean interactive) {
91 this.interactive = interactive;
92 }
93
94 @Override
95 public boolean isInteractive() {
96 return interactive;
97 }
98
99 @Override
100 public boolean supports(CredentialItem... items) {
101 return true;
102 }
103 }