Skip to content

Commit d5ad55c

Browse files
committed
Add OAuth Client ID input by user to descriptors for lookup in keychain.
1 parent 510c9c1 commit d5ad55c

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

core/src/main/java/ch/cyberduck/core/DefaultHostPasswordStore.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import org.apache.logging.log4j.Logger;
2525

2626
import java.net.URI;
27+
import java.util.HashSet;
28+
import java.util.Set;
2729

2830
public abstract class DefaultHostPasswordStore implements HostPasswordStore {
2931
private static final Logger log = LogManager.getLogger(DefaultHostPasswordStore.class);
@@ -132,8 +134,7 @@ public String findPrivateKeyPassphrase(final Host bookmark) {
132134
@Override
133135
public OAuthTokens findOAuthTokens(final Host bookmark) {
134136
log.info("Fetching OAuth tokens from keychain for {}", bookmark);
135-
final String[] descriptors = getOAuthPrefix(bookmark);
136-
for(String prefix : descriptors) {
137+
for(String prefix : getOAuthPrefix(bookmark)) {
137138
log.debug("Search with prefix {}", prefix);
138139
final String hostname = getOAuthHostname(bookmark);
139140
log.debug("Search with hostname {}", hostname);
@@ -185,17 +186,27 @@ protected static int getOAuthPort(final Host bookmark) {
185186
return getOAuthScheme(bookmark).getPort();
186187
}
187188

188-
protected static String[] getOAuthPrefix(final Host bookmark) {
189+
protected static Set<String> getOAuthPrefix(final Host bookmark) {
190+
final Set<String> prefix = new HashSet<>();
189191
if(StringUtils.isNotBlank(bookmark.getCredentials().getUsername())) {
190-
return new String[]{
191-
String.format("%s (%s)", bookmark.getProtocol().getOAuthClientId(), bookmark.getCredentials().getUsername()),
192-
String.format("%s (%s)", bookmark.getProtocol().getDescription(), bookmark.getCredentials().getUsername())
193-
};
192+
if(StringUtils.isNotBlank(bookmark.getProtocol().getOAuthClientId())) {
193+
prefix.add(String.format("%s (%s)", bookmark.getProtocol().getOAuthClientId(), bookmark.getCredentials().getUsername()));
194+
}
195+
if(StringUtils.isNotBlank(bookmark.getProperty(Profile.OAUTH_CLIENT_ID_KEY))) {
196+
prefix.add(String.format("%s (%s)", bookmark.getProperty(Profile.OAUTH_CLIENT_ID_KEY), bookmark.getCredentials().getUsername()));
197+
}
198+
prefix.add(String.format("%s (%s)", bookmark.getProtocol().getDescription(), bookmark.getCredentials().getUsername()));
199+
}
200+
else {
201+
if(StringUtils.isNotBlank(bookmark.getProtocol().getOAuthClientId())) {
202+
prefix.add(bookmark.getProtocol().getOAuthClientId());
203+
}
204+
if(StringUtils.isNotBlank(bookmark.getProperty(Profile.OAUTH_CLIENT_ID_KEY))) {
205+
prefix.add(bookmark.getProperty(Profile.OAUTH_CLIENT_ID_KEY));
206+
}
207+
prefix.add(bookmark.getProtocol().getDescription());
194208
}
195-
return new String[]{
196-
bookmark.getProtocol().getOAuthClientId(),
197-
bookmark.getProtocol().getDescription()
198-
};
209+
return prefix;
199210
}
200211

201212
@Override
@@ -227,8 +238,7 @@ public void save(final Host bookmark) throws LocalAccessDeniedException {
227238
credentials.getToken());
228239
}
229240
if(credentials.isOAuthAuthentication()) {
230-
final String[] descriptors = getOAuthPrefix(bookmark);
231-
for(String prefix : descriptors) {
241+
for(String prefix : getOAuthPrefix(bookmark)) {
232242
if(StringUtils.isNotBlank(credentials.getOauth().getAccessToken())) {
233243
this.addPassword(getOAuthScheme(bookmark),
234244
getOAuthPort(bookmark), getOAuthHostname(bookmark),
@@ -273,8 +283,7 @@ public void delete(final Host bookmark) throws LocalAccessDeniedException {
273283
protocol.getTokenPlaceholder() : String.format("%s (%s)", protocol.getTokenPlaceholder(), credentials.getUsername()));
274284
}
275285
if(protocol.isOAuthConfigurable()) {
276-
final String[] descriptors = getOAuthPrefix(bookmark);
277-
for(String prefix : descriptors) {
286+
for(String prefix : getOAuthPrefix(bookmark)) {
278287
if(StringUtils.isNotBlank(credentials.getOauth().getAccessToken())) {
279288
this.deletePassword(getOAuthScheme(bookmark), getOAuthPort(bookmark), getOAuthHostname(bookmark),
280289
String.format("%s OAuth2 Access Token", prefix));

0 commit comments

Comments
 (0)