UNPKG

@lakutata/core

Version:

Lakutata Framework Core

153 lines 5.82 kB
"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