Skip to content

Commit

Permalink
Fix broken unit tests and update tag regex
Browse files Browse the repository at this point in the history
Signed-off-by: Jeremy Ho <[email protected]>
  • Loading branch information
jujaga committed May 26, 2023
1 parent 7f5e3b3 commit ef23aa4
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 55 deletions.
30 changes: 16 additions & 14 deletions app/src/controllers/object.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,29 +107,30 @@ const controller = {
// get version from S3
const source = await storageService.headObject({
filePath: objPath,
s3VersionId: sourceS3VersionId, bucketId
s3VersionId: sourceS3VersionId,
bucketId: bucketId
});
if (source.ContentLength > MAXCOPYOBJECTLENGTH) {
throw new Error('Cannot copy an object larger than 5GB');
}
// get existing tags on source object, eg: { 'animal': 'bear', colour': 'black' }
const sourceObject = await storageService.getObjectTagging({ filePath: objPath, s3VersionId: sourceS3VersionId, bucketId });
const sourceObject = await storageService.getObjectTagging({ filePath: objPath, s3VersionId: sourceS3VersionId, bucketId: bucketId });

const sourceTags = Object.assign({}, ...(sourceObject.TagSet.map(item => ({ [item.Key]: item.Value }))));

const metadataToAppend = getMetadata(req.headers);
if (!Object.keys(metadataToAppend).length) {
if (!Object.keys({ ...metadataToAppend}).length) {
// TODO: Validation level logic. To be moved.
// 422 when no keys present
res.status(422).end();
}
else {
const data = {
bucketId,
bucketId: bucketId,
copySource: objPath,
filePath: objPath,
metadata: {
...source.Metadata, // Take existing metadata first
...source.Metadata, // Take existing metadata first
...metadataToAppend, // Append new metadata
},
metadataDirective: MetadataDirective.REPLACE,
Expand All @@ -144,8 +145,8 @@ const controller = {
await utils.trxWrapper(async (trx) => {
// create or update version in DB (if a non-versioned object)
const version = s3Response.VersionId ?
await versionService.copy(sourceS3VersionId, s3Response.VersionId, objId, s3Response.CopyObjectResult.ETag, userId, trx) :
await versionService.update({ ...data, id: objId, etag: s3Response.CopyObjectResult.ETag }, userId, trx);
await versionService.copy(sourceS3VersionId, s3Response.VersionId, objId, s3Response.CopyObjectResult?.ETag, userId, trx) :
await versionService.update({ ...data, id: objId, etag: s3Response.CopyObjectResult?.ETag }, userId, trx);

// add metadata for version in DB
await metadataService.associateMetadata(version.id, getKeyValue(data.metadata), userId, trx);
Expand Down Expand Up @@ -372,7 +373,7 @@ const controller = {
}

// Generate object subset by subtracting/omitting defined keys via filter/inclusion
const keysToRemove = Object.keys(getMetadata(req.headers));
const keysToRemove = Object.keys({ ...getMetadata(req.headers) });
let metadata = undefined;
if (keysToRemove.length) {
metadata = Object.fromEntries(
Expand All @@ -384,12 +385,13 @@ const controller = {
// get existing tags on source object
const sourceObject = await storageService.getObjectTagging({
filePath: objPath,
s3VersionId: sourceS3VersionId, bucketId
s3VersionId: sourceS3VersionId,
bucketId: bucketId
});
const sourceTags = Object.assign({}, ...(sourceObject.TagSet.map(item => ({ [item.Key]: item.Value }))));

const data = {
bucketId,
bucketId: bucketId,
copySource: objPath,
filePath: objPath,
metadata: metadata,
Expand All @@ -408,8 +410,8 @@ const controller = {
await utils.trxWrapper(async (trx) => {
// create or update version in DB(if a non-versioned object)
const version = s3Response.VersionId ?
await versionService.copy(sourceS3VersionId, s3Response.VersionId, objId, s3Response.CopyObjectResult.ETag, userId, trx) :
await versionService.update({ ...data, id: objId, etag: s3Response.CopyObjectResult.ETag }, userId, trx);
await versionService.copy(sourceS3VersionId, s3Response.VersionId, objId, s3Response.CopyObjectResult?.ETag, userId, trx) :
await versionService.update({ ...data, id: objId, etag: s3Response.CopyObjectResult?.ETag }, userId, trx);
// add metadata to version in DB
await metadataService.associateMetadata(version.id, getKeyValue(data.metadata), userId, trx);

Expand Down Expand Up @@ -768,9 +770,9 @@ const controller = {
await utils.trxWrapper(async (trx) => {
// create or update version (if a non-versioned object)
const version = s3Response.VersionId ?
await versionService.copy(sourceS3VersionId, s3Response.VersionId, objId, s3Response.CopyObjectResult.ETag, userId, trx) :
await versionService.copy(sourceS3VersionId, s3Response.VersionId, objId, s3Response.CopyObjectResult?.ETag, userId, trx) :

await versionService.update({ ...data, id: objId, etag: s3Response.CopyObjectResult.ETag }, userId, trx);
await versionService.update({ ...data, id: objId, etag: s3Response.CopyObjectResult?.ETag }, userId, trx);

// add metadata
await metadataService.associateMetadata(version.id, getKeyValue(data.metadata), userId, trx);
Expand Down
5 changes: 2 additions & 3 deletions app/src/validators/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,9 @@ const type = {

tagset: (minKeyCount = 1, minValueStringLength = 0) => Joi.object()
.pattern(
/^((?!coms-id).){1,255}$/, // don't allow key 'coms-id'
/^(?!coms-id$).{1,255}$/, // don't allow key 'coms-id'
Joi.string().min(minValueStringLength).max(255),
{ matches: Joi.array().min(minKeyCount) },

{ matches: Joi.array().min(minKeyCount) }
)
};

Expand Down
Loading

0 comments on commit ef23aa4

Please sign in to comment.