Merge pull request #18733 from strapi/fix/aws-mandatory-credentials

This commit is contained in:
Christian 2023-11-15 10:23:42 +01:00 committed by GitHub
commit 50a6ed6e3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 8 deletions

View File

@ -16,7 +16,7 @@ const defaultOptions = {
describe('Utils', () => { describe('Utils', () => {
describe('Extract credentials for V4 different aws provider configurations', () => { describe('Extract credentials for V4 different aws provider configurations', () => {
test('[Legacy] Credentials directly in the options', async () => { test('[Legacy] Credentials directly in the options', () => {
const options: InitOptions = { const options: InitOptions = {
accessKeyId, accessKeyId,
secretAccessKey, secretAccessKey,
@ -30,7 +30,7 @@ describe('Utils', () => {
}); });
}); });
test('[Legacy] credentials directly in s3Options', async () => { test('[Legacy] credentials directly in s3Options', () => {
const options: InitOptions = { const options: InitOptions = {
s3Options: { s3Options: {
accessKeyId, accessKeyId,
@ -46,7 +46,7 @@ describe('Utils', () => {
}); });
}); });
test('Credentials in credentials object inside s3Options', async () => { test('Credentials in credentials object inside s3Options', () => {
const options: InitOptions = { const options: InitOptions = {
s3Options: { s3Options: {
credentials: { credentials: {
@ -63,5 +63,15 @@ describe('Utils', () => {
secretAccessKey, secretAccessKey,
}); });
}); });
test('Does not throw an error when credentials are not present', () => {
const options: InitOptions = {
s3Options: {
...defaultOptions,
},
};
const credentials = extractCredentials(options);
expect(credentials).toEqual(null);
});
}); });
}); });

View File

@ -76,11 +76,11 @@ const getConfig = ({ baseUrl, rootPath, s3Options, ...legacyS3Options }: InitOpt
"S3 configuration options passed at root level of the plugin's providerOptions is deprecated and will be removed in a future release. Please wrap them inside the 's3Options:{}' property." "S3 configuration options passed at root level of the plugin's providerOptions is deprecated and will be removed in a future release. Please wrap them inside the 's3Options:{}' property."
); );
} }
const credentials = extractCredentials({ s3Options, ...legacyS3Options });
const config = { const config = {
...s3Options, ...s3Options,
...legacyS3Options, ...legacyS3Options,
credentials: extractCredentials({ s3Options, ...legacyS3Options }), ...(credentials ? { credentials } : {}),
}; };
config.params.ACL = getOr(ObjectCannedACL.public_read, ['params', 'ACL'], config); config.params.ACL = getOr(ObjectCannedACL.public_read, ['params', 'ACL'], config);

View File

@ -89,7 +89,7 @@ function getBucketFromAwsUrl(fileUrl: string): BucketInfo {
} }
// TODO Remove this in V5 since we will only support the new config structure // TODO Remove this in V5 since we will only support the new config structure
export const extractCredentials = (options: InitOptions): AwsCredentialIdentity => { export const extractCredentials = (options: InitOptions): AwsCredentialIdentity | null => {
// legacy // legacy
if (options.accessKeyId && options.secretAccessKey) { if (options.accessKeyId && options.secretAccessKey) {
return { return {
@ -114,6 +114,5 @@ export const extractCredentials = (options: InitOptions): AwsCredentialIdentity
secretAccessKey: options.s3Options.credentials.secretAccessKey, secretAccessKey: options.s3Options.credentials.secretAccessKey,
}; };
} }
return null;
throw new Error("Couldn't find AWS credentials.");
}; };