summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md4
-rw-r--r--gulpfile.ts17
-rw-r--r--src/config.ts12
-rw-r--r--src/web/app/boot.js4
-rw-r--r--src/web/app/common/scripts/api.js2
-rw-r--r--src/web/app/common/scripts/config.js18
-rw-r--r--src/web/app/common/scripts/messaging-stream.js1
-rw-r--r--src/web/app/common/scripts/signout.js2
-rw-r--r--src/web/app/common/scripts/stream.js1
-rw-r--r--src/web/app/common/scripts/text-compiler.js1
-rw-r--r--src/web/app/common/tags/signup.tag20
-rw-r--r--src/web/app/desktop/scripts/update-avatar.js1
-rw-r--r--src/web/app/desktop/scripts/update-banner.js1
-rw-r--r--src/web/server.ts11
-rw-r--r--webpack.config.ts14
15 files changed, 69 insertions, 40 deletions
diff --git a/README.md b/README.md
index 52666390e2..32b86f8dc6 100644
--- a/README.md
+++ b/README.md
@@ -31,8 +31,7 @@ and more! You can touch with your own eyes at https://misskey.xyz/.
2. `git clone git://github.com/syuilo/misskey.git`
3. `cd misskey`
4. `npm install`
-5. `npm run config`
-6. `npm run build`
+5. `npm run build`
GLHF!
@@ -92,6 +91,7 @@ If you want to run misskey in production mode, add `--env NODE_ENV=production` l
Note that `$(pwd)` is the working directory.
## Launch
+(初回起動時はまず `npm run config` してください)
`sudo npm start`
## Debugging :bug:
diff --git a/gulpfile.ts b/gulpfile.ts
index c32bad5445..00772925ef 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -33,15 +33,6 @@ if (isDebug) {
console.log(chalk.yellow.bold('!!!注意!!! 開発モードが有効です。(成果物の圧縮などはスキップされます)'));
}
-if (!fs.existsSync('./.config/default.yml')) {
- console.log('npm run configを実行して設定ファイルを作成してください');
- process.exit();
-}
-
-(global as any).MISSKEY_CONFIG_PATH = '.config/default.yml';
-import { Config } from './src/config';
-const config = eval(require('typescript').transpile(require('fs').readFileSync('./src/config.ts').toString()))() as Config;
-
const tsProject = ts.createProject('tsconfig.json');
gulp.task('build', [
@@ -102,7 +93,9 @@ gulp.task('build:about:docs', () => {
path: page,
license: licenseHtml,
thirdpartyLicenses: thirdpartyLicensesHtml
- }, config)
+ }, {
+ themeColor: '#f76d6c'
+ })
}))
.pipe(gulp.dest('./built/web/about/pages/' + Path.parse(page).dir));
});
@@ -154,7 +147,7 @@ gulp.task('build:client:scripts', () => new Promise(async (ok) => {
// Get commit info
const commit = await prominence(git).getLastCommit();
- let stream = webpack(require('./webpack.config.js')(config, commit, env), require('webpack'));
+ let stream = webpack(require('./webpack.config.js')(commit, env), require('webpack'));
// TODO: remove this block
if (isProduction) {
@@ -216,7 +209,7 @@ gulp.task('build:client:pug', [
gulp.src('./src/web/app/*/view.pug')
.pipe(pug({
locals: {
- themeColor: config.themeColor
+ themeColor: '#f76d6c'
}
}))
.pipe(gulp.dest('./built/web/app/'))
diff --git a/src/config.ts b/src/config.ts
index 64a6b7c9bf..d2916c39c4 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -14,11 +14,9 @@ const dir = `${__dirname}/../.config`;
/**
* Path of configuration file
*/
-export const path = (global as any).MISSKEY_CONFIG_PATH
- ? (global as any).MISSKEY_CONFIG_PATH
- : process.env.NODE_ENV == 'test'
- ? `${dir}/test.yml`
- : `${dir}/default.yml`;
+export const path = process.env.NODE_ENV == 'test'
+ ? `${dir}/test.yml`
+ : `${dir}/default.yml`;
/**
* ユーザーが設定する必要のある情報
@@ -71,8 +69,6 @@ interface Source {
* Misskeyが自動的に(ユーザーが設定した情報から推論して)設定する情報
*/
interface Mixin {
- themeColor: string;
- themeColorForeground: string;
host: string;
scheme: string;
secondary_host: string;
@@ -98,8 +94,6 @@ export default function load() {
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);
diff --git a/src/web/app/boot.js b/src/web/app/boot.js
index 5fc7524626..d39e46861c 100644
--- a/src/web/app/boot.js
+++ b/src/web/app/boot.js
@@ -17,11 +17,13 @@ require('./common/tags');
"use strict";
+const CONFIG = require('./common/scripts/config');
+
document.domain = CONFIG.host;
// Set global configration
riot.mixin({
- CONFIG: CONFIG
+ CONFIG
});
// ↓ iOS待ちPolyfill (SEE: http://caniuse.com/#feat=fetch)
diff --git a/src/web/app/common/scripts/api.js b/src/web/app/common/scripts/api.js
index b549fe47b9..be72f863d6 100644
--- a/src/web/app/common/scripts/api.js
+++ b/src/web/app/common/scripts/api.js
@@ -2,6 +2,8 @@
* API Request
*/
+const CONFIG = require('./config');
+
let spinner = null;
let pending = 0;
diff --git a/src/web/app/common/scripts/config.js b/src/web/app/common/scripts/config.js
new file mode 100644
index 0000000000..5123402414
--- /dev/null
+++ b/src/web/app/common/scripts/config.js
@@ -0,0 +1,18 @@
+const url = new URL(location.href);
+
+const isRoot = url.host.split('.')[0] == 'misskey';
+
+const host = isRoot ? url.host : url.host.substring(url.host.indexOf('.') + 1, url.host.length);
+const scheme = url.protocol;
+const apiUrl = `${scheme}//api.${host}`;
+const devUrl = `${scheme}//dev.${host}`;
+const aboutUrl = `${scheme}//about.${host}`;
+
+module.exports = {
+ host,
+ scheme,
+ apiUrl,
+ devUrl,
+ aboutUrl,
+ themeColor: '#f76d6c'
+};
diff --git a/src/web/app/common/scripts/messaging-stream.js b/src/web/app/common/scripts/messaging-stream.js
index 2c00c24024..0c8ce3c9d2 100644
--- a/src/web/app/common/scripts/messaging-stream.js
+++ b/src/web/app/common/scripts/messaging-stream.js
@@ -1,5 +1,6 @@
const ReconnectingWebSocket = require('reconnecting-websocket');
const riot = require('riot');
+const CONFIG = require('./config');
class Connection {
constructor(me, otherparty) {
diff --git a/src/web/app/common/scripts/signout.js b/src/web/app/common/scripts/signout.js
index cd752423da..7242ebc5b0 100644
--- a/src/web/app/common/scripts/signout.js
+++ b/src/web/app/common/scripts/signout.js
@@ -1,3 +1,5 @@
+const CONFIG = require('./config');
+
module.exports = () => {
localStorage.removeItem('me');
document.cookie = `i=; domain=.${CONFIG.host}; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
diff --git a/src/web/app/common/scripts/stream.js b/src/web/app/common/scripts/stream.js
index 34ddc8447d..fd7bac7faa 100644
--- a/src/web/app/common/scripts/stream.js
+++ b/src/web/app/common/scripts/stream.js
@@ -1,5 +1,6 @@
const ReconnectingWebSocket = require('reconnecting-websocket');
const riot = require('riot');
+const CONFIG = require('./config');
module.exports = me => {
let state = 'initializing';
diff --git a/src/web/app/common/scripts/text-compiler.js b/src/web/app/common/scripts/text-compiler.js
index 62e70463ad..c9eb73e870 100644
--- a/src/web/app/common/scripts/text-compiler.js
+++ b/src/web/app/common/scripts/text-compiler.js
@@ -1,5 +1,6 @@
const riot = require('riot');
const nyaize = require('nyaize').default;
+const CONFIG = require('./config');
const escape = function(text) {
return text
diff --git a/src/web/app/common/tags/signup.tag b/src/web/app/common/tags/signup.tag
index f0358e2328..a70399a872 100644
--- a/src/web/app/common/tags/signup.tag
+++ b/src/web/app/common/tags/signup.tag
@@ -30,7 +30,7 @@
</label>
<label class="recaptcha">
<p class="caption"><i class="fa fa-toggle-on" if={ recaptchaed }></i><i class="fa fa-toggle-off" if={ !recaptchaed }></i>認証</p>
- <div class="g-recaptcha" data-callback="onRecaptchaed" data-expired-callback="onRecaptchaExpired" data-sitekey={ CONFIG.recaptcha.siteKey }></div>
+ <div if={ recaptcha } class="g-recaptcha" data-callback="onRecaptchaed" data-expired-callback="onRecaptchaExpired" data-sitekey={ recaptcha.siteKey }></div>
</label>
<label class="agree-tou">
<input name="agree-tou" type="checkbox" autocomplete="off" required="required"/>
@@ -193,10 +193,20 @@
};
this.on('mount', () => {
- const head = document.getElementsByTagName('head')[0];
- const script = document.createElement('script');
- script.setAttribute('src', 'https://www.google.com/recaptcha/api.js');
- head.appendChild(script);
+ fetch('/config.json').then(res => {
+ res.json().then(conf => {
+ this.update({
+ recaptcha: {
+ siteKey: conf.recaptcha.siteKey
+ }
+ });
+
+ const head = document.getElementsByTagName('head')[0];
+ const script = document.createElement('script');
+ script.setAttribute('src', 'https://www.google.com/recaptcha/api.js');
+ head.appendChild(script);
+ });
+ });
});
this.onChangeUsername = () => {
diff --git a/src/web/app/desktop/scripts/update-avatar.js b/src/web/app/desktop/scripts/update-avatar.js
index c9bf866150..f3c4594ffd 100644
--- a/src/web/app/desktop/scripts/update-avatar.js
+++ b/src/web/app/desktop/scripts/update-avatar.js
@@ -1,4 +1,5 @@
const riot = require('riot');
+const CONFIG = require('../../common/scripts/config');
const dialog = require('./dialog');
const api = require('../../common/scripts/api');
diff --git a/src/web/app/desktop/scripts/update-banner.js b/src/web/app/desktop/scripts/update-banner.js
index 2ee918db89..51a107cf4c 100644
--- a/src/web/app/desktop/scripts/update-banner.js
+++ b/src/web/app/desktop/scripts/update-banner.js
@@ -1,4 +1,5 @@
const riot = require('riot');
+const CONFIG = require('../../common/scripts/config');
const dialog = require('./dialog');
const api = require('../../common/scripts/api');
diff --git a/src/web/server.ts b/src/web/server.ts
index 72f6df5983..70083753b2 100644
--- a/src/web/server.ts
+++ b/src/web/server.ts
@@ -52,6 +52,17 @@ app.get(/\/api:url/, require('./service/url-preview'));
app.post(/\/api:rss/, require('./service/rss-proxy'));
/**
+ * Serve config
+ */
+app.get('/config.json', (req, res) => {
+ res.send({
+ recaptcha: {
+ siteKey: config.recaptcha.siteKey
+ }
+ });
+});
+
+/**
* Subdomain
*/
app.use(subdomain({
diff --git a/webpack.config.ts b/webpack.config.ts
index 66d4eb2e13..00fd3f00a3 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -1,7 +1,7 @@
import * as webpack from 'webpack';
const StringReplacePlugin = require('string-replace-webpack-plugin');
-module.exports = (config, commit, env) => {
+module.exports = (commit, env) => {
const isProduction = env === 'production';
const isDebug = !isProduction;
@@ -21,7 +21,7 @@ module.exports = (config, commit, env) => {
loader: StringReplacePlugin.replace({
replacements: [
{ pattern: /\$theme\-color\-foreground/g, replacement: () => '#fff' },
- { pattern: /\$theme\-color/g, replacement: () => config.themeColor },
+ { pattern: /\$theme\-color/g, replacement: () => '#f76d6c' },
]
})
},
@@ -62,15 +62,7 @@ module.exports = (config, commit, env) => {
new webpack.DefinePlugin({
VERSION: JSON.stringify(commit ? commit.hash : null),
CONFIG: {
- themeColor: JSON.stringify(config.themeColor),
- apiUrl: JSON.stringify(config.api_url),
- aboutUrl: JSON.stringify(config.about_url),
- devUrl: JSON.stringify(config.dev_url),
- host: JSON.stringify(config.host),
- url: JSON.stringify(config.url),
- recaptcha: {
- siteKey: JSON.stringify(config.recaptcha.siteKey),
- }
+ themeColor: JSON.stringify('#f76d6c')
}
}),
new StringReplacePlugin(),