/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.embedded.ssh.api;
import java.util.SortedMap;
import de.rcenvironment.core.configuration.ConfigurationException;
/**
* Provides methods for querying and editing SSH/RemoteAccess accounts. Currently used by the text mode configuration UI.
*
* Note that these operations NOT yet safe for concurrent operation (e.g. for calling from the standard UI)!
*
* @author Robert Mischke
*/
public interface SshAccountConfigurationService {
/**
* Checks preconditions for safe/consistent configuration editing; for example, the "Remote Access" role must either not exist at all,
* or be configured as expected.
*
* @return null on success, or a human-readable error message on failure
*/
String verifyExpectedStateForConfigurationEditing();
/**
* @return the current map of all SSH accounts, with account ids as map keys
* @throws ConfigurationException on internal configuration errors
*/
SortedMap<String, SshAccount> getAllAccountsByLoginName() throws ConfigurationException;
/**
* @param accountId the requeusted account id
* @return the given account's representation, or null if no such account exists
*/
SshAccount getAccount(String accountId);
/**
* Adds a new SSH account to the active RCE configuration.
*
* @param loginName the new login name
* @param plainTextPassword the new password (will be hashed before saving)
* @throws ConfigurationException if the account creation failed
*/
void createAccount(String loginName, String plainTextPassword) throws ConfigurationException;
/**
* Updates the password for an existing account.
*
* @param loginName the new login name
* @param plainTextPassword the new password (will be hashed before saving)
* @throws ConfigurationException if the operation failed
*/
void updatePasswordHash(String loginName, String plainTextPassword) throws ConfigurationException;
/**
* Updates the role for an existing account.
*
* @param loginName the new login name
* @param role the new role to set
* @throws ConfigurationException if the operation failed
*/
void updateRole(String loginName, String role) throws ConfigurationException;
/**
* Enabled or disables the given account.
*
* @param loginName the account's login name
* @param enabled true to enable, false to disable
* @throws ConfigurationException if the operation failed
* */
void setAccountEnabled(String loginName, boolean enabled) throws ConfigurationException;
/**
* Deletes the given account.
*
* @param loginName the account's login name
* @throws ConfigurationException if the operation failed
*/
void deleteAccount(String loginName) throws ConfigurationException;
/**
* Returns the hash of a password string.
*
* @param password the password
* @return the hash
*/
String generatePasswordHash(String password);
}