diff --git a/src/_staart/config.ts b/src/_staart/config.ts index 18050bece..06f629f80 100644 --- a/src/_staart/config.ts +++ b/src/_staart/config.ts @@ -19,70 +19,6 @@ cosmicSync("staart"); export const bool = (booleanValue?: string | boolean) => String(booleanValue).toLowerCase() === "true"; -// Email -export const ALLOW_DISPOSABLE_EMAILS = bool(process.env.DISPOSABLE_EMAIL); -export const TEST_EMAIL = process.env.TEST_EMAIL || "staart@mailinator.com"; -/// If you want to use AWS SES to send emails: -export const SES_EMAIL = process.env.SES_EMAIL || ""; -export const SES_REGION = process.env.SES_REGION || "eu-west-1"; -export const SES_ACCESS = process.env.SES_ACCESS || ""; -export const SES_SECRET = process.env.SES_SECRET || ""; -/// If you want to use SMTP to send emails: -export const EMAIL_FROM = process.env.EMAIL_FROM || ""; -export const EMAIL_HOST = process.env.EMAIL_HOST || ""; -export const EMAIL_PASSWORD = process.env.EMAIL_PASSWORD || ""; - -// Auth and tokens -export const JWT_SECRET = process.env.JWT_SECRET || "staart"; -export const JWT_ISSUER = process.env.JWT_ISSUER || "staart"; -export const SERVICE_2FA = process.env.SERVICE_2FA || "staart"; -export const HASH_IDS = process.env.HASH_IDS || "staart"; -export const HASH_ID_PREFIX = process.env.HASH_ID_PREFIX || "d0e8a7c-"; - -export const TOKEN_EXPIRY_EMAIL_VERIFICATION = - process.env.TOKEN_EXPIRY_EMAIL_VERIFICATION || "7d"; -export const TOKEN_EXPIRY_PASSWORD_RESET = - process.env.TOKEN_EXPIRY_PASSWORD_RESET || "1d"; -export const TOKEN_EXPIRY_LOGIN = process.env.TOKEN_EXPIRY_LOGIN || "15m"; -export const TOKEN_EXPIRY_APPROVE_LOCATION = - process.env.TOKEN_EXPIRY_APPROVE_LOCATION || "10m"; -export const TOKEN_EXPIRY_REFRESH = process.env.TOKEN_EXPIRY_REFRESH || "30d"; -export const DISALLOW_OPEN_CORS = bool(process.env.DISALLOW_OPEN_CORS); - -// OAuth2 credentials -export const GOOGLE_CLIENT_ID = process.env.GOOGLE_CLIENT_ID || ""; -export const GOOGLE_CLIENT_SECRET = process.env.GOOGLE_CLIENT_SECRET || ""; -export const GITHUB_CLIENT_ID = process.env.GITHUB_CLIENT_ID || ""; -export const GITHUB_CLIENT_SECRET = process.env.GITHUB_CLIENT_SECRET || ""; -export const MICROSOFT_CLIENT_ID = process.env.MICROSOFT_CLIENT_ID || ""; -export const MICROSOFT_CLIENT_SECRET = - process.env.MICROSOFT_CLIENT_SECRET || ""; -export const FACEBOOK_CLIENT_ID = process.env.FACEBOOK_CLIENT_ID || ""; -export const FACEBOOK_CLIENT_SECRET = process.env.FACEBOOK_CLIENT_SECRET || ""; -export const SALESFORCE_CLIENT_ID = process.env.SALESFORCE_CLIENT_ID || ""; -export const SALESFORCE_CLIENT_SECRET = - process.env.SALESFORCE_CLIENT_SECRET || ""; - -// Payments and billing -export const STRIPE_SECRET_KEY = process.env.STRIPE_SECRET_KEY || ""; -export const STRIPE_WEBHOOK_SECRET = process.env.STRIPE_WEBHOOK_SECRET || ""; -export const STRIPE_PRODUCT_ID = process.env.STRIPE_PRODUCT_ID || ""; - -// Tracking -export const AWS_ELASTIC_ACCESS_KEY = process.env.AWS_ELASTIC_ACCESS_KEY || ""; -export const AWS_ELASTIC_SECRET_KEY = process.env.AWS_ELASTIC_SECRET_KEY || ""; -export const AWS_ELASTIC_HOST = process.env.AWS_ELASTIC_HOST || ""; -export const AWS_ELASTIC_REGION = process.env.AWS_ELASTIC_REGION || ""; -export const ELASTIC_HOST = process.env.ELASTIC_HOST || ""; -export const ELASTIC_LOG = process.env.ELASTIC_LOG || ""; -export const ELASTIC_API_VERSION = process.env.ELASTIC_API_VERSION || "7.2"; -export const ELASTIC_LOGS_INDEX = - process.env.ELASTIC_LOGS_INDEX || "staart-logs"; -export const ELASTIC_EVENTS_INDEX = - process.env.ELASTIC_EVENTS_INDEX || "staart-events"; -export const ELASTIC_INSTANCES_INDEX = - process.env.ELASTIC_INSTANCES_INDEX || "staart-instances"; - export const ScopesUser = { ...BaseScopesUser }; export const ScopesGroup = { ...BaseScopesGroup }; export const ScopesAdmin = { ...BaseScopesAdmin }; diff --git a/src/_staart/helpers/authorization.ts b/src/_staart/helpers/authorization.ts index ceb7f2e44..4394ad5c6 100644 --- a/src/_staart/helpers/authorization.ts +++ b/src/_staart/helpers/authorization.ts @@ -1,10 +1,10 @@ +import { Model, newEnforcer, StringAdapter } from "casbin"; +import { join } from "path"; +import { ScopesAdmin, ScopesGroup, ScopesUser } from "../config"; import { getUserById } from "../services/user.service"; import { AccessTokenResponse, ApiKeyResponse } from "./jwt"; -import { newEnforcer, Model, StringAdapter } from "casbin"; import { prisma } from "./prisma"; -import { ScopesUser, ScopesGroup, ScopesAdmin } from "../config"; import { twtToId } from "./utils"; -import { join } from "path"; /** * You should not overwrite these scopes diff --git a/src/_staart/helpers/jwt.ts b/src/_staart/helpers/jwt.ts index 0a09c1866..912d66787 100644 --- a/src/_staart/helpers/jwt.ts +++ b/src/_staart/helpers/jwt.ts @@ -1,3 +1,4 @@ +import { config } from "@anandchowdhary/cosmic"; import { users } from "@prisma/client"; import { IP_RANGE_CHECK_FAIL, @@ -10,15 +11,6 @@ import { import { redis } from "@staart/redis"; import { ipRangeCheck, randomString } from "@staart/text"; import { decode, sign, verify } from "jsonwebtoken"; -import { - JWT_ISSUER, - JWT_SECRET, - TOKEN_EXPIRY_APPROVE_LOCATION, - TOKEN_EXPIRY_EMAIL_VERIFICATION, - TOKEN_EXPIRY_LOGIN, - TOKEN_EXPIRY_PASSWORD_RESET, - TOKEN_EXPIRY_REFRESH, -} from "../config"; import { EventType, Templates, Tokens } from "../interfaces/enum"; import { Locals } from "../interfaces/general"; import { @@ -29,11 +21,15 @@ import { import { getGeolocationFromIp } from "./location"; import { mail } from "./mail"; import { prisma } from "./prisma"; -import { - deleteSensitiveInfoUser, - includesDomainInCommaList, - removeFalsyValues, -} from "./utils"; +import { includesDomainInCommaList } from "./utils"; + +const JWT_ISSUER = config("jwtIssuer"); +const JWT_SECRET = config("jwtSecret"); +const TOKEN_EXPIRY_APPROVE_LOCATION = config("tokenExpiryApproveLocation"); +const TOKEN_EXPIRY_EMAIL_VERIFICATION = config("tokenExpiryEmailVerification"); +const TOKEN_EXPIRY_LOGIN = config("tokenExpiryLogin"); +const TOKEN_EXPIRY_PASSWORD_RESET = config("tokenExpiryPasswordReset"); +const TOKEN_EXPIRY_REFRESH = config("tokenExpiryRefresh"); /** * Generate a new JWT diff --git a/src/_staart/helpers/webhooks.ts b/src/_staart/helpers/webhooks.ts index 9fbb7b073..c61cafe6e 100644 --- a/src/_staart/helpers/webhooks.ts +++ b/src/_staart/helpers/webhooks.ts @@ -2,12 +2,13 @@ import { logError } from "@staart/errors"; import { redisQueue } from "@staart/redis"; import axios from "axios"; import { createHmac } from "crypto"; -import { JWT_ISSUER } from "../config"; import { Webhooks } from "../interfaces/enum"; import { webhooks } from "@prisma/client"; import { prisma } from "./prisma"; import { config } from "@anandchowdhary/cosmic"; +const JWT_ISSUER = config("jwtIssuer"); + const WEBHOOK_QUEUE = `${config("redisQueuePrefix")}-webhooks`; let queueSetup = false; diff --git a/src/_staart/rest/admin.ts b/src/_staart/rest/admin.ts index 7ab4abb30..5effef303 100644 --- a/src/_staart/rest/admin.ts +++ b/src/_staart/rest/admin.ts @@ -1,3 +1,4 @@ +import { config } from "@anandchowdhary/cosmic"; import { couponCodesUpdateInput } from "@prisma/client"; import { cleanElasticSearchQueryResponse, @@ -6,8 +7,8 @@ import { import { INSUFFICIENT_PERMISSION } from "@staart/errors"; import { getEvents } from "@staart/payments"; import { ms, randomString } from "@staart/text"; -import { ELASTIC_LOGS_INDEX, ScopesAdmin } from "../config"; -import { can, Acts } from "../helpers/authorization"; +import { ScopesAdmin } from "../config"; +import { Acts, can } from "../helpers/authorization"; import { couponCodeJwt } from "../helpers/jwt"; import { paginatedResult, @@ -15,6 +16,8 @@ import { queryParamsToSelect, } from "../helpers/prisma"; +const ELASTIC_LOGS_INDEX = config("elasticLogsIndex"); + export const getAllGroupForUser = async ( tokenUserId: number, queryParams: any diff --git a/src/_staart/rest/auth.ts b/src/_staart/rest/auth.ts index ddea0f00f..006b63584 100644 --- a/src/_staart/rest/auth.ts +++ b/src/_staart/rest/auth.ts @@ -17,8 +17,8 @@ import { } from "@staart/errors"; import { compare, hash } from "@staart/text"; import { authenticator } from "otplib"; -import { ALLOW_DISPOSABLE_EMAILS, ScopesAdmin } from "../config"; -import { can, Acts } from "../helpers/authorization"; +import { ScopesAdmin } from "../config"; +import { Acts, can } from "../helpers/authorization"; import { deleteItemFromCache } from "../helpers/cache"; import { checkInvalidatedToken, @@ -45,6 +45,8 @@ import { resendEmailVerification, } from "../services/user.service"; +const ALLOW_DISPOSABLE_EMAILS = config("allowDisposableEmails"); + export const validateRefreshToken = async ( token: string, locals: Locals | any diff --git a/src/_staart/rest/group.ts b/src/_staart/rest/group.ts index d73d9e1d4..d6bc97c12 100644 --- a/src/_staart/rest/group.ts +++ b/src/_staart/rest/group.ts @@ -1,3 +1,4 @@ +import { config } from "@anandchowdhary/cosmic"; import { apiKeysCreateInput, apiKeysUpdateInput, @@ -49,8 +50,8 @@ import { } from "@staart/payments"; import { randomString } from "@staart/text"; import axios from "axios"; -import { JWT_ISSUER, ScopesGroup, ScopesUser } from "../config"; -import { can, Acts } from "../helpers/authorization"; +import { ScopesGroup, ScopesUser } from "../config"; +import { Acts, can } from "../helpers/authorization"; import { deleteItemFromCache } from "../helpers/cache"; import { ApiKeyResponse, @@ -79,6 +80,8 @@ import { import { getUserById } from "../services/user.service"; import { register } from "./auth"; +const JWT_ISSUER = config("jwtIssuer"); + export const getGroupForUser = async ( userId: number | ApiKeyResponse, groupId: number diff --git a/src/_staart/rest/user.ts b/src/_staart/rest/user.ts index 5a897fba3..d53e1aae2 100644 --- a/src/_staart/rest/user.ts +++ b/src/_staart/rest/user.ts @@ -1,3 +1,4 @@ +import { config } from "@anandchowdhary/cosmic"; import { accessTokensCreateInput, accessTokensUpdateInput, @@ -23,22 +24,17 @@ import { deleteCustomer } from "@staart/payments"; import { compare, hash, randomString } from "@staart/text"; import { authenticator } from "otplib"; import { toDataURL } from "qrcode"; -import { - ALLOW_DISPOSABLE_EMAILS, - SERVICE_2FA, - ScopesUser, - ScopesGroup, -} from "../config"; -import { can, Acts } from "../helpers/authorization"; +import { ScopesGroup, ScopesUser } from "../config"; +import { Acts, can } from "../helpers/authorization"; import { deleteItemFromCache } from "../helpers/cache"; -import { ApiKeyResponse, couponCodeJwt } from "../helpers/jwt"; -import { mail } from "../helpers/mail"; +import { ApiKeyResponse } from "../helpers/jwt"; import { paginatedResult, prisma, queryParamsToSelect, } from "../helpers/prisma"; import { trackEvent } from "../helpers/tracking"; +import { PartialBy } from "../helpers/utils"; import { EventType } from "../interfaces/enum"; import { Locals } from "../interfaces/general"; import { @@ -49,7 +45,9 @@ import { resendEmailVerification, } from "../services/user.service"; import { deleteGroupForUser } from "./group"; -import { PartialBy } from "../helpers/utils"; + +const ALLOW_DISPOSABLE_EMAILS = config("allowDisposableEmails"); +const SERVICE_2FA = config("service_2Fa"); export const getUserFromIdForUser = async ( userId: number, diff --git a/src/_staart/services/group.service.ts b/src/_staart/services/group.service.ts index 8b802f0f2..8f6b18aeb 100644 --- a/src/_staart/services/group.service.ts +++ b/src/_staart/services/group.service.ts @@ -1,5 +1,5 @@ +import { config } from "@anandchowdhary/cosmic"; import { - apiKeysCreateInput, apiKeysUpdateInput, domainsCreateInput, groups, @@ -18,7 +18,6 @@ import { import { capitalizeFirstAndLastLetter, ms, randomString } from "@staart/text"; import axios from "axios"; import randomColor from "randomcolor"; -import { ELASTIC_LOGS_INDEX, JWT_ISSUER } from "../config"; import { deleteItemFromCache, getItemFromCache, @@ -27,6 +26,9 @@ import { import { prisma } from "../helpers/prisma"; import { KeyValue } from "../interfaces/general"; +const ELASTIC_LOGS_INDEX = config("elasticLogsIndex"); +const JWT_ISSUER = config("jwtIssuer"); + /* * Create a new group for a user */ diff --git a/src/crons/daily.ts b/src/crons/daily.ts index b389ccb9a..63c34f57b 100644 --- a/src/crons/daily.ts +++ b/src/crons/daily.ts @@ -1,7 +1,8 @@ +import { config } from "@anandchowdhary/cosmic"; import { elasticSearch, elasticSearchEnabled } from "@staart/elasticsearch"; import { ms } from "@staart/text"; import { CronJob } from "cron"; -import { ELASTIC_LOGS_INDEX } from "../_staart/config"; +const ELASTIC_LOGS_INDEX = config("elasticLogsIndex"); export default () => { new CronJob( diff --git a/src/crons/hourly.ts b/src/crons/hourly.ts index 34c74dbcf..63c2b10e1 100644 --- a/src/crons/hourly.ts +++ b/src/crons/hourly.ts @@ -1,7 +1,8 @@ +import { config } from "@anandchowdhary/cosmic"; import { ms } from "@staart/text"; import { CronJob } from "cron"; -import { TOKEN_EXPIRY_REFRESH } from "../_staart/config"; import { prisma } from "../_staart/helpers/prisma"; +const TOKEN_EXPIRY_REFRESH = config("tokenExpiryRefresh"); export default () => { new CronJob( diff --git a/src/crons/minute.ts b/src/crons/minute.ts index dea3f8222..036996a7a 100644 --- a/src/crons/minute.ts +++ b/src/crons/minute.ts @@ -1,6 +1,5 @@ import { error } from "@staart/errors"; import { CronJob } from "cron"; -import { ELASTIC_EVENTS_INDEX, ELASTIC_LOGS_INDEX } from "../_staart/config"; import { elasticSearchIndex, receiveElasticSearchMessage, @@ -16,6 +15,9 @@ import { IdValues } from "../_staart/helpers/utils"; import { receiveWebhookMessage } from "../_staart/helpers/webhooks"; import { config } from "@anandchowdhary/cosmic"; +const ELASTIC_EVENTS_INDEX = config("elasticEventsIndex"); +const ELASTIC_LOGS_INDEX = config("elasticLogsIndex"); + /** * We run this cron job every minute in production * but every 10 seconds in development diff --git a/src/init-tests.ts b/src/init-tests.ts index 764fbec88..6d017c4cb 100644 --- a/src/init-tests.ts +++ b/src/init-tests.ts @@ -1,6 +1,5 @@ import { logError, success, warn, info } from "@staart/errors"; import { sendMail, setupTransporter } from "@staart/mail"; -import { ELASTIC_INSTANCES_INDEX, TEST_EMAIL } from "./_staart/config"; import { elasticSearchIndex } from "./_staart/helpers/elasticsearch"; import { receiveEmailMessage } from "./_staart/helpers/mail"; import { prisma } from "./_staart/helpers/prisma"; @@ -11,6 +10,9 @@ import { init } from "@sentry/node"; import pkg from "../package.json"; import { config } from "@anandchowdhary/cosmic"; +const ELASTIC_INSTANCES_INDEX = config("elasticInstancesIndex"); +const TEST_EMAIL = config("testEmail"); + if (config("sentryDsn")) init({ dsn: config("sentryDsn") }); let numberOfFailedTests = 0;