package com.constellio.app.modules.es.connectors.smb.security;
import com.constellio.app.modules.es.connectors.smb.config.SmbRetrievalConfiguration;
import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO;
import com.constellio.app.modules.es.connectors.smb.service.SmbShareService;
import com.constellio.app.modules.es.connectors.smb.service.SmbShareServiceSimpleImpl;
import com.constellio.app.modules.es.connectors.smb.utils.ConnectorSmbUtils;
import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
import com.constellio.sdk.SDKPasswords;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.InDevelopmentTest;
import com.constellio.sdk.tests.annotations.SlowTest;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
public class WindowsPermissionsRealTest extends ConstellioTest {
private TrusteeManager trusteeManager;
private String share;
private String domain;
private String username;
private String password;
private String filename;
private String folder;
private SmbShareService smbService;
private Credentials credentials;
private SmbRetrievalConfiguration smbRetrievalConfiguration;
private ESSchemasRecordsServices es;
private ConsoleConnectorLogger logger;
private ConnectorSmbUtils smbUtils;
@Before
public void setup() {
share = SDKPasswords.testSmbServer() + "sharePermissions/";
domain = SDKPasswords.testSmbDomain();
username = SDKPasswords.testSmbUsername();
password = SDKPasswords.testSmbPassword();
credentials = new Credentials(domain, username, password);
givenCollection(zeCollection);
es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory());
logger = new ConsoleConnectorLogger();
filename = "file.txt";
smbUtils = new ConnectorSmbUtils();
// Using SysInternal psGetSid
// All have at least Read
// System S-1-5-18
// Administrator S-1-5-21-3489979699-349065827-2066094650-500
// Administrators S-1-5-32-544
// Patrick S-1-5-21-3489979699-349065827-2066094650-1200
}
@Test
@InDevelopmentTest
@SlowTest
public void givenAllowAndShareAllowOnlyWhenGettingSecurityTokensThenGetExpectedSecurityTokens() {
String smbUrl = share + "fileWithAllowsAndNoDenies.txt";
smbRetrievalConfiguration = new SmbRetrievalConfiguration(Arrays.asList(smbUrl), Arrays.asList(smbUrl), new ArrayList(), false);
smbService = new SmbShareServiceSimpleImpl(credentials, smbRetrievalConfiguration, smbUtils, logger, es);
SmbFileDTO fileDTO = smbService.getSmbFileDTO(smbUrl);
assertThat(fileDTO.getAllowTokens()).containsOnly("r,ad,S-1-5-18", "r,ad,S-1-5-21-3489979699-349065827-2066094650-500", "r,ad,S-1-5-32-544");
assertThat(fileDTO.getDenyTokens()).isNull();
assertThat(fileDTO.getAllowShareTokens()).containsOnly("r,ad,S-1-1-0", "r,ad,S-1-5-32-544");
assertThat(fileDTO.getDenyShareTokens()).isNull();
}
@Test
@InDevelopmentTest
@SlowTest
public void givenDenyWhenGettingSecurityTokensThenGetExpectedSecurityTokens() {
String smbUrl = share + "fileWithDeny.txt";
smbRetrievalConfiguration = new SmbRetrievalConfiguration(Arrays.asList(smbUrl), Arrays.asList(smbUrl), new ArrayList(), false);
smbService = new SmbShareServiceSimpleImpl(credentials, smbRetrievalConfiguration, smbUtils, logger, es);
SmbFileDTO fileDTO = smbService.getSmbFileDTO(smbUrl);
assertThat(fileDTO.getAllowTokens()).containsOnly("r,ad,S-1-5-18", "r,ad,S-1-5-21-3489979699-349065827-2066094650-500", "r,ad,S-1-5-32-544");
assertThat(fileDTO.getDenyTokens()).containsOnly("r,ad,S-1-5-21-3489979699-349065827-2066094650-1200");
assertThat(fileDTO.getAllowShareTokens()).containsOnly("r,ad,S-1-1-0", "r,ad,S-1-5-32-544");
assertThat(fileDTO.getDenyShareTokens()).isNull();
}
@Test
@InDevelopmentTest
@SlowTest
public void givenExplicitUserWhenGettingSecurityTokensThenGetExpectedSecurityTokens() {
String smbUrl = share + "fileWithExplicitUser.txt";
smbRetrievalConfiguration = new SmbRetrievalConfiguration(Arrays.asList(smbUrl), Arrays.asList(smbUrl), new ArrayList(), false);
smbService = new SmbShareServiceSimpleImpl(credentials, smbRetrievalConfiguration, smbUtils, logger, es);
SmbFileDTO fileDTO = smbService.getSmbFileDTO(smbUrl);
assertThat(fileDTO.getAllowTokens()).containsOnly("r,ad,S-1-5-18", "r,ad,S-1-5-21-3489979699-349065827-2066094650-500", "r,ad,S-1-5-32-544",
"r,ad,S-1-5-21-3489979699-349065827-2066094650-1200");
assertThat(fileDTO.getDenyTokens()).isNull();
assertThat(fileDTO.getAllowShareTokens()).containsOnly("r,ad,S-1-1-0", "r,ad,S-1-5-32-544");
assertThat(fileDTO.getDenyShareTokens()).isNull();
}
}