diff --git a/.env b/.env index eb0ae8a..3c07883 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ -CLIENT_ID = your_spotify_client_id_here -CLIENT_SECRET = your_spotify_client_secret_here -SESSION_SECRET = 'your_session_secret_string_here' -PORT = 9001 -TRUST_PROXY = 1 +SPOTMGR_CLIENT_ID = your_spotify_client_id_here +SPOTMGR_CLIENT_SECRET = your_spotify_client_secret_here +SPOTMGR_SESSION_SECRET = 'your_session_secret_string_here' +SPOTMGR_PORT = 9001 +SPOTMGR_TRUST_PROXY = 1 diff --git a/.env.development b/.env.development index 14b82b9..a35a038 100644 --- a/.env.development +++ b/.env.development @@ -1,5 +1,5 @@ -BASE_DOMAIN = 127.0.0.1 -REDIRECT_URI = http://127.0.0.1:9001/api/auth/callback -APP_URI = http://127.0.0.1:3000 -DB_URI = postgres://your_database_username:your_database_password@your_postgres_host:your_database_port/your_database_name -REDIS_URI = redis://your_redis_host:6379 +SPOTMGR_BASE_DOMAIN = 127.0.0.1 +SPOTMGR_REDIRECT_URI = http://127.0.0.1:9001/api/auth/callback +SPOTMGR_APP_URI = http://127.0.0.1:3000 +SPOTMGR_DB_URI = postgres://your_database_username:your_database_password@your_postgres_host:your_database_port/your_database_name +SPOTMGR_REDIS_URI = redis://your_redis_host:6379 diff --git a/.env.production b/.env.production index a54f3b3..446b130 100644 --- a/.env.production +++ b/.env.production @@ -1,5 +1,5 @@ -BASE_DOMAIN = domain.app -REDIRECT_URI = https://backend.app/api/auth/callback -APP_URI = https://frontend.app -DB_URI = postgres://your_database_username:your_database_password@your_postgres_host:your_database_port/your_database_name -REDIS_URI = redis://your_redis_host:6379 +SPOTMGR_BASE_DOMAIN = domain.app +SPOTMGR_REDIRECT_URI = https://backend.app/api/auth/callback +SPOTMGR_APP_URI = https://frontend.app +SPOTMGR_DB_URI = postgres://your_database_username:your_database_password@your_postgres_host:your_database_port/your_database_name +SPOTMGR_REDIS_URI = redis://your_redis_host:6379 diff --git a/api/axios.ts b/api/axios.ts index 132855a..7318d27 100644 --- a/api/axios.ts +++ b/api/axios.ts @@ -13,7 +13,7 @@ const authInstance: AxiosInstance = axios.create({ Authorization: "Basic " + Buffer.from( - process.env["CLIENT_ID"] + ":" + process.env["CLIENT_SECRET"] + process.env["SPOTMGR_CLIENT_ID"] + ":" + process.env["SPOTMGR_CLIENT_SECRET"] ).toString("base64"), }, }); diff --git a/config/redis.ts b/config/redis.ts index a12df41..a632cf7 100644 --- a/config/redis.ts +++ b/config/redis.ts @@ -2,12 +2,12 @@ import { createClient } from "redis"; import logger from "../utils/logger.ts"; -if (!process.env["REDIS_URI"]) +if (!process.env["SPOTMGR_REDIS_URI"]) throw new TypeError("Redis connection URI not defined"); // Initialize const redisClient: ReturnType = createClient({ - url: process.env["REDIS_URI"], + url: process.env["SPOTMGR_REDIS_URI"], socket: { keepAlive: 25 * 1000, // 25s connectTimeout: 15 * 1000, diff --git a/config/sequelize.ts b/config/sequelize.ts index 33f6711..2e1e392 100644 --- a/config/sequelize.ts +++ b/config/sequelize.ts @@ -10,13 +10,13 @@ type ConnConfigs = Record; // env-specific config const connConfigs: ConnConfigs = { development: { - use_env_variable: "DB_URI", + use_env_variable: "SPOTMGR_DB_URI", }, test: { - use_env_variable: "DB_URI", + use_env_variable: "SPOTMGR_DB_URI", }, production: { - use_env_variable: "DB_URI", + use_env_variable: "SPOTMGR_DB_URI", // dialectOptions: { // ssl: true, // }, diff --git a/controllers/auth.ts b/controllers/auth.ts index 16defd4..1890846 100644 --- a/controllers/auth.ts +++ b/controllers/auth.ts @@ -25,9 +25,9 @@ const login: RequestHandler = async (_req, res) => { `${accountsAPIURL}/authorize?` + new URLSearchParams({ response_type: "code", - client_id: process.env["CLIENT_ID"], + client_id: process.env["SPOTMGR_CLIENT_ID"], scope: Object.values(requiredScopes).join(" "), - redirect_uri: process.env["REDIRECT_URI"], + redirect_uri: process.env["SPOTMGR_REDIRECT_URI"], state: state, } as Record).toString() ); @@ -63,7 +63,7 @@ const callback: RequestHandler = async (req, res) => { const authForm = { code: code, - redirect_uri: process.env["REDIRECT_URI"], + redirect_uri: process.env["SPOTMGR_REDIRECT_URI"], grant_type: "authorization_code", } as Record; @@ -98,7 +98,7 @@ const callback: RequestHandler = async (req, res) => { }; // res.status(200).send({ message: "OK" }); - res.redirect(process.env["APP_URI"] + "?login=success"); + res.redirect(process.env["SPOTMGR_APP_URI"] + "?login=success"); logger.debug("New login.", { username: resp.data.display_name }); return null; } @@ -167,7 +167,7 @@ const logout: RequestHandler = async (req, res) => { } else { res.clearCookie(sessionName); // res.status(200).send({ message: "OK" }); - res.redirect(process.env["APP_URI"] + "?logout=success"); + res.redirect(process.env["SPOTMGR_APP_URI"] + "?logout=success"); logger.debug("Logged out.", { sessionID: delSession.id }); } }); diff --git a/index.ts b/index.ts index 0843b4c..275eb38 100644 --- a/index.ts +++ b/index.ts @@ -26,17 +26,17 @@ const app = express(); // check env vars if ( - isNaN(Number(process.env["TRUST_PROXY"])) || - ![0, 1].includes(Number(process.env["TRUST_PROXY"])) + isNaN(Number(process.env["SPOTMGR_TRUST_PROXY"])) || + ![0, 1].includes(Number(process.env["SPOTMGR_TRUST_PROXY"])) ) { - throw new TypeError("TRUST_PROXY must be 0 or 1"); + throw new TypeError("SPOTMGR_TRUST_PROXY must be 0 or 1"); } -if (!process.env["SESSION_SECRET"]) { - throw new TypeError("SESSION_SECRET cannot be undefined"); +if (!process.env["SPOTMGR_SESSION_SECRET"]) { + throw new TypeError("SPOTMGR_SESSION_SECRET cannot be undefined"); } // Enable this if you run behind a proxy (e.g. nginx) -app.set("trust proxy", process.env["TRUST_PROXY"]); +app.set("trust proxy", process.env["SPOTMGR_TRUST_PROXY"]); const redisStore = new RedisStore({ client: redisClient }); @@ -45,11 +45,11 @@ app.use( session({ name: sessionName, store: redisStore, - secret: process.env["SESSION_SECRET"], + secret: process.env["SPOTMGR_SESSION_SECRET"], resave: false, saveUninitialized: false, cookie: { - domain: process.env["BASE_DOMAIN"], + domain: process.env["SPOTMGR_BASE_DOMAIN"], httpOnly: true, // if true prevent client side JS from reading the cookie maxAge: 7 * 24 * 60 * 60 * 1000, // 1 week sameSite: process.env["NODE_ENV"] === "development" ? "lax" : "none", // cross-site for production @@ -60,7 +60,7 @@ app.use( app.use( cors({ - origin: process.env["APP_URI"], + origin: process.env["SPOTMGR_APP_URI"], credentials: true, }) ); @@ -121,7 +121,7 @@ app.use((req, res) => { return null; }); -const port = process.env["PORT"] || 5000; +const port = process.env["SPOTMGR_PORT"] || 5000; const server = app.listen(port, () => { logger.info(`App Listening on port ${port}`);