blob: 9e96c30f7afbd14abe7672a7c53360c910769df8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.core.util;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.commons.repositories.core.auth.ICredentialsStore;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
import org.eclipse.mylyn.tasks.core.TaskRepository;
/**
* Extends {@link KeyringMigrator} to migrate TaskRepository credentials, including usernames which are stored in the
* repository properties.
*
* @author Sam Davis
*/
public class TaskRepositoryKeyringMigrator extends KeyringMigrator<TaskRepository> {
private static final String KEY_USERNAME = "org.eclipse.mylyn.tasklist.repositories.username"; //$NON-NLS-1$
protected static URL defaultUrl;
static {
try {
defaultUrl = new URL("http://eclipse.org/mylyn"); //$NON-NLS-1$
} catch (MalformedURLException e) {
StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, e.getMessage(), e));
}
}
public TaskRepositoryKeyringMigrator(String authRealm, String authScheme) {
super(authRealm, authScheme);
}
@Override
public void migrateCredentials(Collection<TaskRepository> locations) {
StatusHandler.log(new Status(IStatus.INFO, ITasksCoreConstants.ID_PLUGIN,
"Migrating task repository credentials from keyring.")); //$NON-NLS-1$
super.migrateCredentials(locations);
}
@Override
protected void migrateCredentials(TaskRepository location) {
super.migrateCredentials(location);
// clear the cachedUserName in case it was set before the migration ran
AuthenticationCredentials credentials = location.getCredentials(AuthenticationType.REPOSITORY);
if (credentials != null) {
location.setCredentials(AuthenticationType.REPOSITORY, credentials,
location.getSavePassword(AuthenticationType.REPOSITORY));
}
}
@Override
protected Map<String, String> getAuthorizationInfo(String url) throws MalformedURLException {
try {
return super.getAuthorizationInfo(url);
} catch (MalformedURLException e) {
return getAuthorizationInfo(defaultUrl, url, authScheme);
}
}
@Override
protected String getUrl(TaskRepository location) {
return location.getRepositoryUrl();
}
@Override
protected void putKeyValue(TaskRepository location, String key, String value, ICredentialsStore store) {
if (KEY_USERNAME.equals(key)) {
location.setProperty(key, value);
} else {
super.putKeyValue(location, key, value, store);
}
}
}