test: add keys folder

This commit is contained in:
mahyargdz
2025-03-15 14:25:52 +03:30
parent 146c38025a
commit cb9860853e
8 changed files with 123 additions and 17 deletions
-1
View File
@@ -2,7 +2,6 @@
/dist /dist
/node_modules /node_modules
/build /build
/keys
# Logs # Logs
logs logs
+28
View File
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCb+gKyoUDyEX1M
y/hRfkQh4O/UpfMj4oUhp9n6BTUhaASZY/Xp57xXDX6PsjGX0N3tTFz0OFxZEHpk
PCoJhvdLfPnNps4iRrvA00GlMSZEquZX8TOKEDD4T3oqxy3Q8d43ZgXJ0+KYyd0E
PpWhFaJZKFAPgWSUhAqoFiu5rQ2S4iQWyFgvMLesBtxPwaQuRxscqsoiXJ65wIvD
Kbad3lRygj58qoMHX/clgQolFpmAWq2GiR4UE3hJX20xovN4kOTds2hMDFG09u24
nyZVMv0/SmHOOisbFPFXtJsA22YHdOubqghd4KpjjQC7L5lNQRWv6EPhfGzxMy+O
5Py+sx5VAgMBAAECggEAC06piWeVPLc13S5gNxAvQkF7QXAyWySdwB3Z+H0OJ/jR
dIlBl45cIfdxeFtTqwzSOdSyXGYFk9NU/BU8eupU3R0XQuhXwzZbgBQQizgv7QRy
pGdw9A5OboHcemNsF9yg3mVAACyjHa5snlUnJcFavpnki+s2bmnQF/VbgB9if4ZW
S07UsJCB6kyzuhDnBJYkB8Ibuxk5951hpegHy4KzfVwajBHe4iRT5IyfqtxxU1lZ
by3PISFqosjlvV2TrZlb3J4qllHkm3JRTD1XlGekb3f4o2geoIv4bimhz3tRJ3mS
tpPiNpJnOIQacNhn1Vjk03s0DfQGuqY75NyXkd8sVQKBgQDV5QtLfRf/d0RdAgfj
7AZYagd9izkpBky6OwJZwxabqSFQ4vMgOaMdVKchc0P/d5pdSWSSjkywDUp0RcDL
foNCt/yEfUeBWxGOqCvsBhEvflSEUFzSkvgIWLHI5HYdWJ1geEXAVFx00b/3bLpj
Zioug2w2bZLa0mjPsXBcqmIW+wKBgQC6rkGaVXXbq/hu4bWY85MdcWCsRrFilLhY
ECw6cqaVYchjpk10J0fQcl2kZfLr8rr9m2zymtDDX9TuPQPG7F1o7KZ/jvHrDxwh
cg1l3EtpCiqA5k2+qKBVPZ7Cv35px1HZQtPUz1fSDR9fXGwDiPhJtM7XqzFAuE5p
1A29GPbe7wKBgD9LHLGE3dIRt+AR1sXiNOp6zaafyRVTsOa2yXZIXWtIe/xUe/9A
Lv1h7GbglfGFsd8C9cjMZPL/q9WGQou07yCSEx4deEhV63ccWoroLLOyHU5d/Wmu
ZckKfelleXIro75FONa13/oNi1GrEeiR9c93wlDE0d0AwFUdO5OgM5B7AoGAa+is
nUTHMuruWVH5QeeSY5OVGSBoCx8CjE0U89gwOOtkBU4tOXY3SePCA3S2/fK6ajx8
tqQNBtKPaAM2+rbIrA0XlWaQqpp6XU7rNbUolhg9R3NY/1vECmHrMpG0xfpkcpzx
i/MqxY22U8491bFILHrqkbowZ0Pid8QPCP60PVsCgYAB83iEuuisaLoIC3fePm/1
7wuEisVAdLBnPf8ZhRpD6qdZkOlFHQFq4nnpEOkrW0GY0KLvPsVcE0zuak3kLaiy
9dS1qbfCD8T0wp/oqUXQ7p5GuoLAb2l7MMCQSwBKfAGrQm9gMyXjB05nhAQ0U+dE
qEe/CUjVZ2MsMb/Z9z8EfQ==
-----END PRIVATE KEY-----
+9
View File
@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm/oCsqFA8hF9TMv4UX5E
IeDv1KXzI+KFIafZ+gU1IWgEmWP16ee8Vw1+j7Ixl9Dd7Uxc9DhcWRB6ZDwqCYb3
S3z5zabOIka7wNNBpTEmRKrmV/EzihAw+E96Ksct0PHeN2YFydPimMndBD6VoRWi
WShQD4FklIQKqBYrua0NkuIkFshYLzC3rAbcT8GkLkcbHKrKIlyeucCLwym2nd5U
coI+fKqDB1/3JYEKJRaZgFqthokeFBN4SV9tMaLzeJDk3bNoTAxRtPbtuJ8mVTL9
P0phzjorGxTxV7SbANtmB3Trm6oIXeCqY40Auy+ZTUEVr+hD4Xxs8TMvjuT8vrMe
VQIDAQAB
-----END PUBLIC KEY-----
+2
View File
@@ -60,6 +60,7 @@
"dotenv": "^16.4.7", "dotenv": "^16.4.7",
"fastify": "^5.2.1", "fastify": "^5.2.1",
"handlebars": "^4.7.8", "handlebars": "^4.7.8",
"node-jose": "^2.2.0",
"nodemailer": "^6.9.16", "nodemailer": "^6.9.16",
"passport-jwt": "^4.0.1", "passport-jwt": "^4.0.1",
"pg": "^8.13.1", "pg": "^8.13.1",
@@ -77,6 +78,7 @@
"@types/bcrypt": "^5.0.2", "@types/bcrypt": "^5.0.2",
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
"@types/node": "^20.17.14", "@types/node": "^20.17.14",
"@types/node-jose": "^1.1.13",
"@types/nodemailer": "^6.4.17", "@types/nodemailer": "^6.4.17",
"@types/passport-jwt": "^4.0.1", "@types/passport-jwt": "^4.0.1",
"@types/supertest": "^6.0.2", "@types/supertest": "^6.0.2",
+61
View File
@@ -101,6 +101,9 @@ importers:
handlebars: handlebars:
specifier: ^4.7.8 specifier: ^4.7.8
version: 4.7.8 version: 4.7.8
node-jose:
specifier: ^2.2.0
version: 2.2.0
nodemailer: nodemailer:
specifier: ^6.9.16 specifier: ^6.9.16
version: 6.9.16 version: 6.9.16
@@ -144,6 +147,9 @@ importers:
'@types/node': '@types/node':
specifier: ^20.17.14 specifier: ^20.17.14
version: 20.17.15 version: 20.17.15
'@types/node-jose':
specifier: ^1.1.13
version: 1.1.13
'@types/nodemailer': '@types/nodemailer':
specifier: ^6.4.17 specifier: ^6.4.17
version: 6.4.17 version: 6.4.17
@@ -1505,6 +1511,9 @@ packages:
'@types/mjml@4.7.4': '@types/mjml@4.7.4':
resolution: {integrity: sha512-vyi1vzWgMzFMwZY7GSZYX0GU0dmtC8vLHwpgk+NWmwbwRSrlieVyJ9sn5elodwUfklJM7yGl0zQeet1brKTWaQ==} resolution: {integrity: sha512-vyi1vzWgMzFMwZY7GSZYX0GU0dmtC8vLHwpgk+NWmwbwRSrlieVyJ9sn5elodwUfklJM7yGl0zQeet1brKTWaQ==}
'@types/node-jose@1.1.13':
resolution: {integrity: sha512-QjMd4yhwy1EvSToQn0YI3cD29YhyfxFwj7NecuymjLys2/P0FwxWnkgBlFxCai6Y3aBCe7rbwmqwJJawxlgcXw==}
'@types/node@20.17.15': '@types/node@20.17.15':
resolution: {integrity: sha512-ymrDMpEhuYz7PXTItXhY0ZDBDZT/RgsmFM9rBiRLOSVX1HKJhhrLXuLY00fHsFsugYT1wZU3IC4dleUUC22UDQ==} resolution: {integrity: sha512-ymrDMpEhuYz7PXTItXhY0ZDBDZT/RgsmFM9rBiRLOSVX1HKJhhrLXuLY00fHsFsugYT1wZU3IC4dleUUC22UDQ==}
@@ -1891,6 +1900,10 @@ packages:
base64-js@1.5.1: base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
base64url@3.0.1:
resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
engines: {node: '>=6.0.0'}
bcrypt@5.1.1: bcrypt@5.1.1:
resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
@@ -2510,6 +2523,9 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
es6-promise@4.2.8:
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
escalade@3.2.0: escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -3736,6 +3752,9 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'} engines: {node: '>=18'}
long@5.3.1:
resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==}
lower-case@1.1.4: lower-case@1.1.4:
resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
@@ -4033,6 +4052,10 @@ packages:
encoding: encoding:
optional: true optional: true
node-forge@1.3.1:
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
engines: {node: '>= 6.13.0'}
node-gyp-build-optional-packages@5.2.2: node-gyp-build-optional-packages@5.2.2:
resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
hasBin: true hasBin: true
@@ -4040,6 +4063,9 @@ packages:
node-int64@0.4.0: node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
node-jose@2.2.0:
resolution: {integrity: sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw==}
node-releases@2.0.19: node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
@@ -4201,6 +4227,9 @@ packages:
package-json-from-dist@1.0.1: package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
pako@2.1.0:
resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
param-case@2.1.1: param-case@2.1.1:
resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
@@ -4407,6 +4436,10 @@ packages:
process-warning@4.0.1: process-warning@4.0.1:
resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
promise@7.3.1: promise@7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
@@ -7372,6 +7405,10 @@ snapshots:
'@types/mjml-core': 4.15.1 '@types/mjml-core': 4.15.1
optional: true optional: true
'@types/node-jose@1.1.13':
dependencies:
'@types/node': 20.17.15
'@types/node@20.17.15': '@types/node@20.17.15':
dependencies: dependencies:
undici-types: 6.19.8 undici-types: 6.19.8
@@ -7881,6 +7918,8 @@ snapshots:
base64-js@1.5.1: {} base64-js@1.5.1: {}
base64url@3.0.1: {}
bcrypt@5.1.1: bcrypt@5.1.1:
dependencies: dependencies:
'@mapbox/node-pre-gyp': 1.0.11 '@mapbox/node-pre-gyp': 1.0.11
@@ -8593,6 +8632,8 @@ snapshots:
is-date-object: 1.1.0 is-date-object: 1.1.0
is-symbol: 1.1.1 is-symbol: 1.1.1
es6-promise@4.2.8: {}
escalade@3.2.0: {} escalade@3.2.0: {}
escape-goat@3.0.0: escape-goat@3.0.0:
@@ -10205,6 +10246,8 @@ snapshots:
strip-ansi: 7.1.0 strip-ansi: 7.1.0
wrap-ansi: 9.0.0 wrap-ansi: 9.0.0
long@5.3.1: {}
lower-case@1.1.4: lower-case@1.1.4:
optional: true optional: true
@@ -10716,6 +10759,8 @@ snapshots:
dependencies: dependencies:
whatwg-url: 5.0.0 whatwg-url: 5.0.0
node-forge@1.3.1: {}
node-gyp-build-optional-packages@5.2.2: node-gyp-build-optional-packages@5.2.2:
dependencies: dependencies:
detect-libc: 2.0.3 detect-libc: 2.0.3
@@ -10723,6 +10768,18 @@ snapshots:
node-int64@0.4.0: {} node-int64@0.4.0: {}
node-jose@2.2.0:
dependencies:
base64url: 3.0.1
buffer: 6.0.3
es6-promise: 4.2.8
lodash: 4.17.21
long: 5.3.1
node-forge: 1.3.1
pako: 2.1.0
process: 0.11.10
uuid: 9.0.1
node-releases@2.0.19: {} node-releases@2.0.19: {}
nodemailer@6.9.16: {} nodemailer@6.9.16: {}
@@ -10903,6 +10960,8 @@ snapshots:
package-json-from-dist@1.0.1: {} package-json-from-dist@1.0.1: {}
pako@2.1.0: {}
param-case@2.1.1: param-case@2.1.1:
dependencies: dependencies:
no-case: 2.3.2 no-case: 2.3.2
@@ -11104,6 +11163,8 @@ snapshots:
process-warning@4.0.1: {} process-warning@4.0.1: {}
process@0.11.10: {}
promise@7.3.1: promise@7.3.1:
dependencies: dependencies:
asap: 2.0.6 asap: 2.0.6
+2 -12
View File
@@ -3,18 +3,8 @@ import Decimal from "decimal.js";
import { ValueTransformer } from "typeorm"; import { ValueTransformer } from "typeorm";
export class DecimalTransformer implements ValueTransformer { export class DecimalTransformer implements ValueTransformer {
// to(value: Decimal | string | number): string { to(value: Decimal | null): string | null {
// return new Decimal(value).toString(); return value ? value.toString() : "0";
// }
// from(value: string): number {
// return new Decimal(value).toNumber();
// }
to(value: Decimal | number | null): string | null {
if (value === null) return "0";
return value instanceof Decimal ? value.toString() : new Decimal(value).toString();
} }
from(value: string | null): number { from(value: string | null): number {
+16 -3
View File
@@ -1,11 +1,24 @@
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { ConfigService } from "@nestjs/config"; import { ConfigService } from "@nestjs/config";
import { JwtModuleAsyncOptions } from "@nestjs/jwt"; import { JwtModuleAsyncOptions } from "@nestjs/jwt";
export function jwtConfig(): JwtModuleAsyncOptions { export function jwtConfig(): JwtModuleAsyncOptions {
return { return {
inject: [ConfigService], inject: [ConfigService],
useFactory: (configService: ConfigService) => ({ useFactory: (configService: ConfigService) => {
secret: configService.getOrThrow<string>("JWT_SECRET_KEY"), const privateKeyPath = join(process.cwd(), "keys", "private.pem");
}), const publicKeyPath = join(process.cwd(), "keys", "public.pem");
return {
privateKey: readFileSync(privateKeyPath, "utf8"),
publicKey: readFileSync(publicKeyPath, "utf8"),
signOptions: {
algorithm: "RS256",
issuer: configService.getOrThrow<string>("JWT_ISSUER"),
},
};
},
}; };
} }
+5 -1
View File
@@ -1,3 +1,5 @@
import { readFileSync } from "fs";
import { Injectable } from "@nestjs/common"; import { Injectable } from "@nestjs/common";
import { ConfigService } from "@nestjs/config"; import { ConfigService } from "@nestjs/config";
import { PassportStrategy } from "@nestjs/passport"; import { PassportStrategy } from "@nestjs/passport";
@@ -12,7 +14,9 @@ export class JwtStrategy extends PassportStrategy(Strategy, JWT_STRATEGY_NAME) {
super({ super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false, ignoreExpiration: false,
secretOrKey: configService.getOrThrow<string>("JWT_SECRET_KEY"), secretOrKey: readFileSync(`${process.cwd()}/keys/public.pem`, "utf8"),
algorithms: ["RS256"],
issuer: configService.getOrThrow<string>("JWT_ISSUER"),
}); });
} }