@Override public boolean get(final URIish uri, final CredentialItem... items) throws UnsupportedCredentialItem { if (items.length == 0) { return true; } CredentialItem.Username userItem = null; CredentialItem.Password passwordItem = null; boolean isSpecial = false; for (CredentialItem item : items) { if (item instanceof CredentialItem.Username) userItem = (CredentialItem.Username) item; else if (item instanceof CredentialItem.Password) passwordItem = (CredentialItem.Password) item; else isSpecial = true; } if (!isSpecial && (userItem != null || passwordItem != null)) { UserPasswordCredentials credentials = null; if ((user != null) && (password != null)) credentials = new UserPasswordCredentials(user, password); else credentials = SecureStoreUtils.getCredentialsQuietly(uri); if (credentials == null) { credentials = getCredentialsFromUser(uri); if (credentials == null) return false; } if (userItem != null) userItem.setValue(credentials.getUser()); if (passwordItem != null) passwordItem.setValue(credentials.getPassword().toCharArray()); return true; } // special handling for non-user,non-password type items final boolean[] result = new boolean[1]; PlatformUI.getWorkbench() .getDisplay() .syncExec( new Runnable() { @Override public void run() { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); if (items.length == 1) { CredentialItem item = items[0]; result[0] = getSingleSpecial(shell, uri, item); } else { result[0] = getMultiSpecial(shell, uri, items); } } }); return result[0]; }
@Override public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem { for (CredentialItem item : items) { if (item instanceof CredentialItem.Username) { if ((this.privateKey == null || this.privateKey.length == 0) && (this.publicKey == null || this.publicKey.length == 0) && (this.passphrase == null || this.passphrase.length == 0)) { CredentialItem.Username u = new CredentialItem.Username(); CredentialItem.Password p = new CredentialItem.Password(); super.get(uri, u, p); if ((u.getValue() == null || u.getValue().length() == 0) && (p.getValue() == null || p.getValue().length == 0)) { if (uri != null) { if (this.remoteUser != null) { /* see if a GitHub token is available (obviously only applicable for repos hosted at a GitHub) */ String uriString = uri.toString(); String token = null; for (int i = 0; token == null && i < GithubTokenProviders.size(); i++) { token = GithubTokenProviders.get(i).getToken(uriString, remoteUser); } if (token != null) { ((CredentialItem.Username) item).setValue(token); continue; } } } } } } if (super.supports(item)) { super.get(uri, item); } else if (item instanceof CredentialItem.StringType) { if (item.getPromptText().toLowerCase(Locale.ENGLISH).contains("passphrase") && passphrase != null && passphrase.length > 0) { ((CredentialItem.StringType) item).setValue(new String(passphrase)); } else { ((CredentialItem.StringType) item).setValue(""); } } else if (item instanceof CredentialItem.CharArrayType) { ((CredentialItem.CharArrayType) item).setValue(new char[0]); } else { throw new UnsupportedCredentialItem(uri, item.getPromptText()); } } return true; // we assume that user provided all credentials that are needed }