Search in sources :

Example 1 with PortTO

use of org.syncany.config.to.PortTO in project syncany by syncany.

the class DaemonOperation method loadOrCreateConfig.

// Config related functions. Used on starting and reloading.
private void loadOrCreateConfig() {
    try {
        File daemonConfigFile = new File(UserConfig.getUserConfigDir(), UserConfig.DAEMON_FILE);
        File daemonConfigFileExample = new File(UserConfig.getUserConfigDir(), UserConfig.DAEMON_EXAMPLE_FILE);
        if (daemonConfigFile.exists()) {
            logger.log(Level.INFO, "Loading daemon config file from " + daemonConfigFile + " ...");
            daemonConfig = DaemonConfigTO.load(daemonConfigFile);
        } else {
            logger.log(Level.INFO, "Daemon config file does not exist.");
            logger.log(Level.INFO, "- Writing example config file to " + daemonConfigFileExample + " ...");
            DaemonConfigHelper.createAndWriteExampleDaemonConfig(daemonConfigFileExample);
            logger.log(Level.INFO, "- Creating at  " + daemonConfigFile + " ...");
            daemonConfig = DaemonConfigHelper.createAndWriteDefaultDaemonConfig(daemonConfigFile);
        }
        // Add user and password for access from the CLI
        if (daemonConfig.getPortTO() == null && portTO == null) {
            // Access info has not been created yet, generate new user-password pair
            String accessToken = CipherUtil.createRandomAlphabeticString(20);
            UserTO cliUser = new UserTO();
            cliUser.setUsername(UserConfig.USER_CLI);
            cliUser.setPassword(accessToken);
            portTO = new PortTO();
            portTO.setPort(daemonConfig.getWebServer().getBindPort());
            portTO.setUser(cliUser);
            daemonConfig.setPortTO(portTO);
        } else if (daemonConfig.getPortTO() == null) {
            // Access info is not included in the daemon config, but exists. Happens when reloading.
            // We reload the information about the port, but keep the access token the same.
            portTO.setPort(daemonConfig.getWebServer().getBindPort());
            daemonConfig.setPortTO(portTO);
        }
    } catch (Exception e) {
        logger.log(Level.WARNING, "Cannot (re-)load config. Exception thrown.", e);
    }
}
Also used : UserTO(org.syncany.config.to.UserTO) PortTO(org.syncany.config.to.PortTO) File(java.io.File) IOException(java.io.IOException) ConfigException(org.syncany.config.ConfigException)

Example 2 with PortTO

use of org.syncany.config.to.PortTO in project syncany by syncany.

the class CommandLineClient method sendToRest.

private int sendToRest(Command command, String commandName, String[] commandArgs, File portFile) {
    try {
        // Read port config (for daemon) from port file
        PortTO portConfig = readPortConfig(portFile);
        // Create authentication details
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(new AuthScope(SERVER_HOSTNAME, portConfig.getPort()), new UsernamePasswordCredentials(portConfig.getUser().getUsername(), portConfig.getUser().getPassword()));
        // Allow all hostnames in CN; this is okay as long as hostname is localhost/127.0.0.1!
        // See: https://github.com/syncany/syncany/pull/196#issuecomment-52197017
        X509HostnameVerifier hostnameVerifier = new AllowAllHostnameVerifier();
        // Fetch the SSL context (using the user key/trust store)
        SSLContext sslContext = UserConfig.createUserSSLContext();
        // Create client with authentication details
        CloseableHttpClient client = HttpClients.custom().setSslcontext(sslContext).setHostnameVerifier(hostnameVerifier).setDefaultCredentialsProvider(credentialsProvider).build();
        // Build and send request, print response
        Request request = buildFolderRequestFromCommand(command, commandName, commandArgs, config.getLocalDir().getAbsolutePath());
        String serverUri = SERVER_SCHEMA + SERVER_HOSTNAME + ":" + portConfig.getPort() + SERVER_REST_API;
        String xmlMessageString = XmlMessageFactory.toXml(request);
        StringEntity xmlMessageEntity = new StringEntity(xmlMessageString);
        HttpPost httpPost = new HttpPost(serverUri);
        httpPost.setEntity(xmlMessageEntity);
        logger.log(Level.INFO, "Sending HTTP Request to: " + serverUri);
        logger.log(Level.FINE, httpPost.toString());
        logger.log(Level.FINE, xmlMessageString);
        HttpResponse httpResponse = client.execute(httpPost);
        int exitCode = handleRestResponse(command, httpResponse);
        return exitCode;
    } catch (Exception e) {
        logger.log(Level.SEVERE, "Command " + command.toString() + " FAILED. ", e);
        return showErrorAndExit(e.getMessage());
    }
}
Also used : CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) HttpPost(org.apache.http.client.methods.HttpPost) BasicCredentialsProvider(org.apache.http.impl.client.BasicCredentialsProvider) AllowAllHostnameVerifier(org.apache.http.conn.ssl.AllowAllHostnameVerifier) Request(org.syncany.operations.daemon.messages.api.Request) FolderRequest(org.syncany.operations.daemon.messages.api.FolderRequest) PortTO(org.syncany.config.to.PortTO) HttpResponse(org.apache.http.HttpResponse) BasicCredentialsProvider(org.apache.http.impl.client.BasicCredentialsProvider) CredentialsProvider(org.apache.http.client.CredentialsProvider) SSLContext(javax.net.ssl.SSLContext) ConfigException(org.syncany.config.ConfigException) IOException(java.io.IOException) UsernamePasswordCredentials(org.apache.http.auth.UsernamePasswordCredentials) StringEntity(org.apache.http.entity.StringEntity) X509HostnameVerifier(org.apache.http.conn.ssl.X509HostnameVerifier) AuthScope(org.apache.http.auth.AuthScope)

Example 3 with PortTO

use of org.syncany.config.to.PortTO in project syncany by syncany.

the class TestDaemonUtil method createPortTO.

public static PortTO createPortTO(int port) {
    String accessToken = CipherUtil.createRandomAlphabeticString(20);
    UserTO cliUser = new UserTO();
    cliUser.setUsername("CLI");
    cliUser.setPassword(accessToken);
    PortTO portTO = new PortTO();
    portTO.setPort(port);
    portTO.setUser(cliUser);
    return portTO;
}
Also used : UserTO(org.syncany.config.to.UserTO) PortTO(org.syncany.config.to.PortTO)

Aggregations

PortTO (org.syncany.config.to.PortTO)3 IOException (java.io.IOException)2 ConfigException (org.syncany.config.ConfigException)2 UserTO (org.syncany.config.to.UserTO)2 File (java.io.File)1 SSLContext (javax.net.ssl.SSLContext)1 HttpResponse (org.apache.http.HttpResponse)1 AuthScope (org.apache.http.auth.AuthScope)1 UsernamePasswordCredentials (org.apache.http.auth.UsernamePasswordCredentials)1 CredentialsProvider (org.apache.http.client.CredentialsProvider)1 HttpPost (org.apache.http.client.methods.HttpPost)1 AllowAllHostnameVerifier (org.apache.http.conn.ssl.AllowAllHostnameVerifier)1 X509HostnameVerifier (org.apache.http.conn.ssl.X509HostnameVerifier)1 StringEntity (org.apache.http.entity.StringEntity)1 BasicCredentialsProvider (org.apache.http.impl.client.BasicCredentialsProvider)1 CloseableHttpClient (org.apache.http.impl.client.CloseableHttpClient)1 FolderRequest (org.syncany.operations.daemon.messages.api.FolderRequest)1 Request (org.syncany.operations.daemon.messages.api.Request)1