diff --git a/backend/middlewares/user/AuthenticationMWs.ts b/backend/middlewares/user/AuthenticationMWs.ts index a2c5aadc..28eaad6e 100644 --- a/backend/middlewares/user/AuthenticationMWs.ts +++ b/backend/middlewares/user/AuthenticationMWs.ts @@ -116,7 +116,6 @@ export class AuthenticationMWs { (typeof req.body.loginCredential.password === 'undefined')) { return next(new ErrorDTO(ErrorCodes.INPUT_ERROR)); } - //TODO: implement remember me try { //lets find the user const user = Utils.clone(await ObjectManagerRepository.getInstance().UserManager.findOne({ diff --git a/backend/model/threading/DiskMangerWorker.ts b/backend/model/threading/DiskMangerWorker.ts index a6627f13..1af8f6d3 100644 --- a/backend/model/threading/DiskMangerWorker.ts +++ b/backend/model/threading/DiskMangerWorker.ts @@ -4,7 +4,7 @@ import {CameraMetadata, GPSMetadata, ImageSize, PhotoDTO, PhotoMetadata} from ". import {Logger} from "../../Logger"; import * as fs from "fs"; import * as path from "path"; -import * as iptc from "node-iptc"; +import {IptcParser} from "ts-node-iptc"; import * as exif_parser from "exif-parser"; import {ProjectPath} from "../../ProjectPath"; @@ -53,7 +53,7 @@ export class DiskMangerWorker { const exif = exif_parser.create(data).parse(); metadata.cameraData = { ISO: exif.tags.ISO, - model: exif.tags.Model.toString("utf8"), + model: exif.tags.Model, make: exif.tags.Make, fStop: exif.tags.FNumber, exposure: exif.tags.ExposureTime, @@ -76,18 +76,7 @@ export class DiskMangerWorker { } try { - - const iptcData = iptc(data); - //Decode characters to UTF8 - const decode = (s: any) => { - for (let a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l; - ((a = s[i][c](0)) & 0x80) && - (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? - o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "") - ); - return s.join(""); - }; - + const iptcData = IptcParser.parse(data); if (iptcData.country_or_primary_location_name || iptcData.province_or_state || iptcData.city) { metadata.positionData = metadata.positionData || {}; metadata.positionData.country = iptcData.country_or_primary_location_name; @@ -95,11 +84,10 @@ export class DiskMangerWorker { metadata.positionData.city = iptcData.city; } - - metadata.keywords = (iptcData.keywords || []).map((s: string) => decode(s)); - metadata.creationDate = iptcData.date_time ? iptcData.date_time.getTime() : 0; + metadata.keywords = (iptcData.keywords || []); + metadata.creationDate = (iptcData.date_time ? iptcData.date_time.getTime() : 0); } catch (err) { - Logger.info(LOG_TAG, "Error parsing iptc data", fullPath); + Logger.info(LOG_TAG, "Error parsing iptc data", fullPath, err); } return resolve(metadata); diff --git a/backend/server.ts b/backend/server.ts index 1d2a9db8..41ba91c5 100644 --- a/backend/server.ts +++ b/backend/server.ts @@ -1,5 +1,4 @@ import * as _express from "express"; -import * as _session from "cookie-session"; import * as _bodyParser from "body-parser"; import * as _http from "http"; import {PublicRouter} from "./routes/PublicRouter"; @@ -17,6 +16,7 @@ import {ThumbnailGeneratorMWs} from "./middlewares/thumbnail/ThumbnailGeneratorM import {DiskManager} from "./model/DiskManger"; import {NotificationRouter} from "./routes/NotificationRouter"; import {ConfigDiagnostics} from "./model/ConfigDiagnostics"; +import _session = require('cookie-session'); const LOG_TAG = "[server]"; export class Server { diff --git a/package.json b/package.json index 8bfe4888..5fedd711 100644 --- a/package.json +++ b/package.json @@ -29,13 +29,13 @@ "body-parser": "1.17.2", "cookie-session": "^2.0.0-beta.2", "ejs": "2.5.6", - "exif-parser": "0.1.9", + "exif-parser": "^0.1.11", "express": "4.15.3", "flat-file-db": "1.0.0", "jimp": "0.2.28", "mysql": "2.13.0", - "node-iptc": "1.0.4", "reflect-metadata": "0.1.10", + "ts-node-iptc": "^1.0.7", "typeconfig": "1.0.4", "typeorm": "0.0.11", "winston": "2.3.1" diff --git a/test/backend/unit/assets/test image öüóőúéáű-.,.jpg b/test/backend/unit/assets/test image öüóőúéáű-.,.jpg index b44dcb5d..b6347849 100644 Binary files a/test/backend/unit/assets/test image öüóőúéáű-.,.jpg and b/test/backend/unit/assets/test image öüóőúéáű-.,.jpg differ diff --git a/test/backend/unit/model/threading/DiskMangerWorker.spec.ts b/test/backend/unit/model/threading/DiskMangerWorker.spec.ts index c0d7ceae..b54721b5 100644 --- a/test/backend/unit/model/threading/DiskMangerWorker.spec.ts +++ b/test/backend/unit/model/threading/DiskMangerWorker.spec.ts @@ -6,15 +6,14 @@ import {ProjectPath} from "../../../../../backend/ProjectPath"; describe('DiskMangerWorker', () => { - it('should call next on authenticated', async () => { + it('should parse metadata', async () => { Config.Server.imagesFolder = path.join(__dirname, "/../../assets"); ProjectPath.ImageFolder = path.join(__dirname, "/../../assets"); const dir = await DiskMangerWorker.scanDirectory("/"); - console.log(dir.photos[0].metadata); expect(dir.photos.length).to.be.equals(1); expect(dir.photos[0].name).to.be.equals("test image öüóőúéáű-.,.jpg"); - expect(dir.photos[0].metadata.keywords).to.deep.equals(['Berkley,USA']); - expect(dir.photos[0].metadata.fileSize).to.deep.equals(57172); + expect(dir.photos[0].metadata.keywords).to.deep.equals(['Berkley', 'USA', 'űáéúőóüö ŰÁÉÚŐÓÜÖ']); + expect(dir.photos[0].metadata.fileSize).to.deep.equals(62392); expect(dir.photos[0].metadata.size).to.deep.equals({width: 140, height: 93}); expect(dir.photos[0].metadata.cameraData).to.deep.equals({ ISO: 3200, @@ -32,9 +31,9 @@ describe('DiskMangerWorker', () => { longitude: -122.25678, altitude: 102.4498997995992 }, - country: 'óüöúőűáé ÓÜÖÚŐŰÁÉ', - state: 'óüöúőűáé ÓÜÖÚŐŰÁÉ', - city: 'óüöúőűáé ÓÜÖÚŐŰÁÉ' + country: 'mmóüöúőűáé ÓÜÖÚŐŰÁÉmm-.,|\\mm\u0000', + state: 'óüöúőűáé ÓÜÖÚŐŰÁ', + city: 'óüöúőűáé ÓÜÖÚŐŰÁ' }); expect(dir.photos[0].metadata.creationDate).to.be.equals(1436610566000);