168 lines
5.0 KiB
JavaScript
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,
|
|
};
|