crypto-browser-storage
Version:
☢ A simple package for secure local storage data by encryption using Crypto.JS
91 lines • 9.16 kB
JavaScript
import { Inject, Injectable, InjectionToken } from '@angular/core';
import * as CryptoJS from "crypto-js";
import { SecureStorage } from './secure-storage';
import * as i0 from "@angular/core";
export const CRYPTO_HASH_KEY = new InjectionToken('CRYPTO_HASH_KEY');
export class CryptoBrowserStorageService {
secureStorage;
constructor(cryptoHashKey) {
this.secureStorage = new SecureStorage(localStorage, {
hash: function hash(key) {
//@ts-ignore
key = CryptoJS.SHA256(key, cryptoHashKey);
return key.toString();
},
encrypt: function encrypt(data) {
data = CryptoJS.AES.encrypt(data, cryptoHashKey);
data = data.toString();
return data;
},
decrypt: function decrypt(data) {
data = CryptoJS.AES.decrypt(data, cryptoHashKey);
data = data.toString(CryptoJS.enc.Utf8);
return data;
},
});
}
/**
* Set data to localstorage via key
* @param {any} key:string
* @param {any} data: any
* @returns {void} void
*/
setCache(key, data) {
try {
if (data) {
this.secureStorage.setItem(key, data);
}
else {
console.log(`Something went wrong to set ${key} cached`);
}
}
catch (error) {
console.log(`Error : "${key}" Set Cache:`, error);
}
}
/**
* Get localstorage data via key
* @param {any} key:string
* @returns {any} any: number | string | object | array
*/
getCache(key) {
try {
return this.secureStorage.getItem(key);
}
catch (error) {
console.log('Key not found in localstorage or maybe wrong key.');
}
}
/**
* It will remove stored local storage data via key
* @param {any} key:string
* @returns {void} void
*/
removeCacheByKey(key) {
try {
this.secureStorage.removeItem(key);
}
catch (error) {
console.error('Key not found in localstorage or maybe wrong key.');
}
}
/**
* It behave like native localstorage clear() function. It will clear all cache including pre-existing localstorage data.
* @returns {void} void
*/
clearAllCache() {
localStorage.clear();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CryptoBrowserStorageService, deps: [{ token: CRYPTO_HASH_KEY }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CryptoBrowserStorageService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CryptoBrowserStorageService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [CRYPTO_HASH_KEY]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLWJyb3dzZXItc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY3J5cHRvLWJyb3dzZXItc3RvcmFnZS9zcmMvbGliL2NyeXB0by1icm93c2VyLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUNqRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUs3RSxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLGFBQWEsQ0FBd0I7SUFFN0MsWUFBcUMsYUFBb0I7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxZQUFZLEVBQUU7WUFDbkQsSUFBSSxFQUFFLFNBQVMsSUFBSSxDQUFDLEdBQVE7Z0JBQzFCLFlBQVk7Z0JBQ1osR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBRUQsT0FBTyxFQUFFLFNBQVMsT0FBTyxDQUFDLElBQVM7Z0JBQ2pDLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ2pELElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sRUFBRSxTQUFTLE9BQU8sQ0FBQyxJQUFTO2dCQUNqQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSSxRQUFRLENBQUMsR0FBVyxFQUFFLElBQVM7UUFDcEMsSUFBSTtZQUNGLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN2QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixHQUFHLFNBQVMsQ0FBQyxDQUFDO2FBQzFEO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFHRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLEdBQVc7UUFDekIsSUFBSTtZQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFHRDs7OztPQUlHO0lBRUksZ0JBQWdCLENBQUMsR0FBVztRQUNqQyxJQUFJO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFHRDs7O09BR0c7SUFDSSxhQUFhO1FBQ2xCLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO3VHQTlFVSwyQkFBMkIsa0JBR2xCLGVBQWU7MkdBSHhCLDJCQUEyQixjQUYxQixNQUFNOzsyRkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFJYyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tIFwiY3J5cHRvLWpzXCI7XG5pbXBvcnQgeyBTZWN1cmVTdG9yYWdlIH0gZnJvbSAnLi9zZWN1cmUtc3RvcmFnZSc7XG5leHBvcnQgY29uc3QgQ1JZUFRPX0hBU0hfS0VZID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0NSWVBUT19IQVNIX0tFWScpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDcnlwdG9Ccm93c2VyU3RvcmFnZVNlcnZpY2Uge1xuICBwcml2YXRlIHNlY3VyZVN0b3JhZ2UgOiB0eXBlb2YgU2VjdXJlU3RvcmFnZTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENSWVBUT19IQVNIX0tFWSkgY3J5cHRvSGFzaEtleTpzdHJpbmcgKXtcbiAgICB0aGlzLnNlY3VyZVN0b3JhZ2UgPSBuZXcgU2VjdXJlU3RvcmFnZShsb2NhbFN0b3JhZ2UsIHtcbiAgICAgIGhhc2g6IGZ1bmN0aW9uIGhhc2goa2V5OiBhbnkpIHtcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGtleSA9IENyeXB0b0pTLlNIQTI1NihrZXksIGNyeXB0b0hhc2hLZXkpO1xuICAgICAgICByZXR1cm4ga2V5LnRvU3RyaW5nKCk7XG4gICAgICB9LFxuICBcbiAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIGVuY3J5cHQoZGF0YTogYW55KSB7XG4gICAgICAgIGRhdGEgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChkYXRhLCBjcnlwdG9IYXNoS2V5KTtcbiAgICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9LFxuICBcbiAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIGRlY3J5cHQoZGF0YTogYW55KSB7XG4gICAgICAgIGRhdGEgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChkYXRhLCBjcnlwdG9IYXNoS2V5KTtcbiAgICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBkYXRhIHRvIGxvY2Fsc3RvcmFnZSB2aWEga2V5XG4gICAqIEBwYXJhbSB7YW55fSBrZXk6c3RyaW5nXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhOiBhbnlcbiAgICogQHJldHVybnMge3ZvaWR9IHZvaWRcbiAgICovXG4gIHB1YmxpYyBzZXRDYWNoZShrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2VjdXJlU3RvcmFnZS5zZXRJdGVtKGtleSwgZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgU29tZXRoaW5nIHdlbnQgd3JvbmcgdG8gc2V0ICR7a2V5fSBjYWNoZWRgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coYEVycm9yIDogXCIke2tleX1cIiBTZXQgQ2FjaGU6YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldCBsb2NhbHN0b3JhZ2UgZGF0YSB2aWEga2V5XG4gICAqIEBwYXJhbSB7YW55fSBrZXk6c3RyaW5nXG4gICAqIEByZXR1cm5zIHthbnl9IGFueTogbnVtYmVyIHwgc3RyaW5nIHwgb2JqZWN0IHwgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBnZXRDYWNoZShrZXk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWN1cmVTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ0tleSBub3QgZm91bmQgaW4gbG9jYWxzdG9yYWdlIG9yIG1heWJlIHdyb25nIGtleS4nKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBJdCB3aWxsIHJlbW92ZSBzdG9yZWQgbG9jYWwgc3RvcmFnZSBkYXRhIHZpYSBrZXlcbiAgICogQHBhcmFtIHthbnl9IGtleTpzdHJpbmdcbiAgICogQHJldHVybnMge3ZvaWR9IHZvaWRcbiAgICovXG5cbiAgcHVibGljIHJlbW92ZUNhY2hlQnlLZXkoa2V5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWN1cmVTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignS2V5IG5vdCBmb3VuZCBpbiBsb2NhbHN0b3JhZ2Ugb3IgbWF5YmUgd3Jvbmcga2V5LicpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEl0IGJlaGF2ZSBsaWtlIG5hdGl2ZSBsb2NhbHN0b3JhZ2UgY2xlYXIoKSBmdW5jdGlvbi4gSXQgd2lsbCBjbGVhciBhbGwgY2FjaGUgaW5jbHVkaW5nIHByZS1leGlzdGluZyBsb2NhbHN0b3JhZ2UgZGF0YS5cbiAgICogQHJldHVybnMge3ZvaWR9IHZvaWRcbiAgICovXG4gIHB1YmxpYyBjbGVhckFsbENhY2hlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICB9XG5cbn1cbiJdfQ==