diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-02-07 00:38:18 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-02-07 00:38:18 +0300 |
commit | 261af06e1a8fd75ff50da240824f4bba2fe88c69 (patch) | |
tree | d3b9cc07f19fd6e8ad4e02c755c5274c7ee96ad2 | |
parent | 87ad8b9986cbb4ca03f6c336ee623545174a74d1 (diff) |
Encode uri components
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
-rw-r--r-- | package-lock.json | 130 | ||||
-rw-r--r-- | package.json | 4 | ||||
-rw-r--r-- | src/Classes/SimpleApi.js | 20 |
3 files changed, 108 insertions, 46 deletions
diff --git a/package-lock.json b/package-lock.json index 2c93714..a985b79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,45 +1,93 @@ { - "name": "passwords-client", - "version": "0.0.11", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + "name": "passwords-client", + "version": "0.0.11", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.0.11", + "license": "ISC", + "dependencies": { + "eventemitter3": "^3.1.2", + "libsodium-wrappers": "^0.7.8", + "url-parse": "^1.4.7" + } + }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "node_modules/libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + }, + "node_modules/libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "dependencies": { + "libsodium": "^0.7.0" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + } }, - "libsodium": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.8.tgz", - "integrity": "sha512-/Qc+APf0jbeWSaeEruH0L1/tbbT+sbf884ZL0/zV/0JXaDPBzYkKbyb/wmxMHgAHzm3t6gqe7bOOXAVwfqVikQ==" - }, - "libsodium-wrappers": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.8.tgz", - "integrity": "sha512-PDhPWXBqd/SaqAFUBgH2Ux7b3VEEJgyD6BQB+VdNFJb9PbExGr/T/myc/MBoSvl8qLzfm0W0IVByOQS5L1MrCg==", - "requires": { - "libsodium": "0.7.8" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + }, + "libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "requires": { + "libsodium": "^0.7.0" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + } } - } } diff --git a/package.json b/package.json index 8020b67..71b868c 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "url": "https://git.mdns.eu/nextcloud/passwords-client.git" }, "dependencies": { - "url-parse": "^1.4.7", "eventemitter3": "^3.1.2", - "libsodium-wrappers": "^0.7.8" + "libsodium-wrappers": "^0.7.8", + "url-parse": "^1.4.7" } } diff --git a/src/Classes/SimpleApi.js b/src/Classes/SimpleApi.js index 37361da..51e14e3 100644 --- a/src/Classes/SimpleApi.js +++ b/src/Classes/SimpleApi.js @@ -550,6 +550,7 @@ export default class SimpleApi { * @returns {Promise} */ getAvatar(user, size = 32) { + user = encodeURIComponent(user); return this._sendRequest(['service.avatar', {user, size}], null, 'GET', 'image/png'); } @@ -561,6 +562,7 @@ export default class SimpleApi { * @returns {*} */ getAvatarUrl(user, size = 32) { + user = encodeURIComponent(user); return this._config.apiUrl + this.processUrl(this._paths['service.avatar'], {user, size}); } @@ -573,6 +575,7 @@ export default class SimpleApi { */ getFavicon(domain, size = 32) { if(domain === null || domain.length === 0) domain = 'default'; + domain = encodeURIComponent(domain); return this._sendRequest(['service.favicon', {domain, size}], null, 'GET', 'image/png'); } @@ -585,6 +588,7 @@ export default class SimpleApi { */ getFaviconUrl(domain, size = 32) { if(domain === null || domain.length === 0) domain = 'default'; + domain = encodeURIComponent(domain); return this._config.apiUrl + this.processUrl(this._paths['service.favicon'], {domain, size}); } @@ -599,6 +603,7 @@ export default class SimpleApi { */ getPreview(domain, view = 'desktop', width = '640', height = '360...') { if(domain === null || domain.length === 0) domain = 'default'; + domain = encodeURIComponent(domain); return this._sendRequest( ['service.preview', {domain, view, width, height}], null, @@ -618,6 +623,7 @@ export default class SimpleApi { */ getPreviewUrl(domain, view = 'desktop', width = '640', height = '360...') { if(domain === null || domain.length === 0) domain = 'default'; + domain = encodeURIComponent(domain); return this._config.apiUrl + this.processUrl( this._paths['service.preview'], {domain, view, width, height} @@ -738,13 +744,14 @@ export default class SimpleApi { * @param data * @param method * @param dataType + * @param requestOptions * @returns {Promise} * @private */ - async _sendRequest(path, data = null, method = null, dataType = 'application/json') { + async _sendRequest(path, data = null, method = null, dataType = 'application/json', requestOptions = {}) { if(!this._enabled) throw new Error('API not authorized'); let url = this._getRequestUrl(path), - options = this._getRequestOptions(method, data, dataType), + options = this._getRequestOptions(method, data, dataType, requestOptions), response = await this._executeRequest(url, options), contentType = response.headers.get('content-type'); @@ -766,10 +773,11 @@ export default class SimpleApi { * @param method * @param data * @param dataType + * @param requestOptions * @returns {{method: *, headers: Headers, credentials: string}} * @private */ - _getRequestOptions(method, data, dataType) { + _getRequestOptions(method, data, dataType, requestOptions) { if(method === null || method === 'GET') method = data === null ? 'GET':'POST'; let headers = new Headers(); @@ -785,6 +793,12 @@ export default class SimpleApi { options.body = JSON.stringify(data); } + for(let key in requestOptions) { + if(!options.hasOwnProperty(key) && requestOptions.hasOwnProperty(key)) { + options[key] = requestOptions[key]; + } + } + return options; } |