diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-01-09 22:05:37 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-01-09 22:05:37 +0300 |
commit | 6444dd8308ae7740f56e8ffb964c4b81bc9032c0 (patch) | |
tree | 51bb29c6fabfdb56a4792b7e05406dd277ce6203 /src/Repositories | |
parent | 486c710a36cec6e17b18c37243255bc8af317d11 (diff) |
Added tag and folder repository
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src/Repositories')
-rw-r--r-- | src/Repositories/FolderRepository.js | 113 | ||||
-rw-r--r-- | src/Repositories/PasswordRepository.js | 10 | ||||
-rw-r--r-- | src/Repositories/TagRepository.js | 113 |
3 files changed, 236 insertions, 0 deletions
diff --git a/src/Repositories/FolderRepository.js b/src/Repositories/FolderRepository.js new file mode 100644 index 0000000..82c5e5d --- /dev/null +++ b/src/Repositories/FolderRepository.js @@ -0,0 +1,113 @@ +import Folder from '../Model/Folder'; + +export default class FolderRepository { + + /** + * + * @param {Server} server + * @param {Cache} cache + */ + constructor(server, cache) { + this._server = server; + this._cache = cache; + } + + /** + * + * @return {FolderRepository} + */ + clearCache() { + this._cache.clear(); + + return this; + } + + /** + * + * @param {Folder} folder + * @returns {Promise<Folder>} + */ + async create(folder) { + } + + /** + * + * @param {Folder} folder + * @returns {Promise<Folder>} + */ + async update(folder) { + + } + + /** + * + * @param {Folder} folder + * @returns {Promise<Folder>} + */ + async delete(folder) { + + } + + /** + * + * @param id + * @returns {Promise<Folder>} + */ + async findById(id) { + if(this._cache.has(id)) { + return this._cache.get(id); + } + + let request = this._server.createRequest() + .setPath('api/1.0/folder/show') + .setData({id}); + + let response = await request.send(), + folder = await this._dataToModel(response.getData()); + + this._cache.set(folder.getId(), folder, 'folder'); + + return folder; + } + + /** + * + * @returns {Promise<[Folder]>} + */ + async findAll() { + if(this._cache.has('folders.list')) { + return this._cache.getByType('folder'); + } + + let request = this._server.createRequest() + .setPath('api/1.0/folder/list'); + + let response = await request.send(); + let folders = response.getData(); + + let result = []; + for(let data of folders) { + result.push(await this._dataToModel(data)); + } + this._cache.set('folders.list', true); + + return result; + } + + /** + * + * @param {Object} data + * @returns {Promise<Folder>} + * @private + */ + async _dataToModel(data) { + if(data.cseType === 'CSEv1r1') { + data = await this._server.getCseV1Encryption().decrypt(data, 'folder'); + } + + let folder = new Folder(this._server, data); + this._cache.set(folder.getId(), folder, 'folder'); + + return folder + } +}
\ No newline at end of file diff --git a/src/Repositories/PasswordRepository.js b/src/Repositories/PasswordRepository.js index 2924087..50b5f8a 100644 --- a/src/Repositories/PasswordRepository.js +++ b/src/Repositories/PasswordRepository.js @@ -14,6 +14,16 @@ export default class PasswordRepository { /** * + * @return {PasswordRepository} + */ + clearCache() { + this._cache.clear(); + + return this; + } + + /** + * * @param {Password} password * @returns {Promise<Password>} */ diff --git a/src/Repositories/TagRepository.js b/src/Repositories/TagRepository.js new file mode 100644 index 0000000..7a3665c --- /dev/null +++ b/src/Repositories/TagRepository.js @@ -0,0 +1,113 @@ +import Tag from '../Model/Tag'; + +export default class TagRepository { + + /** + * + * @param {Server} server + * @param {Cache} cache + */ + constructor(server, cache) { + this._server = server; + this._cache = cache; + } + + /** + * + * @return {TagRepository} + */ + clearCache() { + this._cache.clear(); + + return this; + } + + /** + * + * @param {Tag} tag + * @returns {Promise<Tag>} + */ + async create(tag) { + } + + /** + * + * @param {Tag} tag + * @returns {Promise<Tag>} + */ + async update(tag) { + + } + + /** + * + * @param {Tag} tag + * @returns {Promise<Tag>} + */ + async delete(tag) { + + } + + /** + * + * @param id + * @returns {Promise<Tag>} + */ + async findById(id) { + if(this._cache.has(id)) { + return this._cache.get(id); + } + + let request = this._server.createRequest() + .setPath('api/1.0/tag/show') + .setData({id}); + + let response = await request.send(), + tag = await this._dataToModel(response.getData()); + + this._cache.set(tag.getId(), tag, 'tag'); + + return tag; + } + + /** + * + * @returns {Promise<[Tag]>} + */ + async findAll() { + if(this._cache.has('tags.list')) { + return this._cache.getByType('tag'); + } + + let request = this._server.createRequest() + .setPath('api/1.0/tag/list'); + + let response = await request.send(); + let tags = response.getData(); + + let result = []; + for(let data of tags) { + result.push(await this._dataToModel(data)); + } + this._cache.set('tags.list', true); + + return result; + } + + /** + * + * @param {Object} data + * @returns {Promise<Tag>} + * @private + */ + async _dataToModel(data) { + if(data.cseType === 'CSEv1r1') { + data = await this._server.getCseV1Encryption().decrypt(data, 'tag'); + } + + let tag = new Tag(this._server, data); + this._cache.set(tag.getId(), tag, 'tag'); + + return tag + } +}
\ No newline at end of file |