use of org.syncany.config.to.ConfigTO in project syncany by syncany.
the class AbstractInitCommand method createConfigTO.
protected ConfigTO createConfigTO(TransferSettings transferSettings) throws Exception {
ConfigTO configTO = new ConfigTO();
configTO.setDisplayName(getDefaultDisplayName());
configTO.setMachineName(getRandomMachineName());
configTO.setMasterKey(null);
// can be null
configTO.setTransferSettings(transferSettings);
return configTO;
}
use of org.syncany.config.to.ConfigTO in project syncany by syncany.
the class ConnectOperation method execute.
@Override
public ConnectOperationResult execute() throws Exception {
logger.log(Level.INFO, "");
logger.log(Level.INFO, "Running 'Connect'");
logger.log(Level.INFO, "--------------------------------------------");
// Decrypt and init configTO
ConfigTO configTO = null;
try {
configTO = createConfigTO();
} catch (CipherException e) {
logger.log(Level.FINE, "Could not create config", e);
return new ConnectOperationResult(ConnectResultCode.NOK_DECRYPT_ERROR);
}
// Init plugin and transfer manager
transferManager = createTransferManagerFromNullConfig(options.getConfigTO());
// Test the repo
if (!performRepoTest(transferManager)) {
logger.log(Level.INFO, "- Connecting to the repo failed, repo already exists or cannot be created: " + result.getResultCode());
return result;
}
logger.log(Level.INFO, "- Connecting to the repo was successful; now downloading repo file ...");
// Create local .syncany directory
File tmpRepoFile = downloadFile(transferManager, new SyncanyRemoteFile());
if (CipherUtil.isEncrypted(tmpRepoFile)) {
logger.log(Level.INFO, "- Repo is ENCRYPTED. Decryption necessary.");
if (configTO.getMasterKey() == null) {
logger.log(Level.INFO, "- No master key present; Asking for password ...");
boolean retryPassword = true;
while (retryPassword) {
SaltedSecretKey possibleMasterKey = askPasswordAndCreateMasterKey();
logger.log(Level.INFO, "- Master key created. Now verifying by decrypting repo file...");
if (decryptAndVerifyRepoFile(tmpRepoFile, possibleMasterKey)) {
logger.log(Level.INFO, "- SUCCESS: Repo file decrypted successfully.");
configTO.setMasterKey(possibleMasterKey);
retryPassword = false;
} else {
logger.log(Level.INFO, "- FAILURE: Repo file decryption failed. Asking for retry.");
retryPassword = askRetryPassword();
if (!retryPassword) {
logger.log(Level.INFO, "- No retry possible/desired. Returning NOK_DECRYPT_ERROR.");
return new ConnectOperationResult(ConnectResultCode.NOK_DECRYPT_ERROR);
}
}
}
} else {
logger.log(Level.INFO, "- Master key present; Now verifying by decrypting repo file...");
if (!decryptAndVerifyRepoFile(tmpRepoFile, configTO.getMasterKey())) {
logger.log(Level.INFO, "- FAILURE: Repo file decryption failed. Returning NOK_DECRYPT_ERROR.");
return new ConnectOperationResult(ConnectResultCode.NOK_DECRYPT_ERROR);
}
}
} else {
String repoFileStr = FileUtils.readFileToString(tmpRepoFile);
verifyRepoFile(repoFileStr);
}
// Success, now do the work!
File appDir = createAppDirs(options.getLocalDir());
// Write file 'config.xml'
File configFile = new File(appDir, Config.FILE_CONFIG);
configTO.save(configFile);
// Write file 'syncany'
File repoFile = new File(appDir, Config.FILE_REPO);
FileUtils.copyFile(tmpRepoFile, repoFile);
tmpRepoFile.delete();
// Write file 'master'
if (configTO.getMasterKey() != null) {
File masterFile = new File(appDir, Config.FILE_MASTER);
new MasterTO(configTO.getMasterKey().getSalt()).save(masterFile);
}
// Shutdown plugin
transferManager.disconnect();
// Add to daemon (if requested)
if (options.isDaemon()) {
try {
boolean addedToDaemonConfig = DaemonConfigHelper.addFolder(options.getLocalDir());
result.setAddedToDaemon(addedToDaemonConfig);
} catch (Exception e) {
logger.log(Level.WARNING, "Cannot add folder to daemon config.", e);
result.setAddedToDaemon(false);
}
}
result.setResultCode(ConnectResultCode.OK);
return result;
}
use of org.syncany.config.to.ConfigTO in project syncany by syncany.
the class ConnectOperationTest method testConnectOperationSuccess.
@Test
public void testConnectOperationSuccess() throws Exception {
// A.init()
InitOperationOptions initOperationOptionsA = TestConfigUtil.createTestInitOperationOptions("A");
InitOperation initOperationA = new InitOperation(initOperationOptionsA, null);
InitOperationResult initOperationResultA = initOperationA.execute();
String connectLinkA = initOperationResultA.getGenLinkResult().getShareLink();
assertNotNull(connectLinkA);
// B.connect()
File localDirB = TestFileUtil.createTempDirectoryInSystemTemp(TestConfigUtil.createUniqueName("clientB", initOperationOptionsA));
File localConnectDirB = new File(localDirB, Config.DIR_APPLICATION);
ConfigTO connectionConfigToB = initOperationOptionsA.getConfigTO();
connectionConfigToB.setMachineName("clientB" + Math.abs(new Random().nextInt()));
connectionConfigToB.setMasterKey(null);
ConnectOperationOptions connectOperationOptionsB = new ConnectOperationOptions();
connectOperationOptionsB.setStrategy(ConnectOptionsStrategy.CONNECTION_TO);
connectOperationOptionsB.setConfigTO(connectionConfigToB);
connectOperationOptionsB.setPassword(initOperationOptionsA.getPassword());
connectOperationOptionsB.setLocalDir(localDirB);
ConnectOperation connectOperationB = new ConnectOperation(connectOperationOptionsB, null);
ConnectOperationResult connectOperationResultB = connectOperationB.execute();
assertEquals(ConnectResultCode.OK, connectOperationResultB.getResultCode());
assertTrue(new File(localConnectDirB, Config.DIR_DATABASE).exists());
assertTrue(new File(localConnectDirB, Config.DIR_CACHE).exists());
assertTrue(new File(localConnectDirB, Config.FILE_CONFIG).exists());
assertTrue(new File(localConnectDirB, Config.DIR_LOG).exists());
assertTrue(new File(localConnectDirB, Config.FILE_REPO).exists());
assertEquals(new File(localConnectDirB, Config.FILE_MASTER).exists(), TestConfigUtil.getCrypto());
File repoDir = ((LocalTransferSettings) initOperationOptionsA.getConfigTO().getTransferSettings()).getPath();
// Tear down
TestFileUtil.deleteDirectory(repoDir);
TestFileUtil.deleteDirectory(localConnectDirB);
TestFileUtil.deleteDirectory(initOperationOptionsA.getLocalDir());
TestFileUtil.deleteDirectory(connectOperationOptionsB.getLocalDir());
}
use of org.syncany.config.to.ConfigTO in project syncany by syncany.
the class ConnectOperationTest method testConnectOperationWithLink.
@Test
public void testConnectOperationWithLink() throws Exception {
// A.init()
InitOperationOptions initOperationOptionsA = TestConfigUtil.createTestInitOperationOptions("A");
InitOperation initOperationA = new InitOperation(initOperationOptionsA, null);
InitOperationResult initOperationResultA = initOperationA.execute();
String connectLinkA = initOperationResultA.getGenLinkResult().getShareLink();
assertNotNull(connectLinkA);
// B.connect()
File localDirB = TestFileUtil.createTempDirectoryInSystemTemp(TestConfigUtil.createUniqueName("clientB", initOperationOptionsA));
File localConnectDirB = new File(localDirB, Config.DIR_APPLICATION);
ConfigTO connectionConfigToB = initOperationOptionsA.getConfigTO();
connectionConfigToB.setMachineName("clientB" + Math.abs(new Random().nextInt()));
connectionConfigToB.setMasterKey(null);
ConnectOperationOptions connectOperationOptionsB = new ConnectOperationOptions();
connectOperationOptionsB.setStrategy(ConnectOptionsStrategy.CONNECTION_LINK);
connectOperationOptionsB.setConnectLink(connectLinkA);
connectOperationOptionsB.setConfigTO(connectionConfigToB);
connectOperationOptionsB.setPassword(initOperationOptionsA.getPassword());
connectOperationOptionsB.setLocalDir(localDirB);
ConnectOperation connectOperationB = new ConnectOperation(connectOperationOptionsB, null);
ConnectOperationResult connectOperationResultB = connectOperationB.execute();
assertEquals(ConnectResultCode.OK, connectOperationResultB.getResultCode());
assertTrue(new File(localConnectDirB, Config.DIR_DATABASE).exists());
assertTrue(new File(localConnectDirB, Config.DIR_CACHE).exists());
assertTrue(new File(localConnectDirB, Config.FILE_CONFIG).exists());
assertTrue(new File(localConnectDirB, Config.DIR_LOG).exists());
assertTrue(new File(localConnectDirB, Config.FILE_REPO).exists());
assertEquals(new File(localConnectDirB, Config.FILE_MASTER).exists(), TestConfigUtil.getCrypto());
File repoDir = ((LocalTransferSettings) initOperationOptionsA.getConfigTO().getTransferSettings()).getPath();
// Tear down
TestFileUtil.deleteDirectory(repoDir);
TestFileUtil.deleteDirectory(localConnectDirB);
TestFileUtil.deleteDirectory(initOperationOptionsA.getLocalDir());
TestFileUtil.deleteDirectory(connectOperationOptionsB.getLocalDir());
}
use of org.syncany.config.to.ConfigTO in project syncany by syncany.
the class TransferSettingsTest method testRestore.
@Test
public void testRestore() throws Exception {
final String fooTest = "foo-test";
final String bazTest = "baz";
final int numberTest = 1234;
final DummyTransferSettings ts = new DummyTransferSettings();
final LocalTransferSettings lts = new LocalTransferSettings();
final InitOperationOptions initOperationOptions = TestConfigUtil.createTestInitOperationOptions("syncanytest");
final ConfigTO conf = initOperationOptions.getConfigTO();
File repoDir = ((LocalTransferSettings) initOperationOptions.getConfigTO().getTransferSettings()).getPath();
File localDir = initOperationOptions.getLocalDir();
conf.setTransferSettings(ts);
ts.foo = fooTest;
ts.baz = bazTest;
ts.number = numberTest;
lts.setPath(File.createTempFile("aaa", "bbb"));
ts.subsettings = lts;
assertTrue(ts.isValid());
Serializer serializer = new Persister();
serializer.write(conf, tmpFile);
System.out.println(new String(Files.readAllBytes(Paths.get(tmpFile.toURI()))));
ConfigTO confRestored = ConfigTO.load(tmpFile);
TransferPlugin plugin = Plugins.get(confRestored.getTransferSettings().getType(), TransferPlugin.class);
assertNotNull(plugin);
TransferSettings tsRestored = confRestored.getTransferSettings();
assertNotNull(tsRestored);
DummyTransferManager transferManager = plugin.createTransferManager(tsRestored, config);
assertNotNull(transferManager);
// Tear down
FileUtils.deleteDirectory(localDir);
FileUtils.deleteDirectory(repoDir);
}
Aggregations