kemono2/client/configs/vars.js
2024-11-26 00:11:49 +01:00

168 lines
5.0 KiB
JavaScript

// @ts-check
const path = require("path");
const fs = require("fs");
/**
* @typedef IConfiguration
* @property {string} site
* @property {string} [sentry_dsn_js]
* @property {boolean} development_mode
* @property {boolean} automatic_migrations
* @property {IServerConfig} webserver
* @property {IArchiveServerConfig} [archive_server]
*/
/**
* @typedef IServerConfig
* @property {IUIConfig} ui
* @property {number} port
* @property {string} [base_url]
*/
/**
* @typedef IUIConfig
* @property {IHomeConfig} home
* @property {{paysite_list: string[], artists_or_creators: string}} config
* @property {IMatomoConfig} [matomo]
* @property {ISidebarConfig} [sidebar]
* @property {unknown[]} sidebar_items
* @property {unknown[]} [footer_items]
* @property {IBannerConfig} [banner]
* @property {IAdsConfig} [ads]
*/
/**
* @typedef IMatomoConfig
* @property {boolean} enabled
* @property {string} plain_code b64-encoded string
* @property {string} tracking_domain
* @property {string} tracking_code
* @property {string} site_id
*/
/**
* @typedef ISidebarConfig
* @property {boolean} [disable_dms]
* @property {boolean} [disable_faq]
* @property {boolean} [disable_filehaus]
*/
/**
* @typedef IBannerConfig
* @property {string} [global] b64-encoded string
* @property {string} [welcome] b64-encoded string
*/
/**
* @typedef IHomeConfig
* @property {string} [site_name]
* @property {string} [mascot_path]
* @property {string} [logo_path]
* @property {string} [welcome_credits] b64-encoded string
* @property {string} [home_background_image]
* @property {{ title: string, date: string, content: string }[]} [announcements]
*/
/**
* @typedef IAdsConfig
* @property {string} [header] b64-encoded string
* @property {string} [middle] b64-encoded string
* @property {string} [footer] b64-encoded string
* @property {string} [slider] b64-encoded string
* @property {string} [video] b64-encoded JSON string
*/
/**
* @typedef IArchiveServerConfig
* @property {boolean} [enabled]
*/
const configuration = getConfiguration();
const apiServerBaseURL = configuration.webserver.base_url;
const sentryDSN = configuration.sentry_dsn_js;
const apiServerPort = !apiServerBaseURL
? undefined
: configuration.webserver.port;
const siteName = configuration.webserver.ui.home.site_name || "Kemono";
const homeBackgroundImage =
configuration.webserver.ui.home.home_background_image;
const homeMascotPath = configuration.webserver.ui.home.mascot_path;
const homeLogoPath = configuration.webserver.ui.home.logo_path;
const homeWelcomeCredits = configuration.webserver.ui.home.welcome_credits;
const homeAnnouncements = configuration.webserver.ui.home.announcements;
// TODO: in development it should point to webpack server
const kemonoSite = configuration.site || "http://localhost:5000";
const paysiteList = configuration.webserver.ui.config.paysite_list;
const artistsOrCreators =
configuration.webserver.ui.config.artists_or_creators ?? "Artists";
const disableDMs = configuration.webserver.ui.sidebar?.disable_dms ?? true;
const disableFAQ = configuration.webserver.ui.sidebar?.disable_faq ?? true;
const disableFilehaus =
configuration.webserver.ui.sidebar?.disable_filehaus ?? true;
const sidebarItems = configuration.webserver.ui.sidebar_items;
const footerItems = configuration.webserver.ui.footer_items;
const bannerGlobal = configuration.webserver.ui.banner?.global;
const bannerWelcome = configuration.webserver.ui.banner?.welcome;
const headerAd = configuration.webserver.ui.ads?.header;
const middleAd = configuration.webserver.ui.ads?.middle;
const footerAd = configuration.webserver.ui.ads?.footer;
const sliderAd = configuration.webserver.ui.ads?.slider;
const videoAd = configuration.webserver.ui.ads?.video;
const isArchiveServerEnabled = configuration.archive_server?.enabled ?? false;
const analyticsEnabled = configuration.webserver.ui.matomo?.enabled ?? false;
const analyticsCode = configuration.webserver.ui.matomo?.plain_code;
const iconsPrepend = process.env.ICONS_PREPEND || "";
const bannersPrepend = process.env.BANNERS_PREPEND || "";
const thumbnailsPrepend = process.env.THUMBNAILS_PREPEND || "";
const creatorsLocation = process.env.CREATORS_LOCATION || "";
/**
* @TODO config validation
* @returns {IConfiguration}
*/
function getConfiguration() {
const configPath = path.resolve(__dirname, "..", "..", "config.json");
// TODO: async reading
const fileContent = fs.readFileSync(configPath, { encoding: "utf8" });
/**
* @type {IConfiguration}
*/
const config = JSON.parse(fileContent);
return config;
}
module.exports = {
kemonoSite,
sentryDSN,
siteName,
iconsPrepend,
bannersPrepend,
thumbnailsPrepend,
creatorsLocation,
artistsOrCreators,
disableDMs,
disableFAQ,
disableFilehaus,
sidebarItems,
footerItems,
bannerGlobal,
bannerWelcome,
homeBackgroundImage,
homeMascotPath,
homeLogoPath,
paysiteList,
homeWelcomeCredits,
homeAnnouncements,
headerAd,
middleAd,
footerAd,
sliderAd,
videoAd,
isArchiveServerEnabled,
apiServerBaseURL,
apiServerPort,
analyticsEnabled,
analyticsCode,
};