/*******************************************************************************
* Copyright (c) 2016 Red Hat.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat - Initial Contribution
*******************************************************************************/
package org.eclipse.linuxtools.internal.docker.core;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.equinox.security.storage.ISecurePreferences;
import org.eclipse.equinox.security.storage.SecurePreferencesFactory;
import org.eclipse.equinox.security.storage.StorageException;
import org.eclipse.linuxtools.docker.core.Activator;
import org.eclipse.linuxtools.docker.core.IRegistryAccount;
public class RegistryAccountStorageManager {
public List<IRegistryAccount> getAccounts() {
final List<IRegistryAccount> accounts = new ArrayList<>();
final ISecurePreferences preferences = SecurePreferencesFactory
.getDefault();
final ISecurePreferences dockerNode = preferences
.node("org.eclipse.linuxtools.docker.ui.accounts"); //$NON-NLS-1$
for (String key : dockerNode.keys()) {
final String[] tokens = key.split(","); //$NON-NLS-1$
if (tokens.length > 1) {
final String serverAddress = tokens[0];
final String username = tokens[1];
final String email = tokens.length > 2 ? tokens[2] : ""; //$NON-NLS-1$
final RegistryAccountInfo account = new RegistryAccountInfo(
serverAddress, username, email, null, false);
accounts.add(account);
}
}
return accounts;
}
public IRegistryAccount getAccount(String serverAddress, String username) {
return getAccounts().stream()
.filter(a -> a.getServerAddress().equals(serverAddress)
&& a.getUsername().equals(username))
.findFirst().orElse(null);
}
public void add(IRegistryAccount info) {
final ISecurePreferences preferences = getDockerNode();
final char[] password = info.getPassword();
final String key = getKeyFor(info);
try {
preferences.put(key,
(password != null ? new String(password) : null), true);
} catch (StorageException e) {
Activator.logErrorMessage(
"Failed to store Docker registry password", e);
}
}
public void remove(final IRegistryAccount info) {
final ISecurePreferences preferences = getDockerNode();
final String key = getKeyFor(info);
preferences.remove(key);
}
private ISecurePreferences getDockerNode() {
final ISecurePreferences preferences = SecurePreferencesFactory
.getDefault();
final ISecurePreferences dockerNode = preferences
.node("org.eclipse.linuxtools.docker.ui.accounts"); //$NON-NLS-1$
return dockerNode;
}
private String getKeyFor(final IRegistryAccount info) {
return info.getServerAddress() + "," + info.getUsername() + "," + info.getEmail(); //$NON-NLS-1$ //$NON-NLS-2$
}
}