Skip to content
This repository has been archived by the owner on Apr 19, 2023. It is now read-only.

Commit

Permalink
♻️ Use config helpr instead of imports
Browse files Browse the repository at this point in the history
  • Loading branch information
AnandChowdhary committed Sep 30, 2020
1 parent d563db2 commit 733f923
Show file tree
Hide file tree
Showing 13 changed files with 51 additions and 104 deletions.
64 changes: 0 additions & 64 deletions src/_staart/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
6 changes: 3 additions & 3 deletions src/_staart/helpers/authorization.ts
Original file line number Diff line number Diff line change
@@ -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
Expand Down
24 changes: 10 additions & 14 deletions src/_staart/helpers/jwt.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { config } from "@anandchowdhary/cosmic";
import { users } from "@prisma/client";
import {
IP_RANGE_CHECK_FAIL,
Expand All @@ -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 {
Expand All @@ -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
Expand Down
3 changes: 2 additions & 1 deletion src/_staart/helpers/webhooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
7 changes: 5 additions & 2 deletions src/_staart/rest/admin.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { config } from "@anandchowdhary/cosmic";
import { couponCodesUpdateInput } from "@prisma/client";
import {
cleanElasticSearchQueryResponse,
Expand All @@ -6,15 +7,17 @@ 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,
prisma,
queryParamsToSelect,
} from "../helpers/prisma";

const ELASTIC_LOGS_INDEX = config("elasticLogsIndex");

export const getAllGroupForUser = async (
tokenUserId: number,
queryParams: any
Expand Down
6 changes: 4 additions & 2 deletions src/_staart/rest/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down
7 changes: 5 additions & 2 deletions src/_staart/rest/group.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { config } from "@anandchowdhary/cosmic";
import {
apiKeysCreateInput,
apiKeysUpdateInput,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
18 changes: 8 additions & 10 deletions src/_staart/rest/user.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { config } from "@anandchowdhary/cosmic";
import {
accessTokensCreateInput,
accessTokensUpdateInput,
Expand All @@ -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 {
Expand All @@ -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,
Expand Down
6 changes: 4 additions & 2 deletions src/_staart/services/group.service.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { config } from "@anandchowdhary/cosmic";
import {
apiKeysCreateInput,
apiKeysUpdateInput,
domainsCreateInput,
groups,
Expand All @@ -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,
Expand All @@ -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
*/
Expand Down
3 changes: 2 additions & 1 deletion src/crons/daily.ts
Original file line number Diff line number Diff line change
@@ -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(
Expand Down
3 changes: 2 additions & 1 deletion src/crons/hourly.ts
Original file line number Diff line number Diff line change
@@ -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<string>("tokenExpiryRefresh");

export default () => {
new CronJob(
Expand Down
4 changes: 3 additions & 1 deletion src/crons/minute.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/init-tests.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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<string>("sentryDsn") });

let numberOfFailedTests = 0;
Expand Down

0 comments on commit 733f923

Please sign in to comment.