Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,15 @@ Here is the list of all the supported values `UserAgent|ScreenPrint|Plugins|Font
secureLocalStorage.setItem("string", "12");
secureLocalStorage.setItem("boolean", true);
let value = secureLocalStorage.getItem("boolean");

console.log("secureSessionStorage", secureSessionStorage);
secureSessionStorage.setItem("object", {
message: "This is testing of local storage",
});
secureSessionStorage.setItem("number", 12);
secureSessionStorage.setItem("string", "12");
secureSessionStorage.setItem("boolean", true);
let value2 = secureSessionStorage.getItem("boolean");
}, []);

return (
Expand All @@ -158,6 +167,8 @@ Regular bug fixes and https://github.com/sushinpv/react-secure-storage/issues/39

## Whats new | Previous?

Added secureSessionStorage support

Added support for Vite and Next.js environment variables

Now you can disable individual fingerprint generation properties, This is discussed in the following enhancement https://github.com/sushinpv/react-secure-storage/issues/14
Expand Down
51 changes: 51 additions & 0 deletions dist/StorageHelpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _encryption = _interopRequireDefault(require("./encryption"));
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const KEY_PREFIX = (0, _utils.getSecurePrefix)();

/**
* Function to preload all the storage data
* @returns
*/
const getAllStorageItems = (storage, _encrypt) => {
const storageItems = {};
for (const [key, value] of Object.entries(storage)) {
if (key.startsWith(KEY_PREFIX)) {
let keyType = key.replace(KEY_PREFIX, "")[0];
let parsedKey = key.replace(/[.][bjns][.]/, ".");
let decryptedValue = _encryption.default.decrypt(value);
let parsedValue = null;
if (decryptedValue != null) switch (keyType) {
case "b":
parsedValue = decryptedValue === "true";
break;
case "j":
try {
parsedValue = JSON.parse(decryptedValue);
} catch {
parsedValue = null;
}
break;
case "n":
try {
parsedValue = Number(decryptedValue);
} catch {
parsedValue = null;
}
break;
default:
parsedValue = decryptedValue;
}
storageItems[parsedKey] = parsedValue;
}
}
return storageItems;
};
var _default = getAllStorageItems;
exports.default = _default;
69 changes: 22 additions & 47 deletions dist/encryption.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,67 +4,42 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;

var _encUtf = _interopRequireDefault(require("crypto-js/enc-utf8"));

var _aes = _interopRequireDefault(require("crypto-js/aes"));

var _fingerprint = _interopRequireDefault(require("./fingerprint"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

/**
* EncryptionService
*/
var EncryptionService = /*#__PURE__*/function () {
function EncryptionService() {
_classCallCheck(this, EncryptionService);

_defineProperty(this, "secureKey", "");

this.secureKey = (0, _fingerprint.default)();
class EncryptionService {
static secureKey = "";
constructor() {
EncryptionService.secureKey = (0, _fingerprint.default)();
}

/**
* Function to encrypt data
* @param value
* @returns
*/
static encrypt(value) {
return _aes.default.encrypt(value, this.secureKey).toString();
}


_createClass(EncryptionService, [{
key: "encrypt",
value: function encrypt(value) {
return _aes.default.encrypt(value, this.secureKey).toString();
}
/**
* Function to decrypt data
* @param value
* @returns
*/

}, {
key: "decrypt",
value: function decrypt(value) {
try {
var bytes = _aes.default.decrypt(value, this.secureKey);

return bytes.toString(_encUtf.default) || null;
} catch (ex) {
return null;
}
/**
* Function to decrypt data
* @param value
* @returns
*/
static decrypt(value) {
try {
var bytes = _aes.default.decrypt(value, this.secureKey);
return bytes.toString(_encUtf.default) || null;
} catch (ex) {
return null;
}
}]);

return EncryptionService;
}();

}
}
;
var _default = EncryptionService;
exports.default = _default;
41 changes: 15 additions & 26 deletions dist/envHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,80 +4,69 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var SUPPORTED_PREFIX = ["", "REACT_APP_", "NEXT_PUBLIC_", "VITE_"];

const SUPPORTED_PREFIX = ["", "REACT_APP_", "NEXT_PUBLIC_", "VITE_"];
/**
* Function to get SECURE_LOCAL_STORAGE_HASH_KEY
* @returns
*/
var getHashKey = function getHashKey() {
var value = null;

const getHashKey = () => {
let value = null;
try {
if (typeof Cypress != "undefined") {
value = Cypress.env("SECURE_LOCAL_STORAGE_HASH_KEY") || Cypress.env("REACT_APP_SECURE_LOCAL_STORAGE_HASH_KEY") || Cypress.env("NEXT_PUBLIC_SECURE_LOCAL_STORAGE_HASH_KEY") || Cypress.env("VITE_SECURE_LOCAL_STORAGE_HASH_KEY");
} else if (typeof process.env != "undefined") {
value = process.env.SECURE_LOCAL_STORAGE_HASH_KEY || process.env.REACT_APP_SECURE_LOCAL_STORAGE_HASH_KEY || process.env.NEXT_PUBLIC_SECURE_LOCAL_STORAGE_HASH_KEY || process.env.VITE_SECURE_LOCAL_STORAGE_HASH_KEY;
} else {
console.warn("react-secure-storage : process is not defined! Just a warning!");
console.warn(`react-secure-storage : process is not defined! Just a warning!`);
}
} catch (ex) {
return null;
}

return value;
};

/**
* Function to get SECURE_LOCAL_STORAGE_PREFIX
* @returns
*/


var getStoragePrefix = function getStoragePrefix() {
var value = null;

const getStoragePrefix = () => {
let value = null;
try {
if (typeof Cypress != "undefined") {
value = Cypress.env("SECURE_LOCAL_STORAGE_PREFIX") || Cypress.env("REACT_APP_SECURE_LOCAL_STORAGE_PREFIX") || Cypress.env("NEXT_PUBLIC_SECURE_LOCAL_STORAGE_PREFIX") || Cypress.env("VITE_SECURE_LOCAL_STORAGE_PREFIX");
} else if (typeof process.env != "undefined") {
value = process.env.SECURE_LOCAL_STORAGE_PREFIX || process.env.REACT_APP_SECURE_LOCAL_STORAGE_PREFIX || process.env.NEXT_PUBLIC_SECURE_LOCAL_STORAGE_PREFIX || process.env.VITE_SECURE_LOCAL_STORAGE_PREFIX;
} else {
console.warn("react-secure-storage : process is not defined! Just a warning!");
console.warn(`react-secure-storage : process is not defined! Just a warning!`);
}
} catch (ex) {
return null;
}

return value;
};
/**
* Function to get SECURE_LOCAL_STORAGE_DISABLED_KEYS
* @returns
*/


var getDisabledKeys = function getDisabledKeys() {
var value = null;

const getDisabledKeys = () => {
let value = null;
try {
if (typeof Cypress != "undefined") {
value = Cypress.env("SECURE_LOCAL_STORAGE_DISABLED_KEYS") || Cypress.env("REACT_APP_SECURE_LOCAL_STORAGE_DISABLED_KEYS") || Cypress.env("NEXT_PUBLIC_SECURE_LOCAL_STORAGE_DISABLED_KEYS") || Cypress.env("VITE_SECURE_LOCAL_STORAGE_DISABLED_KEYS");
} else if (typeof process.env != "undefined") {
value = process.env.SECURE_LOCAL_STORAGE_DISABLED_KEYS || process.env.REACT_APP_SECURE_LOCAL_STORAGE_DISABLED_KEYS || process.env.NEXT_PUBLIC_SECURE_LOCAL_STORAGE_DISABLED_KEYS || process.env.VITE_SECURE_LOCAL_STORAGE_DISABLED_KEYS;
} else {
console.warn("react-secure-storage : process is not defined! Just a warning!");
console.warn(`react-secure-storage : process is not defined! Just a warning!`);
}
} catch (ex) {
return null;
}

return value;
};

var envHelper = {
getHashKey: getHashKey,
getStoragePrefix: getStoragePrefix,
getDisabledKeys: getDisabledKeys
const envHelper = {
getHashKey,
getStoragePrefix,
getDisabledKeys
};
var _default = envHelper;
exports.default = _default;
14 changes: 5 additions & 9 deletions dist/fingerprint.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,21 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;

var _envHelper = _interopRequireDefault(require("./envHelper"));

var _fingerprint = _interopRequireDefault(require("./fingerprint.lib"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/* eslint-disable no-undef */
var HASH_KEY = "E86E2612010258B35137";

const HASH_KEY = "E86E2612010258B35137";

/**
* Function to get browser finger print
* @returns
*/

var getFingerprint = function getFingerprint() {
var HASH_KEY_CUSTOM = _envHelper.default.getHashKey() || HASH_KEY;
const getFingerprint = () => {
let HASH_KEY_CUSTOM = _envHelper.default.getHashKey() || HASH_KEY;
if (typeof window === "undefined") return HASH_KEY_CUSTOM;
return _fingerprint.default.getFingerprint() + HASH_KEY_CUSTOM;
};

var _default = getFingerprint;
exports.default = _default;
Loading