package com.constellio.app.api.cmis.accept;
import static com.constellio.data.conf.HashingEncoding.BASE64;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import org.apache.chemistry.opencmis.client.api.Session;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.constellio.app.api.cmis.accept.CmisAcceptanceTestSetup.Records;
import com.constellio.data.dao.managers.config.ConfigManager;
import com.constellio.data.utils.hashing.HashingService;
import com.constellio.data.utils.hashing.HashingServiceException;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.security.authentification.AuthenticationService;
import com.constellio.model.services.taxonomies.TaxonomiesManager;
import com.constellio.model.services.taxonomies.TaxonomiesSearchServices;
import com.constellio.model.services.users.UserServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.DriverTest;
import com.constellio.sdk.tests.setups.Users;
@DriverTest
public class OldCmisAuthenticationAcceptanceTest extends ConstellioTest {
private static final Logger LOGGER = LoggerFactory.getLogger(OldCmisAuthenticationAcceptanceTest.class);
String anotherCollection = "anotherCollection";
CmisAcceptanceTestSetup anotherCollectionSchemas = new CmisAcceptanceTestSetup(anotherCollection);
String thirdCollection = "thirdCollection";
UserServices userServices;
TaxonomiesManager taxonomiesManager;
MetadataSchemasManager metadataSchemasManager;
RecordServices recordServices;
Users users = new Users();
CmisAcceptanceTestSetup zeCollectionSchemas = new CmisAcceptanceTestSetup(zeCollection);
Records zeCollectionRecords;
Records anotherCollectionRecords;
TaxonomiesSearchServices taxonomiesSearchServices;
Session cmisSessionChuck;
Session cmisSessionBob;
AuthenticationService authenticationService;
ConfigManager configManager;
HashingService hashingService;
@Before
public void setUp()
throws Exception {
authenticationService = getModelLayerFactory().newAuthenticationService();
configManager = getDataLayerFactory().getConfigManager();
hashingService = getIOLayerFactory().newHashingService(BASE64);
userServices = getModelLayerFactory().newUserServices();
taxonomiesManager = getModelLayerFactory().getTaxonomiesManager();
metadataSchemasManager = getModelLayerFactory().getMetadataSchemasManager();
recordServices = getModelLayerFactory().newRecordServices();
taxonomiesSearchServices = getModelLayerFactory().newTaxonomiesSearchService();
users.setUp(userServices);
defineSchemasManager().using(zeCollectionSchemas);
defineSchemasManager().using(anotherCollectionSchemas);
CmisAcceptanceTestSetup.allSchemaTypesSupported(getAppLayerFactory());
taxonomiesManager.addTaxonomy(zeCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
taxonomiesManager.addTaxonomy(zeCollectionSchemas.getTaxonomy2(), metadataSchemasManager);
taxonomiesManager.setPrincipalTaxonomy(zeCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
taxonomiesManager.addTaxonomy(anotherCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
taxonomiesManager.setPrincipalTaxonomy(anotherCollectionSchemas.getTaxonomy1(), metadataSchemasManager);
zeCollectionRecords = zeCollectionSchemas.givenRecords(recordServices);
anotherCollectionRecords = anotherCollectionSchemas.givenRecords(recordServices);
givenChuckAndBobPasswordsProperties();
userServices.addUserToCollection(users.bob(), zeCollection);
userServices.addUserToCollection(users.chuckNorris(), zeCollection);
userServices.addUserToCollection(users.chuckNorris(), anotherCollection);
CmisAcceptanceTestSetup.giveUseCMISPermissionToUsers(getModelLayerFactory());
}
//
// @Test
// public void givenMultipleCollectionsWithMultipleTaxonomies()
// throws Exception {
//
// assertThat(authenticationService.authenticate(chuckNorris, "1qaz2wsx")).isTrue();
// assertThat(authenticationService.authenticate(chuckNorris, "soleil")).isFalse();
//
// runSubTest(new thenChuckAndBobCanConnectInZeCollection());
// givenWrongPasswordThenChuckCannotConnectInZeCollection();
// thenChuckCanConnectInAnotherCollection();
// thenBobCannotConnectInAnotherCollection();
// thenChuckCannotConnectInInexistentCollection();
// whenCreateNewCollectionThenUsersCanConnectInIt();
// }
//
// @Test
// public void givenWriteDeletePermissionsToChuckInCollectionAndReadPermissionToBobWhenChuckLoginAsBobThenCanConnect()
// throws Exception {
//
// recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionWriteAccess(true).getWrappedRecord());
// recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionDeleteAccess(true).getWrappedRecord());
// Session cmisSessionChuckAsBob = newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx")
// .logedAs(bobGratton).onCollection(zeCollection).build();
//
// assertThat(cmisSessionChuckAsBob.getRootFolder().getProperty("cmis:path").getValue()).isEqualTo("/");
// }
//
// @Test
// public void givenWriteDeletePermissionsToChuckInCollectionAndReadPermissionToBoboWhenBobLoginAsChuckThenCannotConnect()
// throws Exception {
//
// recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionWriteAccess(true).getWrappedRecord());
// recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionDeleteAccess(true).getWrappedRecord());
// try {
// newCmisSessionBuilder().authenticatedBy(bobGratton, "1qaz2wsx").logedAs(chuckNorris).onCollection(zeCollection)
// .build();
// fail();
// } catch (Exception e) {
// assertThat(true);
// }
// }
//
// @Test
// public void givenWritePermissionsToChuckInCollectionAndReadPermissionToBobWhenChuckLoginAsBobThenCannotConnect()
// throws Exception {
//
// recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionWriteAccess(true).getWrappedRecord());
// try {
// newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx").logedAs(bobGratton).onCollection(zeCollection)
// .build();
// fail();
// } catch (Exception e) {
// assertThat(true);
// }
// }
//
// @Test
// public void givenDeletePermissionsToChuckInCollectionAndReadPermissionToBobWhenChuckLoginAsBobThenCannotConnect()
// throws Exception {
//
// recordServices.update(users.chuckNorrisIn(zeCollection).setCollectionDeleteAccess(true).getWrappedRecord());
// try {
// newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx").logedAs(bobGratton).onCollection(zeCollection)
// .build();
// fail();
// } catch (Exception e) {
// assertThat(true);
// }
// }
//
// @Test
// public void givenWriteDeletePermissionsToChuckInAnotherCollectionAndNoPermissionToBobWhenChuckLoginAsBobThenCannotConnect()
// throws Exception {
//
// recordServices.update(users.chuckNorrisIn(anotherCollection).setCollectionWriteAccess(true).getWrappedRecord());
// recordServices.update(users.chuckNorrisIn(anotherCollection).setCollectionDeleteAccess(true).getWrappedRecord());
// try {
// newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx").logedAs(bobGratton).onCollection(
// anotherCollection)
// .build();
// fail();
// } catch (Exception e) {
// assertThat(true);
// }
// }
//
// @Test
// public void givenNewCollectionAndAddChuckInCollectionWhenAuthenticateThenChuckCanConnectInIt()
// throws Exception {
// whenCreateNewCollectionThenUsersCanConnectInIt();
// }
private void givenWrongPasswordThenChuckCannotConnectInZeCollection() {
try {
Session cmisSessionChuck = newCmisSessionBuilder().authenticatedBy(chuckNorris, "wrongPassword")
.onCollection(anotherCollection).build();
cmisSessionChuck.getRootFolder().getProperty("cmis:path").getValue();
fail();
} catch (Exception e) {
assertThat(true);
}
}
private void thenChuckCanConnectInAnotherCollection() {
cmisSessionChuck = newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx").onCollection(anotherCollection)
.build();
assertThat(cmisSessionChuck.getRootFolder().getProperty("cmis:path").getValue()).isEqualTo("/");
}
private void thenBobCannotConnectInAnotherCollection() {
try {
cmisSessionBob = newCmisSessionBuilder().authenticatedBy(bobGratton, "xsw21qaz").onCollection(anotherCollection)
.build();
cmisSessionBob.getRootFolder().getProperty("cmis:path").getValue();
fail();
} catch (Exception e) {
assertThat(true);
}
}
private void thenChuckCannotConnectInInexistentCollection() {
try {
cmisSessionChuck = newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx").onCollection(
"inexistentCollection")
.build();
cmisSessionChuck.getRootFolder().getProperty("cmis:path").getValue();
fail();
} catch (Exception e) {
assertThat(true);
}
}
private void whenCreateNewCollectionThenUsersCanConnectInIt() {
givenCollection(thirdCollection);
userServices.addUserToCollection(users.chuckNorris(), thirdCollection);
Session cmisSessionChuckThirdCollection = newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx")
.onCollection(thirdCollection).build();
assertThat(cmisSessionChuckThirdCollection.getRootFolder().getProperty("cmis:path").getValue()).isEqualTo("/");
}
// --- ---
private void givenChuckAndBobPasswordsProperties()
throws HashingServiceException {
authenticationService.changePassword(chuckNorris, "1qaz2wsx");
authenticationService.changePassword(bobGratton, "xsw21qaz");
}
public class thenChuckAndBobCanConnectInZeCollection extends SubTest {
@Override
public void run() {
cmisSessionChuck = newCmisSessionBuilder().authenticatedBy(chuckNorris, "1qaz2wsx").onCollection(zeCollection)
.build();
assertThat(cmisSessionChuck.getRootFolder().getProperty("cmis:path").getValue()).isEqualTo("/");
cmisSessionBob = newCmisSessionBuilder().authenticatedBy(bobGratton, "xsw21qaz").onCollection(zeCollection)
.build();
assertThat(cmisSessionBob.getRootFolder().getProperty("cmis:path").getValue()).isEqualTo("/");
}
}
}