@lakutata/core
Version:
Lakutata Framework Core
153 lines • 5.82 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Security = void 0;
const string_random_1 = __importDefault(require("string-random"));
const crypto_js_1 = require("crypto-js");
const sort_keys_1 = __importDefault(require("sort-keys"));
const bcryptjs_1 = require("bcryptjs");
const Plugin_1 = require("../base/Plugin");
const JSON_1 = require("./JSON");
const Crypto_1 = require("./Crypto");
const DependencyInjection_1 = require("../decorators/DependencyInjection");
class Security extends Plugin_1.Plugin {
constructor() {
super(...arguments);
this.saltRound = 8;
}
stringifyData(data) {
return typeof data === 'string' ? data : this.JSON.stringify((0, sort_keys_1.default)(this.JSON.parse(this.JSON.stringify(data)), { deep: true }));
}
generateRandomString(length = 16, options = {
numbers: true,
letters: true,
specials: false
}) {
return (0, string_random_1.default)(length, {
numbers: options.numbers === undefined ? true : options.numbers,
letters: options.letters === undefined ? true : options.letters,
specials: options.specials === undefined ? false : options.specials
});
}
MD5(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacMD5)(stringData, key).toString();
}
else {
return (0, crypto_js_1.MD5)(stringData).toString();
}
}
SHA1(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacSHA1)(stringData, key).toString();
}
else {
return (0, crypto_js_1.SHA1)(stringData).toString();
}
}
SHA3(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacSHA3)(stringData, key).toString();
}
else {
return (0, crypto_js_1.SHA3)(stringData).toString();
}
}
SHA224(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacSHA224)(stringData, key).toString();
}
else {
return (0, crypto_js_1.SHA224)(stringData).toString();
}
}
SHA256(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacSHA256)(stringData, key).toString();
}
else {
return (0, crypto_js_1.SHA256)(stringData).toString();
}
}
SHA384(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacSHA384)(stringData, key).toString();
}
else {
return (0, crypto_js_1.SHA384)(stringData).toString();
}
}
SHA512(data, key) {
const stringData = this.stringifyData(data);
if (key) {
return (0, crypto_js_1.HmacSHA512)(stringData, key).toString();
}
else {
return (0, crypto_js_1.SHA512)(stringData).toString();
}
}
encryptByPassword(data, password) {
const stringData = this.stringifyData(data);
return crypto_js_1.AES.encrypt(stringData, password).toString();
}
decryptByPassword(ciphertext, password) {
const decryptString = crypto_js_1.AES.decrypt(ciphertext, password).toString(crypto_js_1.enc.Utf8);
try {
return this.JSON.parse(decryptString);
}
catch (e) {
return decryptString;
}
}
encryptByKey(data, secretKey) {
return this.Crypto.encrypt(data, secretKey);
}
decryptByKey(ciphertext, secretKey) {
return this.Crypto.decrypt(ciphertext, secretKey);
}
generatePasswordHashSync(password) {
const salt = (0, bcryptjs_1.genSaltSync)(this.saltRound);
return (0, bcryptjs_1.hashSync)(password, salt);
}
async generatePasswordHash(password) {
const salt = await (0, bcryptjs_1.genSalt)(this.saltRound);
return await (0, bcryptjs_1.hash)(password, salt);
}
validatePasswordSync(password, hash) {
return (0, bcryptjs_1.compareSync)(password, hash);
}
async validatePassword(password, hash) {
return await (0, bcryptjs_1.compare)(password, hash);
}
}
__decorate([
(0, DependencyInjection_1.Inject)('JSON'),
__metadata("design:type", JSON_1.JSON)
], Security.prototype, "JSON", void 0);
__decorate([
(0, DependencyInjection_1.Inject)('Crypto'),
__metadata("design:type", Crypto_1.Crypto)
], Security.prototype, "Crypto", void 0);
__decorate([
(0, DependencyInjection_1.Configurable)(),
__metadata("design:type", Number)
], Security.prototype, "saltRound", void 0);
exports.Security = Security;
//# sourceMappingURL=Security.js.map