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