Skip to content

Commit f814363

Browse files
committed
fix: normalize Date handling in generateETag
1 parent 1bcb7bc commit f814363

2 files changed

Lines changed: 15 additions & 13 deletions

File tree

src/utils/webdav.utils.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ export class WebDavUtils {
111111
await DriveItemRepository.instance.delete([driveItem.uuid]);
112112
}
113113

114-
static generateETag(parts: Array<string | number | Date | null | undefined>): string {
115-
const normalized = parts.map((part) => (part instanceof Date ? part.getTime() : (part ?? '')));
114+
static generateETag(parts: Array<string | number | null | undefined>): string {
115+
const normalized = parts.map((part) => part ?? '-');
116116
const hash = createHash('sha256').update(normalized.join('|')).digest('hex');
117117
return `"${hash}"`;
118118
}
@@ -121,10 +121,10 @@ export class WebDavUtils {
121121
return this.generateETag([
122122
driveItem.uuid,
123123
driveItem.itemType === 'file' ? driveItem.size : undefined,
124-
driveItem.createdAt,
125-
driveItem.updatedAt,
126-
driveItem.creationTime,
127-
driveItem.modificationTime,
124+
driveItem.createdAt.getTime(),
125+
driveItem.updatedAt.getTime(),
126+
driveItem.creationTime.getTime(),
127+
driveItem.modificationTime.getTime(),
128128
]);
129129
}
130130
}

test/utils/webdav.utils.test.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ describe('Webdav utils', () => {
169169
describe('generateETag', () => {
170170
test('when the same parts are given, then the same etag is generated', () => {
171171
const date = new Date('2024-03-04T15:11:01.000Z');
172-
const etag1 = WebDavUtils.generateETag(['uuid-1', 100, date]);
173-
const etag2 = WebDavUtils.generateETag(['uuid-1', 100, date]);
172+
const etag1 = WebDavUtils.generateETag(['uuid-1', 100, date.getTime()]);
173+
const etag2 = WebDavUtils.generateETag(['uuid-1', 100, date.getTime()]);
174174

175175
expect(etag1).to.be.equal(etag2);
176176
});
@@ -184,16 +184,18 @@ describe('Webdav utils', () => {
184184

185185
test('when any part differs, then a different etag is generated', () => {
186186
const date = new Date('2024-03-04T15:11:01.000Z');
187-
const baseEtag = WebDavUtils.generateETag(['uuid-1', 100, date]);
187+
const baseEtag = WebDavUtils.generateETag(['uuid-1', 100, date.getTime()]);
188188

189-
expect(WebDavUtils.generateETag(['uuid-2', 100, date])).to.not.be.equal(baseEtag);
190-
expect(WebDavUtils.generateETag(['uuid-1', 200, date])).to.not.be.equal(baseEtag);
191-
expect(WebDavUtils.generateETag(['uuid-1', 100, new Date('2024-03-04T15:11:02.000Z')])).to.not.be.equal(baseEtag);
189+
expect(WebDavUtils.generateETag(['uuid-2', 100, date.getTime()])).to.not.be.equal(baseEtag);
190+
expect(WebDavUtils.generateETag(['uuid-1', 200, date.getTime()])).to.not.be.equal(baseEtag);
191+
expect(WebDavUtils.generateETag(['uuid-1', 100, new Date('2024-03-04T15:11:02.000Z').getTime()])).to.not.be.equal(
192+
baseEtag,
193+
);
192194
});
193195

194196
test('when a Date is given, then it is normalized using its timestamp', () => {
195197
const date = new Date('2024-03-04T15:11:01.000Z');
196-
const etagFromDate = WebDavUtils.generateETag(['uuid-1', date]);
198+
const etagFromDate = WebDavUtils.generateETag(['uuid-1', date.getTime()]);
197199
const etagFromTimestamp = WebDavUtils.generateETag(['uuid-1', date.getTime()]);
198200

199201
expect(etagFromDate).to.be.equal(etagFromTimestamp);

0 commit comments

Comments
 (0)