From e1c6b6afe7bcefb0a8b17d70c72588d6c70f8db9 Mon Sep 17 00:00:00 2001 From: Marius David Wieschollek Date: Sun, 28 Nov 2021 19:29:57 +0100 Subject: Update handling of theming Signed-off-by: Marius David Wieschollek --- package-lock.json | 11 ------ package.json | 1 - src/PassLink/Action/Connect.js | 84 +++++++----------------------------------- 3 files changed, 13 insertions(+), 83 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13ea0cb..402a5dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "eventemitter3": "^4.0.7", "libsodium-wrappers": "^0.7.9", - "pako": "^2.0.4", "url-parse": "^1.5.3", "uuid": "^8.3.2" } @@ -34,11 +33,6 @@ "libsodium": "^0.7.0" } }, - "node_modules/pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -86,11 +80,6 @@ "libsodium": "^0.7.0" } }, - "pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", diff --git a/package.json b/package.json index 89a6834..d65ba3f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "dependencies": { "eventemitter3": "^4.0.7", "libsodium-wrappers": "^0.7.9", - "pako": "^2.0.4", "url-parse": "^1.5.3", "uuid": "^8.3.2" } diff --git a/src/PassLink/Action/Connect.js b/src/PassLink/Action/Connect.js index fbfda88..cc9a0f3 100644 --- a/src/PassLink/Action/Connect.js +++ b/src/PassLink/Action/Connect.js @@ -44,10 +44,10 @@ export default class Connect extends PassLinkAction { * * @return {Promise|null} */ - getTheme() { + async getTheme() { if(this._theme !== null) return this._theme; - return this._decodeTheme(); + return await this._loadTheme(); } /** @@ -111,77 +111,19 @@ export default class Connect extends PassLinkAction { * * @private */ - async _decodeTheme() { - if(this._parameters.hasOwnProperty('t')) { - let pako = await import(/* webpackChunkName: "pako" */ 'pako'), - base64 = this._parameters.t, - zipped = atob(base64), - data = pako.inflate(zipped, {to: 'string'}); - - return this._themeFromV1(data); - } else if(this._parameters.hasOwnProperty('theme')) { - let pako = await import(/* webpackChunkName: "pako" */ 'pako'), - base64 = this._parameters.theme, - zipped = atob(base64), - data = pako.inflate(zipped, {to: 'string'}); - - return this._themeFromJson(data); - } - return null; - } - - /** - * @param {String} data - * @return {Object|null} - * @private - */ - _themeFromJson(data) { - let theme = JSON.parse(data); - - if(theme.hasOwnProperty('color')) { - theme['color.primary'] = theme.color; - delete theme.color; - } - if(theme.hasOwnProperty('txtColor')) { - theme['color.text'] = theme.txtColor; - delete theme.txtColor; - } - if(theme.hasOwnProperty('bgColor')) { - theme['color.background'] = theme.bgColor; - delete theme.bgColor; - } - if(theme.hasOwnProperty('background') && theme.background.substr(0, 8) !== 'https://') { - theme.background = this._parameters.baseUrl + theme.background; - } - if(theme.hasOwnProperty('logo')) { - theme.logo = this._parameters.baseUrl + theme.logo; - } - - this._theme = theme; - - return theme; - } - - /** - * @param {String} data - * @return {Object|null} - * @private - */ - _themeFromV1(data) { - let parts = data.split('|'); - if(parts.length !== 6) return null; - - let theme = {}; + async _loadTheme() { + let url = `${this._parameters.baseUrl}index.php/apps/passwords/link/connect/theme`, + request = new HttpRequest(url); - theme['label'] = parts[0]; - theme['logo'] = `${this._parameters.baseUrl}/${parts[1]}`; - theme['background'] = parts[2].substr(0, 3) === '://' ? `https${parts[2]}`:`${this._parameters.baseUrl}/${parts[2]}`; - theme['color.primary'] = parts[3].length === 6 ? '#' + parts[3]:parts[3]; - theme['color.text'] = parts[4].length === 6 ? '#' + parts[4]:parts[4]; - theme['color.background'] = parts[5].length === 6 ? '#' + parts[5]:parts[5]; + let data = {id: this._parameters.id}; - this._theme = theme; + try { + let response = await request.setData(data).send(); + this._theme = response.getData(); - return theme; + return response.getData(); + } catch(e) { + return null; + } } } \ No newline at end of file -- cgit v1.2.3 From 74d7a9e3a0b5c9c8c0bc8a52c75b488c05285cbd Mon Sep 17 00:00:00 2001 From: Marius David Wieschollek Date: Tue, 4 Jan 2022 20:53:42 +0100 Subject: Added precondition failed error Signed-off-by: Marius David Wieschollek --- src/ClassLoader/DefaultClassLoader.js | 2 ++ src/Exception/Http/PreconditionFailedError.js | 18 ++++++++++++++++++ src/Network/ApiRequest.js | 4 ++-- src/errors.js | 4 +++- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 src/Exception/Http/PreconditionFailedError.js diff --git a/src/ClassLoader/DefaultClassLoader.js b/src/ClassLoader/DefaultClassLoader.js index d749664..00ff4b3 100644 --- a/src/ClassLoader/DefaultClassLoader.js +++ b/src/ClassLoader/DefaultClassLoader.js @@ -66,6 +66,7 @@ import InvalidEncryptedTextLength from "../Exception/Encryption/InvalidEncrypted import HashService from "../Services/HashService"; import Logger from "../Logger/Logger"; import DefectField from "../Model/CustomField/DefectField"; +import PreconditionFailedError from "../Exception/Http/PreconditionFailedError"; export default class DefaultClassLoader extends BasicClassLoader { @@ -147,6 +148,7 @@ export default class DefaultClassLoader extends BasicClassLoader { 'exception.http.403' : ForbiddenError, 'exception.http.404' : NotFoundError, 'exception.http.405' : MethodNotAllowedError, + 'exception.http.412' : PreconditionFailedError, 'exception.http.429' : TooManyRequestsError, 'exception.http.500' : InternalServerError, 'exception.http.502' : BadGatewayError, diff --git a/src/Exception/Http/PreconditionFailedError.js b/src/Exception/Http/PreconditionFailedError.js new file mode 100644 index 0000000..12fbad3 --- /dev/null +++ b/src/Exception/Http/PreconditionFailedError.js @@ -0,0 +1,18 @@ +import HttpError from './HttpError'; + +export default class PreconditionFailedError extends HttpError { + + /** + * @returns {String} + */ + get name() { + return 'PreconditionFailedError'; + } + + /** + * @param {Response} response + */ + constructor(response) { + super(response, 'Precondition failed'); + } +} \ No newline at end of file diff --git a/src/Network/ApiRequest.js b/src/Network/ApiRequest.js index 1e975af..a4ce535 100644 --- a/src/Network/ApiRequest.js +++ b/src/Network/ApiRequest.js @@ -282,8 +282,8 @@ export default class ApiRequest { * @private */ _getHttpError(response) { - if([400, 401, 403, 404, 405, 429, 500, 502, 503, 504].indexOf(response.status) !== -1) { - return this._api.getClass(`exception.${response.status}`, response); + if([400, 401, 403, 404, 405, 412, 429, 500, 502, 503, 504].indexOf(response.status) !== -1) { + return this._api.getClass(`exception.http.${response.status}`, response); } if(response.status > 99) { return this._api.getClass('exception.http', response); diff --git a/src/errors.js b/src/errors.js index 225f4a5..5305bba 100644 --- a/src/errors.js +++ b/src/errors.js @@ -14,6 +14,7 @@ import NotFoundError from "./Exception/Http/NotFoundError"; import ServiceUnavailableError from "./Exception/Http/ServiceUnavailableError"; import TooManyRequestsError from "./Exception/Http/TooManyRequestsError"; import UnauthorizedError from "./Exception/Http/UnauthorizedError"; +import PreconditionFailedError from "./Exception/Http/PreconditionFailedError"; import InvalidLink from "./Exception/PassLink/InvalidLink"; import UnknownAction from "./Exception/PassLink/UnknownAction"; import ChallengeTypeNotSupported from "./Exception/ChallengeTypeNotSupported"; @@ -51,5 +52,6 @@ export { ResponseContentTypeError, ResponseDecodingError, TokenTypeNotSupported, - UnknownPropertyError + UnknownPropertyError, + PreconditionFailedError }; \ No newline at end of file -- cgit v1.2.3 From a8430eb38ce5a34dcd57df48e3464c26ed9455d3 Mon Sep 17 00:00:00 2001 From: Marius David Wieschollek Date: Sat, 3 Sep 2022 10:46:28 +0200 Subject: Updated packages Signed-off-by: Marius David Wieschollek --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 402a5dc..f8fe477 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,11 +6,11 @@ "packages": { "": { "name": "passwords-client", - "version": "1.0.0", + "version": "1.0.0.BUILD", "license": "ISC", "dependencies": { "eventemitter3": "^4.0.7", - "libsodium-wrappers": "^0.7.9", + "libsodium-wrappers": "^0.7.10", "url-parse": "^1.5.3", "uuid": "^8.3.2" } @@ -21,14 +21,14 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/libsodium": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", - "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz", + "integrity": "sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ==" }, "node_modules/libsodium-wrappers": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", - "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", + "integrity": "sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg==", "dependencies": { "libsodium": "^0.7.0" } @@ -41,12 +41,12 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -68,14 +68,14 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "libsodium": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", - "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz", + "integrity": "sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ==" }, "libsodium-wrappers": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", - "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", + "integrity": "sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg==", "requires": { "libsodium": "^0.7.0" } @@ -88,12 +88,12 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/package.json b/package.json index d65ba3f..f099219 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "eventemitter3": "^4.0.7", - "libsodium-wrappers": "^0.7.9", + "libsodium-wrappers": "^0.7.10", "url-parse": "^1.5.3", "uuid": "^8.3.2" } -- cgit v1.2.3 From 1f18b35269cb8e68cd54c1aed57f5984d9535415 Mon Sep 17 00:00:00 2001 From: Marius David Wieschollek Date: Sat, 18 Feb 2023 13:18:50 +0100 Subject: Pin libsodium to 0.7.10 Signed-off-by: Marius David Wieschollek --- package-lock.json | 3 ++- package.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8fe477..e417efb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "license": "ISC", "dependencies": { "eventemitter3": "^4.0.7", - "libsodium-wrappers": "^0.7.10", + "libsodium": "0.7.10", + "libsodium-wrappers": "0.7.10", "url-parse": "^1.5.3", "uuid": "^8.3.2" } diff --git a/package.json b/package.json index f099219..25e4258 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,8 @@ }, "dependencies": { "eventemitter3": "^4.0.7", - "libsodium-wrappers": "^0.7.10", + "libsodium": "0.7.10", + "libsodium-wrappers": "0.7.10", "url-parse": "^1.5.3", "uuid": "^8.3.2" } -- cgit v1.2.3