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); }
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 GenlinkOperationResult generateLink(ConfigTO configTO) throws Exception { return new GenlinkOperation(options.getConfigTO(), options.getGenlinkOptions()).execute(); }
@Override public InitOperationOptions parseOptions(String[] operationArguments) throws Exception { InitOperationOptions operationOptions = new InitOperationOptions(); operationOptions.setPassword(password); RepoTO repoTO = repoTOFactory.createRepoTO(); operationOptions.setLocalDir(localDir); operationOptions.setConfigTO(configTO); operationOptions.setRepoTO(repoTO); operationOptions.setCreateTarget(createTargetPath); operationOptions.setEncryptionEnabled(encryptionEnabled); operationOptions.setCipherSpecs(cipherSpecs); operationOptions.setDaemon(options.has(optionAddDaemon)); operationOptions.setGenlinkOptions(genlinkOptions);
public static InitOperationOptions createTestInitOperationOptions(String machineName) throws Exception { File tempLocalDir = TestFileUtil.createTempDirectoryInSystemTemp(createUniqueName("client-" + machineName, machineName)); File tempRepoDir = TestFileUtil.createTempDirectoryInSystemTemp(createUniqueName("repo", machineName)); tempLocalDir.mkdirs(); tempRepoDir.mkdirs(); RepoTO repoTO = createRepoTO(); // Create config TO ConfigTO configTO = new ConfigTO(); configTO.setMachineName(machineName + Math.abs(new Random().nextInt())); // Get Masterkey SaltedSecretKey masterKey = getMasterKey(); configTO.setMasterKey(masterKey); // Generic connection settings wont work anymore, because they are plugin dependent now. LocalTransferSettings transferSettings = Plugins.get("local", TransferPlugin.class).createEmptySettings(); transferSettings.setPath(tempRepoDir); configTO.setTransferSettings(transferSettings); InitOperationOptions operationOptions = new InitOperationOptions(); operationOptions.setLocalDir(tempLocalDir); operationOptions.setConfigTO(configTO); operationOptions.setRepoTO(repoTO); operationOptions.setEncryptionEnabled(cryptoEnabled); operationOptions.setCipherSpecs(CipherSpecs.getDefaultCipherSpecs()); operationOptions.setPassword(cryptoEnabled ? "some password" : null); return operationOptions; }
logger.log(Level.INFO, "--------------------------------------------"); transferManager = createTransferManagerFromNullConfig(options.getConfigTO()); if (options.isEncryptionEnabled()) { 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); GenlinkOperationResult genlinkOperationResult = generateLink(options.getConfigTO());
public static InitOperationOptions createTestUnreliableInitOperationOptions(String machineName, List<String> failingOperationPatterns) throws Exception { InitOperationOptions initOperationOptions = createTestInitOperationOptions(machineName); // createTestInitOperationOptions always returns LocalTransferSettings File tempRpoDir = ((LocalTransferSettings) initOperationOptions.getConfigTO().getTransferSettings()).getPath(); UnreliableLocalTransferSettings transferSettings = Plugins.get("unreliable_local", TransferPlugin.class).createEmptySettings(); transferSettings.setPath(tempRpoDir); transferSettings.setFailingOperationPatterns(failingOperationPatterns); initOperationOptions.getConfigTO().setTransferSettings(transferSettings); return initOperationOptions; }
private boolean performRepoTest() { boolean testCreateTarget = options.isCreateTarget(); StorageTestResult testResult = transferManager.test(testCreateTarget); logger.log(Level.INFO, "Storage test result ist " + testResult); if (testResult.isTargetExists() && testResult.isTargetCanWrite() && !testResult.isRepoFileExists()) { logger.log(Level.INFO, "--> OKAY: Target exists and is writable, but repo doesn't exist. We're good to go!"); return true; } else if (testCreateTarget && !testResult.isTargetExists() && testResult.isTargetCanCreate()) { logger.log(Level.INFO, "--> OKAY: Target does not exist, but can be created. We're good to go!"); return true; } else { logger.log(Level.INFO, "--> NOT OKAY: Invalid target/repo state. Operation cannot be continued."); result.setResultCode(InitResultCode.NOK_TEST_FAILED); result.setTestResult(testResult); return false; } }
@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; }
if (!operationOptions.isCreateTarget()) { out.println("ERROR: Repository cannot be initialized, because the target does not exist and"); out.println(" the --create-target/-t option has not been enabled. Either create the target");