public InitOperationResult init(InitOperationOptions options, UserInteractionListener listener) throws Exception { return new InitOperation(options, listener).execute(); }
logger.log(Level.INFO, "--------------------------------------------"); transferManager = createTransferManagerFromNullConfig(options.getConfigTO()); if (!performRepoTest()) { logger.log(Level.INFO, "- Connecting to the repo failed, repo already exists or cannot be created: " + result.getResultCode()); return result; masterKeyPassword = getOrAskPassword(); File appDir = createAppDirs(options.getLocalDir()); // TODO [medium] create temp dir first, ask password cannot be done after File configFile = new File(appDir, Config.FILE_CONFIG); File repoFile = new File(appDir, Config.FILE_REPO); saveLocalConfig(configFile, repoFile, masterFile, masterKeyPassword); makeRemoteChanges(configFile, masterFile, repoFile); addToDaemonIfEnabled(); createDefaultIgnoreFile(); GenlinkOperationResult genlinkOperationResult = generateLink(options.getConfigTO());
private void makeRemoteChanges(File configFile, File masterFile, File repoFile) throws Exception { initRemoteRepository(configFile); try { if (options.isEncryptionEnabled()) { uploadMasterFile(masterFile, transferManager); } uploadRepoFile(repoFile, transferManager); } catch (StorageException | IOException e) { cleanLocalRepository(e); } }
private void cleanLocalRepository(Exception e) throws Exception { try { deleteAppDirs(options.getLocalDir()); } catch (Exception e1) { throw new StorageException("Couldn't upload to remote repo. Cleanup failed. There may be local directories left"); } throw new StorageException("Couldn't upload to remote repo. Cleaned local repository.", e); }
private void initRemoteRepository(File configFile) throws Exception { try { // Create 'syncany' and 'master' file, and all the remote folders transferManager.init(options.isCreateTarget()); // Some plugins change the transfer settings, re-save options.getConfigTO().save(configFile); } catch (StorageException e) { // Storing remotely failed. Remove all the directories and files we just created cleanLocalRepository(e); } }
private void saveLocalConfig(File configFile, File repoFile, File masterFile, String masterKeyPassword) throws Exception { if (options.isEncryptionEnabled()) { SaltedSecretKey masterKey = createMasterKeyFromPassword(masterKeyPassword); // This takes looong! options.getConfigTO().setMasterKey(masterKey); new MasterTO(masterKey.getSalt()).save(masterFile); options.getRepoTO().save(repoFile, options.getCipherSpecs(), masterKey); } else { options.getRepoTO().save(repoFile); } options.getConfigTO().save(configFile); }
@Override public int execute(String[] operationArgs) throws Exception { boolean retryNeeded = true; boolean performOperation = true; operationOptions = parseOptions(operationArgs); while (retryNeeded && performOperation) { InitOperationResult operationResult = new InitOperation(operationOptions, this).execute(); printResults(operationResult); retryNeeded = operationResult.getResultCode() != InitResultCode.OK; if (retryNeeded) { performOperation = isInteractive && askRetryConnection(); if (performOperation) { updateTransferSettings(operationOptions.getConfigTO().getTransferSettings()); } } } return 0; }
@Override public void run() { try { InitOperation initOperation = new InitOperation(concreteRequest.getOptions(), new EventUserInteractionListener()); InitOperationResult operationResult = initOperation.execute(); switch (operationResult.getResultCode()) { case OK: eventBus.post(new InitManagementResponse(InitManagementResponse.OK, operationResult, request.getId())); break; case NOK_TEST_FAILED: eventBus.post(new InitManagementResponse(InitManagementResponse.NOK_FAILED_TEST, operationResult, request.getId())); break; default: eventBus.post(new InitManagementResponse(InitManagementResponse.NOK_FAILED_UNKNOWN, operationResult, request.getId())); break; } } catch (Exception e) { logger.log(Level.WARNING, "Error adding watch to daemon config.", e); eventBus.post(new InitManagementResponse(InitManagementResponse.NOK_OPERATION_FAILED, new InitOperationResult(), request.getId())); } } }, "IntRq/" + concreteRequest.getOptions().getLocalDir().getName());