summaryrefslogtreecommitdiff
path: root/src/config.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2016-12-29 07:49:51 +0900
committersyuilo <syuilotan@yahoo.co.jp>2016-12-29 07:49:51 +0900
commitb3f42e62af698a67c2250533c437569559f1fdf9 (patch)
treecdf6937576e99cccf85e6fa3aa8860a1173c7cfb /src/config.ts
downloadsharkey-b3f42e62af698a67c2250533c437569559f1fdf9.tar.gz
sharkey-b3f42e62af698a67c2250533c437569559f1fdf9.tar.bz2
sharkey-b3f42e62af698a67c2250533c437569559f1fdf9.zip
Initial commit :four_leaf_clover:
Diffstat (limited to 'src/config.ts')
-rw-r--r--src/config.ts95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/config.ts b/src/config.ts
new file mode 100644
index 0000000000..2369b709fc
--- /dev/null
+++ b/src/config.ts
@@ -0,0 +1,95 @@
+/**
+ * Config loader
+ */
+
+import * as fs from 'fs';
+import * as yaml from 'js-yaml';
+
+/**
+ * ユーザーが設定する必要のある情報
+ */
+interface ISource {
+ maintainer: string;
+ url: string;
+ secondary_url: string;
+ port: number;
+ https: {
+ enable: boolean;
+ key: string;
+ cert: string;
+ ca: string;
+ };
+ mongodb: {
+ host: string;
+ port: number;
+ db: string;
+ user_id: string;
+ pass: string;
+ };
+ redis: {
+ host: string;
+ port: number;
+ pass: string;
+ };
+ elasticsearch: {
+ enable: boolean;
+ host: string;
+ port: number;
+ pass: string;
+ };
+ recaptcha: {
+ siteKey: string;
+ secretKey: string;
+ };
+}
+
+/**
+ * Misskeyが自動的に(ユーザーが設定した情報から推論して)設定する情報
+ */
+interface Mixin {
+ themeColor: string;
+ themeColorForeground: string;
+ host: string;
+ scheme: string;
+ secondary_host: string;
+ secondary_scheme: string;
+ api_url: string;
+ auth_url: string;
+ dev_url: string;
+ drive_url: string;
+ proxy_url: string;
+}
+
+export type IConfig = ISource & Mixin;
+
+/**
+ * 設定を取得します
+ * @param {string} path 設定ファイルのパス
+ * @return {IConfig} 設定
+ */
+export default (path: string) => {
+ const config = yaml.safeLoad(fs.readFileSync(path, 'utf8')) as ISource;
+
+ const mixin: Mixin = {} as Mixin;
+
+ config.url = normalizeUrl(config.url);
+ config.secondary_url = normalizeUrl(config.secondary_url);
+
+ mixin.themeColor = '#f76d6c';
+ mixin.themeColorForeground = '#fff';
+ mixin.host = config.url.substr(config.url.indexOf('://') + 3);
+ mixin.scheme = config.url.substr(0, config.url.indexOf('://'));
+ mixin.secondary_host = config.secondary_url.substr(config.secondary_url.indexOf('://') + 3);
+ mixin.secondary_scheme = config.secondary_url.substr(0, config.secondary_url.indexOf('://'));
+ mixin.api_url = `${mixin.scheme}://api.${mixin.host}`;
+ mixin.auth_url = `${mixin.scheme}://auth.${mixin.host}`;
+ mixin.dev_url = `${mixin.scheme}://dev.${mixin.host}`;
+ mixin.drive_url = `${mixin.secondary_scheme}://file.${mixin.secondary_host}`;
+ mixin.proxy_url = `${mixin.secondary_scheme}://proxy.${mixin.secondary_host}`;
+
+ return Object.assign(config || {}, mixin) as IConfig;
+};
+
+function normalizeUrl(url: string): string {
+ return url[url.length - 1] === '/' ? url.substr(0, url.length - 1) : url;
+}