/** * Write the storages to the configuration. * * @param array $storages map of storage id to storage config */ public function writeConfig($storages) { // let the horror begin $mountPoints = []; foreach ($storages as $storageConfig) { $mountPoint = $storageConfig->getMountPoint(); $oldBackendOptions = $storageConfig->getBackendOptions(); $storageConfig->setBackendOptions(\OC_Mount_Config::encryptPasswords($oldBackendOptions)); // system mount $rootMountPoint = '/$user/files/' . ltrim($mountPoint, '/'); $applicableUsers = $storageConfig->getApplicableUsers(); $applicableGroups = $storageConfig->getApplicableGroups(); foreach ($applicableUsers as $applicable) { $this->addMountPoint($mountPoints, \OC_Mount_Config::MOUNT_TYPE_USER, $applicable, $rootMountPoint, $storageConfig); } foreach ($applicableGroups as $applicable) { $this->addMountPoint($mountPoints, \OC_Mount_Config::MOUNT_TYPE_GROUP, $applicable, $rootMountPoint, $storageConfig); } // if neither "applicableGroups" or "applicableUsers" were set, use "all" user if (empty($applicableUsers) && empty($applicableGroups)) { $this->addMountPoint($mountPoints, \OC_Mount_Config::MOUNT_TYPE_USER, 'all', $rootMountPoint, $storageConfig); } // restore old backend options where the password was not encrypted, // because we don't want to change the state of the original object $storageConfig->setBackendOptions($oldBackendOptions); } \OC_Mount_Config::writeData(null, $mountPoints); }
/** * Write the storages to the user's configuration. * * @param array $storages map of storage id to storage config */ public function writeConfig($storages) { $user = $this->userSession->getUser()->getUID(); // let the horror begin $mountPoints = []; foreach ($storages as $storageConfig) { $mountPoint = $storageConfig->getMountPoint(); $oldBackendOptions = $storageConfig->getBackendOptions(); $storageConfig->setBackendOptions(\OC_Mount_Config::encryptPasswords($oldBackendOptions)); $rootMountPoint = '/' . $user . '/files/' . ltrim($mountPoint, '/'); $this->addMountPoint($mountPoints, \OC_Mount_Config::MOUNT_TYPE_USER, $user, $rootMountPoint, $storageConfig); // restore old backend options where the password was not encrypted, // because we don't want to change the state of the original object $storageConfig->setBackendOptions($oldBackendOptions); } \OC_Mount_Config::writeData($user, $mountPoints); }
/** * Test reading in a legacy config and generating config ids. */ public function testReadLegacyConfigAndGenerateConfigId() { $configFile = $this->dataDir . '/' . $this->userId . '/mount.json'; $legacyBackendOptions = ['user' => 'someuser', 'password' => 'somepassword']; $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions); $legacyConfig = ['backend' => 'identifier:\\OCA\\Files_External\\Lib\\Backend\\SMB', 'authMechanism' => 'identifier:\\Auth\\Mechanism', 'options' => $legacyBackendOptions, 'mountOptions' => ['preview' => false]]; // different mount options $legacyConfig2 = ['backend' => 'identifier:\\OCA\\Files_External\\Lib\\Backend\\SMB', 'authMechanism' => 'identifier:\\Auth\\Mechanism', 'options' => $legacyBackendOptions, 'mountOptions' => ['preview' => true]]; $json = ['user' => []]; $json['user'][$this->userId] = ['/$user/files/somemount' => $legacyConfig, '/$user/files/anothermount' => $legacyConfig2]; file_put_contents($configFile, json_encode($json)); $allStorages = $this->service->getAllStorages(); $this->assertCount(2, $allStorages); $storage1 = $allStorages[1]; $storage2 = $allStorages[2]; $this->assertEquals('/somemount', $storage1->getMountPoint()); $this->assertEquals('someuser', $storage1->getBackendOptions()['user']); $this->assertEquals('somepassword', $storage1->getBackendOptions()['password']); $this->assertEquals(['preview' => false], $storage1->getMountOptions()); $this->assertEquals('/anothermount', $storage2->getMountPoint()); $this->assertEquals('someuser', $storage2->getBackendOptions()['user']); $this->assertEquals('somepassword', $storage2->getBackendOptions()['password']); $this->assertEquals(['preview' => true], $storage2->getMountOptions()); }
/** * Test reading in a legacy config and generating config ids. */ public function testReadLegacyConfigAndGenerateConfigId() { $configFile = $this->dataDir . '/mount.json'; $legacyBackendOptions = ['user' => 'someuser', 'password' => 'somepassword']; $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions); $legacyConfig = ['backend' => 'identifier:\\OCA\\Files_External\\Lib\\Backend\\SMB', 'authMechanism' => 'identifier:\\Auth\\Mechanism', 'options' => $legacyBackendOptions, 'mountOptions' => ['preview' => false]]; // different mount options $legacyConfig2 = ['backend' => 'identifier:\\OCA\\Files_External\\Lib\\Backend\\SMB', 'authMechanism' => 'identifier:\\Auth\\Mechanism', 'options' => $legacyBackendOptions, 'mountOptions' => ['preview' => true]]; $legacyBackendOptions2 = $legacyBackendOptions; $legacyBackendOptions2 = ['user' => 'someuser2', 'password' => 'somepassword2']; $legacyBackendOptions2 = \OC_Mount_Config::encryptPasswords($legacyBackendOptions2); // different config $legacyConfig3 = ['backend' => 'identifier:\\OCA\\Files_External\\Lib\\Backend\\SMB', 'authMechanism' => 'identifier:\\Auth\\Mechanism', 'options' => $legacyBackendOptions2, 'mountOptions' => ['preview' => true]]; $json = ['user' => ['user1' => ['/$user/files/somemount' => $legacyConfig], 'user2' => ['/$user/files/somemount' => $legacyConfig], 'user3' => ['/$user/files/somemount' => $legacyConfig2], 'user4' => ['/$user/files/anothermount' => $legacyConfig], 'user5' => ['/$user/files/somemount' => $legacyConfig3]], 'group' => ['group1' => ['/$user/files/somemount' => $legacyConfig]]]; file_put_contents($configFile, json_encode($json)); $allStorages = $this->service->getAllStorages(); $this->assertCount(4, $allStorages); $storage1 = $allStorages[1]; $storage2 = $allStorages[2]; $storage3 = $allStorages[3]; $storage4 = $allStorages[4]; $this->assertEquals('/somemount', $storage1->getMountPoint()); $this->assertEquals('someuser', $storage1->getBackendOptions()['user']); $this->assertEquals('somepassword', $storage1->getBackendOptions()['password']); $this->assertEquals(['user1', 'user2'], $storage1->getApplicableUsers()); $this->assertEquals(['group1'], $storage1->getApplicableGroups()); $this->assertEquals(['preview' => false], $storage1->getMountOptions()); $this->assertEquals('/somemount', $storage2->getMountPoint()); $this->assertEquals('someuser', $storage2->getBackendOptions()['user']); $this->assertEquals('somepassword', $storage2->getBackendOptions()['password']); $this->assertEquals(['user3'], $storage2->getApplicableUsers()); $this->assertEquals([], $storage2->getApplicableGroups()); $this->assertEquals(['preview' => true], $storage2->getMountOptions()); $this->assertEquals('/anothermount', $storage3->getMountPoint()); $this->assertEquals('someuser', $storage3->getBackendOptions()['user']); $this->assertEquals('somepassword', $storage3->getBackendOptions()['password']); $this->assertEquals(['user4'], $storage3->getApplicableUsers()); $this->assertEquals([], $storage3->getApplicableGroups()); $this->assertEquals(['preview' => false], $storage3->getMountOptions()); $this->assertEquals('/somemount', $storage4->getMountPoint()); $this->assertEquals('someuser2', $storage4->getBackendOptions()['user']); $this->assertEquals('somepassword2', $storage4->getBackendOptions()['password']); $this->assertEquals(['user5'], $storage4->getApplicableUsers()); $this->assertEquals([], $storage4->getApplicableGroups()); $this->assertEquals(['preview' => true], $storage4->getMountOptions()); }
public function testVariableSubstitution() { $legacyBackendOptions = ['user' => 'someuser', 'password' => 'somepassword', 'replacethis' => '$user']; $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions); $legacyConfig = ['class' => '\\OC\\Files\\Storage\\SMB', 'options' => $legacyBackendOptions, 'mountOptions' => ['preview' => false, 'int' => 1]]; // different mount options $legacyConfig2 = ['class' => '\\OC\\Files\\Storage\\SMB', 'options' => $legacyBackendOptions, 'mountOptions' => ['preview' => true, 'string' => 'abc']]; $json = ['user' => [self::TEST_USER1 => ['/$user/files/somemount' => $legacyConfig, '/$user/files/anothermount' => $legacyConfig2]]]; $this->writeGlobalConfig($json); // re-read config, password was read correctly $config = OC_Mount_Config::getAbsoluteMountPoints(self::TEST_USER1); $config1 = $config['/' . self::TEST_USER1 . '/files/somemount']; $config2 = $config['/' . self::TEST_USER1 . '/files/anothermount']; $this->assertSame(self::TEST_USER1, $config1['options']['replacethis']); $this->assertSame(self::TEST_USER1, $config1['options']['replacethis']); $this->assertSame(1, $config1['mountOptions']['int']); $this->assertSame(true, $config2['mountOptions']['preview']); $this->assertSame('abc', $config2['mountOptions']['string']); }