implemented Secure password storage

This commit is contained in:
2025-05-19 16:33:52 +02:00
parent 873f25e150
commit e7aa855c1a
3 changed files with 39 additions and 3 deletions

View File

@@ -16,6 +16,7 @@
},
"dependencies": {
"@libsql/client": "^0.15.5",
"bcrypt": "^6.0.0",
"dotenv": "^16.5.0",
"dotenv-expand": "^12.0.2",
"drizzle-orm": "^0.43.1",
@@ -25,6 +26,7 @@
"devDependencies": {
"@antfu/eslint-config": "^4.13.0",
"@faker-js/faker": "^9.8.0",
"@types/bcrypt": "^5.0.2",
"@types/express": "^5.0.1",
"@types/node": "^22.15.17",
"drizzle-kit": "^0.31.1",

34
pnpm-lock.yaml generated
View File

@@ -11,6 +11,9 @@ importers:
'@libsql/client':
specifier: ^0.15.5
version: 0.15.5
bcrypt:
specifier: ^6.0.0
version: 6.0.0
dotenv:
specifier: ^16.5.0
version: 16.5.0
@@ -33,6 +36,9 @@ importers:
'@faker-js/faker':
specifier: ^9.8.0
version: 9.8.0
'@types/bcrypt':
specifier: ^5.0.2
version: 5.0.2
'@types/express':
specifier: ^5.0.1
version: 5.0.1
@@ -636,6 +642,9 @@ packages:
'@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
'@types/bcrypt@5.0.2':
resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==}
'@types/body-parser@1.19.5':
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
@@ -888,6 +897,10 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
bcrypt@6.0.0:
resolution: {integrity: sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==}
engines: {node: '>= 18'}
body-parser@2.2.0:
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
engines: {node: '>=18'}
@@ -1908,6 +1921,10 @@ packages:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
node-addon-api@8.3.1:
resolution: {integrity: sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==}
engines: {node: ^18 || ^20 || >= 21}
node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
@@ -1917,6 +1934,10 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
node-gyp-build@4.8.4:
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
@@ -2839,6 +2860,10 @@ snapshots:
tslib: 2.8.1
optional: true
'@types/bcrypt@5.0.2':
dependencies:
'@types/node': 22.15.17
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
@@ -3108,6 +3133,11 @@ snapshots:
balanced-match@1.0.2: {}
bcrypt@6.0.0:
dependencies:
node-addon-api: 8.3.1
node-gyp-build: 4.8.4
body-parser@2.2.0:
dependencies:
bytes: 3.1.2
@@ -4329,6 +4359,8 @@ snapshots:
negotiator@1.0.0: {}
node-addon-api@8.3.1: {}
node-domexception@1.0.0: {}
node-fetch@3.3.2:
@@ -4337,6 +4369,8 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
node-gyp-build@4.8.4: {}
node-releases@2.0.19: {}
nth-check@2.1.1:

View File

@@ -1,8 +1,8 @@
import { db } from "./config";
import { InsertPermission, InsertRole, InsertUser, RolePermissionInsert, UserRoleInsert } from "./domain";
import { permissionsTable, rolesPermissionsTable, rolesTable, usersRolesTable, usersTable } from "./schema";
import { createHash } from "node:crypto"
import { faker } from '@faker-js/faker';
import bcrypt from "bcrypt";
const permissions: InsertPermission[] = [
{name: "READ"},
@@ -29,13 +29,13 @@ const rolePermission: RolePermissionInsert[] = [
const users: InsertUser[] = faker.helpers.multiple(() => ({
name: faker.person.fullName(),
password: createHash('md5').update(faker.internet.password()).digest('hex'),
password: bcrypt.hashSync(faker.internet.password(), 10),
email: faker.internet.email()
}), {count: 10})
const exploitedUsers: InsertUser[] = faker.helpers.multiple(() => ({
name: faker.person.fullName(),
password: createHash('md5').update("P@ssword1").digest('hex'),
password: bcrypt.hashSync("P@ssword1", 10),
email: faker.internet.email()
}), { count: 5 })