diff --git a/bun.lock b/bun.lock index bb95ab4..071a441 100644 --- a/bun.lock +++ b/bun.lock @@ -16,7 +16,6 @@ "cookie-parser": "1.4.5", "cors": "2.8.5", "csvtojson": "2.0.10", - "dotenv": "8.2.0", "express": "4.17.1", "glob": "^13.0.6", "jsonwebtoken": "8.5.1", @@ -31,7 +30,6 @@ "typeorm": "0.2.30", "typeorm-routing-controllers-extensions": "0.2.0", "typeorm-seeding": "1.6.1", - "uuid": "8.3.2", "validator": "13.5.2", }, "devDependencies": { @@ -1732,7 +1730,7 @@ "utils-merge": ["utils-merge@1.0.1", "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz", {}, "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="], - "uuid": ["uuid@8.3.2", "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz", { "bin": "dist/bin/uuid" }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "uuid": ["uuid@8.3.1", "", { "bin": "dist/bin/uuid" }, "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg=="], "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], @@ -2142,6 +2140,8 @@ "node-notifier/semver": ["semver@7.3.4", "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": "bin/semver.js" }, "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw=="], + "node-notifier/uuid": ["uuid@8.3.2", "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz", { "bin": "dist/bin/uuid" }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "normalize-package-data/semver": ["semver@5.7.1", "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz", { "bin": "bin/semver" }, "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="], "object-copy/define-property": ["define-property@0.2.5", "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz", { "dependencies": { "is-descriptor": "^0.1.0" } }, "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="], @@ -2176,8 +2176,6 @@ "release-it/semver": ["semver@7.3.2", "", { "bin": "bin/semver.js" }, "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="], - "release-it/uuid": ["uuid@8.3.1", "", { "bin": "dist/bin/uuid" }, "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg=="], - "request/form-data": ["form-data@2.3.3", "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="], "request/qs": ["qs@6.5.2", "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz", {}, "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="], diff --git a/ormconfig.js b/ormconfig.js index 3e24beb..7cc8b60 100644 --- a/ormconfig.js +++ b/ormconfig.js @@ -1,6 +1,3 @@ -const dotenv = require('dotenv'); -dotenv.config(); - module.exports = { type: process.env.DB_TYPE, host: process.env.DB_HOST, diff --git a/package.json b/package.json index 0b421f4..748474b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "cookie-parser": "1.4.5", "cors": "2.8.5", "csvtojson": "2.0.10", - "dotenv": "8.2.0", "express": "4.17.1", "glob": "^13.0.6", "jsonwebtoken": "8.5.1", @@ -48,7 +47,6 @@ "typeorm": "0.2.30", "typeorm-routing-controllers-extensions": "0.2.0", "typeorm-seeding": "1.6.1", - "uuid": "8.3.2", "validator": "13.5.2" }, "devDependencies": { diff --git a/src/config.ts b/src/config.ts index a09283d..5778d2e 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,9 +1,7 @@ import consola from 'consola'; -import { config as configDotenv } from 'dotenv'; import { CountryCode } from 'libphonenumber-js'; import ValidatorJS from 'validator'; -configDotenv(); export const config = { internal_port: parseInt(process.env.APP_PORT) || 4010, development: process.env.NODE_ENV === "production", @@ -22,15 +20,15 @@ export const config = { mailer_url: process.env.MAILER_URL || "", mailer_key: process.env.MAILER_KEY || "" } -let errors = 0 -if (typeof config.internal_port !== "number") { - consola.error("Error: APP_PORT is not a number") - errors++ -} -if (typeof config.development !== "boolean") { - consola.error("Error: NODE_ENV is not a boolean") - errors++ -} +let errors = 0 +if (typeof config.internal_port !== "number") { + consola.error("Error: APP_PORT is not a number") + errors++ +} +if (typeof config.development !== "boolean") { + consola.error("Error: NODE_ENV is not a boolean") + errors++ +} if (config.mailer_url == "" || config.mailer_key == "") { consola.error("Error: invalid mailer config") errors++; @@ -39,23 +37,23 @@ if (config.station_token_secret.length < 32) { consola.error("Error: STATION_TOKEN_SECRET must be set and at least 32 characters long") errors++; } -function getPhoneCodeLocale(): CountryCode { - return (process.env.PHONE_COUNTRYCODE as CountryCode); -} -function getPostalCodeLocale(): any { - try { - const stringArray: String[] = ValidatorJS.isPostalCodeLocales; - let index = stringArray.indexOf(process.env.POSTALCODE_COUNTRYCODE); - return ValidatorJS.isPostalCodeLocales[index]; - } catch (error) { - return null; - } -} -function getDataSeeding(): Boolean { - try { - return JSON.parse(process.env.SEED_TEST_DATA); - } catch (error) { - return false; - } -} +function getPhoneCodeLocale(): CountryCode { + return (process.env.PHONE_COUNTRYCODE as CountryCode); +} +function getPostalCodeLocale(): any { + try { + const stringArray: String[] = ValidatorJS.isPostalCodeLocales; + let index = stringArray.indexOf(process.env.POSTALCODE_COUNTRYCODE); + return ValidatorJS.isPostalCodeLocales[index]; + } catch (error) { + return null; + } +} +function getDataSeeding(): Boolean { + try { + return JSON.parse(process.env.SEED_TEST_DATA); + } catch (error) { + return false; + } +} export let e = errors \ No newline at end of file diff --git a/src/models/actions/create/CreateRunnerOrganization.ts b/src/models/actions/create/CreateRunnerOrganization.ts index 8aba1f4..437f87c 100644 --- a/src/models/actions/create/CreateRunnerOrganization.ts +++ b/src/models/actions/create/CreateRunnerOrganization.ts @@ -1,5 +1,4 @@ import { IsBoolean, IsObject, IsOptional } from 'class-validator'; -import * as uuid from 'uuid'; import { Address } from '../../entities/Address'; import { RunnerOrganization } from '../../entities/RunnerOrganization'; import { CreateRunnerGroup } from './CreateRunnerGroup'; @@ -35,7 +34,7 @@ export class CreateRunnerOrganization extends CreateRunnerGroup { Address.validate(newRunnerOrganization.address); if (this.registrationEnabled) { - newRunnerOrganization.key = uuid.v4().toUpperCase(); + newRunnerOrganization.key = crypto.randomUUID() } return newRunnerOrganization; diff --git a/src/models/actions/create/CreateScanStation.ts b/src/models/actions/create/CreateScanStation.ts index bda4d80..21a3b5c 100644 --- a/src/models/actions/create/CreateScanStation.ts +++ b/src/models/actions/create/CreateScanStation.ts @@ -1,7 +1,6 @@ import { IsBoolean, IsInt, IsOptional, IsPositive, IsString } from 'class-validator'; import crypto from 'crypto'; import { getConnection } from 'typeorm'; -import * as uuid from 'uuid'; import { config } from '../../../config'; import { TrackNotFoundError } from '../../../errors/TrackErrors'; import { ScanStation } from '../../entities/ScanStation'; @@ -42,7 +41,7 @@ export class CreateScanStation { newStation.enabled = this.enabled; newStation.track = await this.getTrack(); - let newUUID = uuid.v4().toUpperCase(); + let newUUID = crypto.randomUUID().toUpperCase(); newStation.prefix = crypto.createHash("sha3-512").update(newUUID).digest('hex').substring(0, 7).toUpperCase(); newStation.cleartextkey = newStation.prefix + "." + newUUID; newStation.key = crypto.createHmac("sha256", config.station_token_secret).update(newStation.cleartextkey).digest('hex'); diff --git a/src/models/actions/create/CreateStatsClient.ts b/src/models/actions/create/CreateStatsClient.ts index 604e118..6444f80 100644 --- a/src/models/actions/create/CreateStatsClient.ts +++ b/src/models/actions/create/CreateStatsClient.ts @@ -1,7 +1,6 @@ import * as Bun from 'bun'; import { IsOptional, IsString } from 'class-validator'; import crypto from 'crypto'; -import * as uuid from 'uuid'; import { StatsClient } from '../../entities/StatsClient'; /** @@ -23,7 +22,7 @@ export class CreateStatsClient { newClient.description = this.description; - let newUUID = uuid.v4().toUpperCase(); + let newUUID = crypto.randomUUID().toUpperCase(); newClient.prefix = crypto.createHash("sha3-512").update(newUUID).digest('hex').substring(0, 7).toUpperCase(); newClient.key = await Bun.password.hash(newClient.prefix + "." + newUUID); newClient.cleartextkey = newClient.prefix + "." + newUUID; diff --git a/src/models/actions/create/CreateUser.ts b/src/models/actions/create/CreateUser.ts index 14f1413..422664d 100644 --- a/src/models/actions/create/CreateUser.ts +++ b/src/models/actions/create/CreateUser.ts @@ -2,7 +2,6 @@ import * as Bun from 'bun'; import { passwordStrength } from "check-password-strength"; import { IsBoolean, IsEmail, IsNotEmpty, IsOptional, IsPhoneNumber, IsString, IsUrl } from 'class-validator'; import { getConnectionManager } from 'typeorm'; -import * as uuid from 'uuid'; import { config } from '../../../config'; import { PasswordMustContainLowercaseLetterError, PasswordMustContainNumberError, PasswordMustContainUppercaseLetterError, PasswordTooShortError, UserEmailNeededError, UsernameContainsIllegalCharacterError } from '../../../errors/UserErrors'; import { UserGroupNotFoundError } from '../../../errors/UserGroupErrors'; @@ -108,7 +107,7 @@ export class CreateUser { newUser.firstname = this.firstname newUser.middlename = this.middlename newUser.lastname = this.lastname - newUser.uuid = uuid.v4() + newUser.uuid = crypto.randomUUID() newUser.phone = this.phone newUser.password = Bun.password.hash(this.password + newUser.uuid); newUser.groups = await this.getGroups(); diff --git a/src/models/actions/update/UpdateRunnerOrganization.ts b/src/models/actions/update/UpdateRunnerOrganization.ts index 52afbbb..aa98965 100644 --- a/src/models/actions/update/UpdateRunnerOrganization.ts +++ b/src/models/actions/update/UpdateRunnerOrganization.ts @@ -1,5 +1,4 @@ import { IsBoolean, IsInt, IsObject, IsOptional } from 'class-validator'; -import * as uuid from 'uuid'; import { Address } from '../../entities/Address'; import { RunnerOrganization } from '../../entities/RunnerOrganization'; import { CreateRunnerGroup } from '../create/CreateRunnerGroup'; @@ -42,7 +41,7 @@ export class UpdateRunnerOrganization extends CreateRunnerGroup { Address.validate(organization.address); if (this.registrationEnabled && !organization.key) { - organization.key = uuid.v4().toUpperCase(); + organization.key = crypto.randomUUID().toUpperCase(); } else { organization.key = null; diff --git a/src/seeds/SeedUsers.ts b/src/seeds/SeedUsers.ts index 38d1583..05a379f 100644 --- a/src/seeds/SeedUsers.ts +++ b/src/seeds/SeedUsers.ts @@ -1,7 +1,6 @@ import * as Bun from 'bun'; import { Connection } from 'typeorm'; import { Factory, Seeder } from 'typeorm-seeding'; -import * as uuid from 'uuid'; import { CreatePermission } from '../models/actions/create/CreatePermission'; import { CreateUserGroup } from '../models/actions/create/CreateUserGroup'; import { Permission } from '../models/entities/Permission'; @@ -32,7 +31,7 @@ export default class SeedUsers implements Seeder { initialUser.firstname = "demo"; initialUser.lastname = "demo"; initialUser.username = "demo"; - initialUser.uuid = uuid.v4(); + initialUser.uuid = crypto.randomUUID(); initialUser.password = await Bun.password.hash("demo" + initialUser.uuid); initialUser.email = "demo@dev.lauf-fuer-kaya.de" initialUser.groups = [group];