diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-01-04 22:00:49 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-01-04 22:00:49 +0300 |
commit | 60df1a02f674572194335796158a0cf9177f2d93 (patch) | |
tree | 835098d81055fb6fdb731caeb0bc10bb3db6bced | |
parent | 71c19da108a1efc82bcb52fd5c1aa7aa55fe6b7f (diff) |
Fix issues with defect custom field data
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
-rw-r--r-- | src/ClassLoader/BasicClassLoader.js | 2 | ||||
-rw-r--r-- | src/ClassLoader/DefaultClassLoader.js | 7 | ||||
-rw-r--r-- | src/Client/BasicPasswordsClient.js | 7 | ||||
-rw-r--r-- | src/Converter/CustomFieldConverter.js | 15 | ||||
-rw-r--r-- | src/Logger/Logger.js | 68 | ||||
-rw-r--r-- | src/Model/CustomField/DefectField.js | 14 |
6 files changed, 106 insertions, 7 deletions
diff --git a/src/ClassLoader/BasicClassLoader.js b/src/ClassLoader/BasicClassLoader.js index 5f0cf36..d4ef1e8 100644 --- a/src/ClassLoader/BasicClassLoader.js +++ b/src/ClassLoader/BasicClassLoader.js @@ -3,7 +3,7 @@ import ObjectMerger from "../Utility/ObjectMerger"; export default class BasicClassLoader { constructor(classes = {}) { - this._classes = ObjectMerger.merge(this._getDefaultClasses(), classes); + this._classes = Object.assign(this._getDefaultClasses(), classes); this._instances = {}; } diff --git a/src/ClassLoader/DefaultClassLoader.js b/src/ClassLoader/DefaultClassLoader.js index 18c5dbd..d749664 100644 --- a/src/ClassLoader/DefaultClassLoader.js +++ b/src/ClassLoader/DefaultClassLoader.js @@ -64,6 +64,8 @@ import ConfigurationError from "../Exception/ConfigruationError"; import MissingEncryptionKeyError from "../Exception/Encryption/MissingEncryptionKeyError"; import InvalidEncryptedTextLength from "../Exception/Encryption/InvalidEncryptedTextLength"; import HashService from "../Services/HashService"; +import Logger from "../Logger/Logger"; +import DefectField from "../Model/CustomField/DefectField"; export default class DefaultClassLoader extends BasicClassLoader { @@ -102,6 +104,7 @@ export default class DefaultClassLoader extends BasicClassLoader { 'model.secretField': SecretField, 'model.textField' : TextField, 'model.urlField' : UrlField, + 'model.defectField': DefectField, 'model.setting' : Setting, 'network.request' : ApiRequest, @@ -120,10 +123,12 @@ export default class DefaultClassLoader extends BasicClassLoader { 'keychain.csev1': (k, p) => { return new CSEv1Keychain(this.getInstance('classes'), k, p); }, - 'service.hash' : () => { return new HashService(this.getInstance('classes')); }, + 'service.hash' : () => { return new HashService(this.getInstance('classes')); }, 'service.model' : () => { return new ModelService(this.getInstance('classes')); }, 'service.password': () => { return new PasswordService(this.getInstance('client')); }, + 'logger': Logger, + 'cache.cache': Cache, 'state.boolean': BooleanState, diff --git a/src/Client/BasicPasswordsClient.js b/src/Client/BasicPasswordsClient.js index f313211..a0411e3 100644 --- a/src/Client/BasicPasswordsClient.js +++ b/src/Client/BasicPasswordsClient.js @@ -66,6 +66,13 @@ export default class BasicPasswordsClient { } /** + * @returns {Logger} + */ + getLogger() { + return this._classes.getInstance('logger'); + } + + /** * @returns {Boolean} */ isAuthorized() { diff --git a/src/Converter/CustomFieldConverter.js b/src/Converter/CustomFieldConverter.js index c4bbda1..f9aca65 100644 --- a/src/Converter/CustomFieldConverter.js +++ b/src/Converter/CustomFieldConverter.js @@ -1,10 +1,10 @@ export default class CustomFieldConverter { /** - * @param {BasicPasswordsClient} api + * @param {BasicPasswordsClient} client */ - constructor(api) { - this._api = api; + constructor(client) { + this._client = client; } /** @@ -31,9 +31,14 @@ export default class CustomFieldConverter { * @api */ fromObject(object) { + if(!object.hasOwnProperty('type') || object.type === null) { + this._client.getLogger().warning('Ignoring invalid custom field data', {field: object}); + this._client.getClass(`model.defectField`, {label:'##ERROR##', value:JSON.stringify(object)}) + } + let type = object.type; - return this._api.getClass(`model.${type}Field`, object); + return this._client.getClass(`model.${type}Field`, object); } /** @@ -48,7 +53,7 @@ export default class CustomFieldConverter { fields.push(this.fromObject(field)); } - return this._api.getClass('collection.field', fields); + return this._client.getClass('collection.field', fields); } /** diff --git a/src/Logger/Logger.js b/src/Logger/Logger.js new file mode 100644 index 0000000..646da36 --- /dev/null +++ b/src/Logger/Logger.js @@ -0,0 +1,68 @@ +export default class Logger { + + /** + * @returns {Number} + */ + get logLevel() { + return this._logLevel; + } + + /** + * @param {Number} value + */ + set logLevel(value) { + this._logLevel = value; + } + + /** + * @param {Number} [logLevel=0] + */ + constructor(logLevel = 0) { + this._logLevel = logLevel; + } + + /** + * @param {String} message + * @param {Object} [context={}] + */ + debug(message, context = {}) { + if(this._logLevel > 0) return; + console.debug(message, context); + } + + /** + * @param {String} message + * @param {Object} [context={}] + */ + info(message, context = {}) { + if(this._logLevel > 1) return; + console.info(message, context); + } + + /** + * @param {String} message + * @param {Object} [context={}] + */ + log(message, context = {}) { + if(this._logLevel > 2) return; + console.log(message, context); + } + + /** + * @param {String} message + * @param {Object} [context={}] + */ + warning(message, context = {}) { + if(this._logLevel > 3) return; + console.warn(message, context); + } + + /** + * @param {String} message + * @param {Object} [context={}] + */ + error(message, context = {}) { + if(this._logLevel > 4) return; + console.error(message, context); + } +}
\ No newline at end of file diff --git a/src/Model/CustomField/DefectField.js b/src/Model/CustomField/DefectField.js new file mode 100644 index 0000000..773f311 --- /dev/null +++ b/src/Model/CustomField/DefectField.js @@ -0,0 +1,14 @@ +import AbstractField from './AbstractField'; +import Properties from '../../Configuration/TextField.json'; + +export default class DefectField extends AbstractField { + + /** + * + * @param {object} data + */ + constructor(data) { + data.type = 'defect'; + super(Properties, data); + } +}
\ No newline at end of file |