2121import com .amazonaws .services .s3 .AmazonS3 ;
2222import com .amazonaws .services .s3 .model .CannedAccessControlList ;
2323import com .amazonaws .services .s3 .model .StorageClass ;
24+
25+ import org .elasticsearch .client .node .NodeClient ;
2426import org .elasticsearch .common .settings .Settings ;
27+ import org .elasticsearch .common .settings .SettingsFilter ;
2528import org .elasticsearch .common .unit .ByteSizeUnit ;
2629import org .elasticsearch .common .unit .ByteSizeValue ;
2730import org .elasticsearch .common .xcontent .NamedXContentRegistry ;
2831import org .elasticsearch .env .Environment ;
2932import org .elasticsearch .plugins .Plugin ;
3033import org .elasticsearch .repositories .Repository ;
3134import org .elasticsearch .repositories .blobstore .ESBlobStoreRepositoryIntegTestCase ;
35+ import org .elasticsearch .rest .AbstractRestChannel ;
36+ import org .elasticsearch .rest .RestController ;
37+ import org .elasticsearch .rest .RestRequest ;
38+ import org .elasticsearch .rest .RestResponse ;
39+ import org .elasticsearch .rest .action .admin .cluster .RestGetRepositoriesAction ;
40+ import org .elasticsearch .test .rest .FakeRestRequest ;
3241import org .junit .AfterClass ;
3342import org .junit .BeforeClass ;
3443
3847import java .util .Map ;
3948import java .util .concurrent .ConcurrentHashMap ;
4049import java .util .concurrent .ConcurrentMap ;
50+ import java .util .concurrent .CountDownLatch ;
51+ import java .util .concurrent .atomic .AtomicReference ;
4152
4253import static java .util .Collections .emptyMap ;
4354import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertAcked ;
55+ import static org .hamcrest .Matchers .containsString ;
56+ import static org .hamcrest .Matchers .not ;
57+ import static org .mockito .Mockito .mock ;
4458
4559public class S3BlobStoreRepositoryTests extends ESBlobStoreRepositoryIntegTestCase {
4660
@@ -81,7 +95,9 @@ protected void createTestRepository(final String name) {
8195 .put (S3Repository .BUFFER_SIZE_SETTING .getKey (), bufferSize )
8296 .put (S3Repository .SERVER_SIDE_ENCRYPTION_SETTING .getKey (), serverSideEncryption )
8397 .put (S3Repository .CANNED_ACL_SETTING .getKey (), cannedACL )
84- .put (S3Repository .STORAGE_CLASS_SETTING .getKey (), storageClass )));
98+ .put (S3Repository .STORAGE_CLASS_SETTING .getKey (), storageClass )
99+ .put (S3Repository .ACCESS_KEY_SETTING .getKey (), "not_used_but_this_is_a_secret" )
100+ .put (S3Repository .SECRET_KEY_SETTING .getKey (), "not_used_but_this_is_a_secret" )));
85101 }
86102
87103 @ Override
@@ -106,4 +122,32 @@ public synchronized AmazonS3 client(final Settings repositorySettings) {
106122 }));
107123 }
108124 }
125+
126+ public void testInsecureRepositoryCredentials () throws Exception {
127+ final String repositoryName = "testInsecureRepositoryCredentials" ;
128+ createTestRepository (repositoryName );
129+ final NodeClient nodeClient = internalCluster ().getInstance (NodeClient .class );
130+ final RestGetRepositoriesAction getRepoAction = new RestGetRepositoriesAction (Settings .EMPTY , mock (RestController .class ),
131+ internalCluster ().getInstance (SettingsFilter .class ));
132+ final RestRequest getRepoRequest = new FakeRestRequest ();
133+ getRepoRequest .params ().put ("repository" , repositoryName );
134+ final CountDownLatch getRepoLatch = new CountDownLatch (1 );
135+ final AtomicReference <AssertionError > getRepoError = new AtomicReference <>();
136+ getRepoAction .handleRequest (getRepoRequest , new AbstractRestChannel (getRepoRequest , true ) {
137+ @ Override
138+ public void sendResponse (RestResponse response ) {
139+ try {
140+ assertThat (response .content ().utf8ToString (), not (containsString ("not_used_but_this_is_a_secret" )));
141+ } catch (final AssertionError ex ) {
142+ getRepoError .set (ex );
143+ }
144+ getRepoLatch .countDown ();
145+ }
146+ }, nodeClient );
147+ getRepoLatch .await ();
148+ if (getRepoError .get () != null ) {
149+ throw getRepoError .get ();
150+ }
151+ }
152+
109153}
0 commit comments