Skip to content

Commit 4b3878d

Browse files
committed
feat: switch metadata remover
1 parent d0a613a commit 4b3878d

File tree

4 files changed

+41
-55
lines changed

4 files changed

+41
-55
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
"@prisma/migrate": "^6.9.0",
5050
"@smithy/node-http-handler": "^4.0.6",
5151
"@tabler/icons-react": "^3.34.0",
52-
"@xoi/gps-metadata-remover": "^2.0.0",
5352
"argon2": "^0.43.0",
5453
"bytes": "^3.1.2",
5554
"clsx": "^2.1.1",
@@ -58,6 +57,7 @@
5857
"cross-env": "^7.0.3",
5958
"dayjs": "^1.11.13",
6059
"dotenv": "^16.5.0",
60+
"exif-be-gone": "^1.5.1",
6161
"fast-glob": "^3.3.3",
6262
"fastify": "^5.3.3",
6363
"fastify-plugin": "^5.0.1",
@@ -89,7 +89,6 @@
8989
"@eslint/eslintrc": "^3.3.1",
9090
"@eslint/js": "^9.28.0",
9191
"@types/bytes": "^3.1.5",
92-
"@types/express": "^5.0.2",
9392
"@types/fluent-ffmpeg": "^2.1.27",
9493
"@types/katex": "^0.16.7",
9594
"@types/ms": "^2.1.0",

pnpm-lock.yaml

Lines changed: 9 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/api/upload/upload.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,17 @@ export async function handleFile({
110110
}
111111

112112
let removedGps = false;
113+
113114
if (mimetype.startsWith('image/') && config.files.removeGpsMetadata) {
114-
removedGps = await removeGps(file.buffer);
115+
file.buffer = await removeGps(file.buffer);
116+
117+
if (file.buffer.length < file.file.bytesRead) {
118+
logger.c('gps').debug(`removed gps metadata from ${file.filename}`, {
119+
nsize: bytes(file.buffer.length),
120+
osize: bytes(file.file.bytesRead),
121+
});
115122

116-
if (removedGps) {
117-
logger.c('gps').debug(`removed gps metadata from ${file.filename}`);
123+
removedGps = true;
118124
}
119125
}
120126

src/lib/gps.ts

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
// @ts-ignore
2-
import * as gmr from '@xoi/gps-metadata-remover';
1+
import ExifTransformer from 'exif-be-gone';
2+
import { PassThrough } from 'stream';
33

4-
export const removeLocation = gmr.removeLocation as (
5-
photoUri: string,
6-
read: ReadFunction,
7-
write: WriteFunction,
8-
) => Promise<boolean>;
4+
export async function removeGps(buffer: Buffer): Promise<Buffer> {
5+
return new Promise<Buffer>((resolve, reject) => {
6+
const input = new PassThrough();
7+
input.end(buffer);
98

10-
export type ReadFunction = (size: number, offset: number) => Promise<Buffer>;
11-
export type WriteFunction = (writeValue: string, entryOffset: number, encoding: string) => Promise<void>;
9+
const transformer = new ExifTransformer();
1210

13-
export async function removeGps(buffer: Buffer): Promise<boolean> {
14-
const read = (size: number, offset: number) => Promise.resolve(buffer.subarray(offset, offset + size));
15-
const write = (writeValue: string, entryOffset: number, encoding: string) => {
16-
buffer.write(writeValue, entryOffset, encoding as BufferEncoding);
17-
return Promise.resolve();
18-
};
11+
const chunks: Buffer[] = [];
12+
transformer.on('data', (chunk: Buffer) => {
13+
chunks.push(chunk);
14+
});
1915

20-
return removeLocation('', read, write);
16+
transformer.once('error', (err: Error) => {
17+
reject(err);
18+
});
19+
20+
transformer.once('end', () => {
21+
const stripped = Buffer.concat(chunks);
22+
resolve(stripped);
23+
});
24+
25+
input.pipe(transformer);
26+
});
2127
}

0 commit comments

Comments
 (0)