From 95490220734940086282fe70b5a62a841d053185 Mon Sep 17 00:00:00 2001 From: marihachi Date: Sun, 22 Apr 2018 07:59:04 +0900 Subject: [PATCH] [wip] #59 --- .configs/README.md | 6 ++++++ .configs/client-config.default.json | 4 ++++ .configs/server-config.default.json | 19 +++++++++++++++++++ .gitignore | 7 +++++-- src/server/helpers/create-session.js | 8 ++++---- src/server/httpServer.js | 14 +++++++------- src/server/index.js | 24 ++++-------------------- src/server/streamingServer.js | 6 +++--- 8 files changed, 52 insertions(+), 36 deletions(-) create mode 100644 .configs/README.md create mode 100644 .configs/client-config.default.json create mode 100644 .configs/server-config.default.json diff --git a/.configs/README.md b/.configs/README.md new file mode 100644 index 0000000..d3a2dd1 --- /dev/null +++ b/.configs/README.md @@ -0,0 +1,6 @@ +# Description +Please create and place necessary config files by copying `*.default.config`, and edit it. + +# List of config files +- client-config.json +- server-config.json diff --git a/.configs/client-config.default.json b/.configs/client-config.default.json new file mode 100644 index 0000000..5d128d2 --- /dev/null +++ b/.configs/client-config.default.json @@ -0,0 +1,4 @@ +{ + "$version": 1, + "apiHost": "localhost:8000" +} diff --git a/.configs/server-config.default.json b/.configs/server-config.default.json new file mode 100644 index 0000000..46547cc --- /dev/null +++ b/.configs/server-config.default.json @@ -0,0 +1,19 @@ +{ + "$version": 1, + "port": 8001, + "apiHost": "localhost:8000", + "session": { + "name": "sid", + "SecretToken": "paste_your_session_secret_token" + }, + "applicationId": "paste_your_application_id", + "hostAccessToken": "paste_your_host_access_token", + "accessTokenScopes": { + "clientSide": ["user.read", "user.write", "post.read", "post.write", "storage.read", "storage.write"], + "session": ["app.create"] + }, + "reCAPTCHA": { + "siteKey": "paste_your_reCAPTCHA_site_key", + "secretKey": "paste_your_reCAPTCHA_secret_key" + } +} diff --git a/.gitignore b/.gitignore index 0fb6b6c..9f1fafc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ +package-lock.json node_modules built .vscode *.log *.old -/config*.json -package-lock.json + +/.configs/* +!/.configs/README.md +!/.configs/*.default.json diff --git a/src/server/helpers/create-session.js b/src/server/helpers/create-session.js index a4d3f95..87b6f29 100644 --- a/src/server/helpers/create-session.js +++ b/src/server/helpers/create-session.js @@ -24,7 +24,7 @@ module.exports = async (req, streamingRest, config) => { const getToken = async (scopes) => { let tokenResult = await streamingRest.request('get', '/auth/tokens', { query: { - applicationId: config.web.applicationId, + applicationId: config.applicationId, userId: user.id, scopes: scopes } @@ -35,7 +35,7 @@ module.exports = async (req, streamingRest, config) => { if (tokenResult.statusCode == 404) { tokenResult = await streamingRest.request('post', '/auth/tokens', { body: { - applicationId: config.web.applicationId, + applicationId: config.applicationId, userId: user.id, scopes: scopes } @@ -48,10 +48,10 @@ module.exports = async (req, streamingRest, config) => { }; // get session accessToken - const sessionToken = await getToken(config.web.accessTokenScopes.session); + const sessionToken = await getToken(config.accessTokenScopes.session); // get client-side sccessToken - const clientSideToken = await getToken(config.web.accessTokenScopes.clientSide); + const clientSideToken = await getToken(config.accessTokenScopes.clientSide); req.session.token = sessionToken; req.session.clientSideToken = clientSideToken; diff --git a/src/server/httpServer.js b/src/server/httpServer.js index 33cdb89..69f5c25 100644 --- a/src/server/httpServer.js +++ b/src/server/httpServer.js @@ -46,8 +46,8 @@ module.exports = async (hostApiConnection, debug, config) => { app.use(expressSession({ store: sessionStore, - name: config.web.session.name, - secret: config.web.session.SecretToken, + name: config.session.name, + secret: config.session.SecretToken, cookie: { httpOnly: false, maxAge: 7 * 24 * 60 * 60 * 1000 // 7days @@ -72,7 +72,7 @@ module.exports = async (hostApiConnection, debug, config) => { pageParams = Object.assign(pageParams || {}, { csrf: req.csrfToken(), isSmartPhone: req.isSmartPhone, - siteKey: config.web.reCAPTCHA.siteKey + siteKey: config.reCAPTCHA.siteKey }); // memo: クライアントサイドでは、パラメータ中にuserIdが存在するかどうかでWebSocketへの接続が必要かどうかを判断します。このコードはそのために必要です。 @@ -113,7 +113,7 @@ module.exports = async (hostApiConnection, debug, config) => { message: 'ok', accessToken: req.session.clientSideToken.accessToken, userId: req.session.clientSideToken.userId, - scopes: config.web.accessTokenScopes.clientSide + scopes: config.accessTokenScopes.clientSide }); } catch(err) { @@ -155,7 +155,7 @@ module.exports = async (hostApiConnection, debug, config) => { method: 'POST', json: true, form: { - secret: config.web.reCAPTCHA.secretKey, + secret: config.reCAPTCHA.secretKey, response: req.body.recaptchaToken } }); @@ -180,7 +180,7 @@ module.exports = async (hostApiConnection, debug, config) => { message: 'ok', accessToken: req.session.clientSideToken.accessToken, userId: req.session.clientSideToken.userId, - scopes: config.web.accessTokenScopes.clientSide + scopes: config.accessTokenScopes.clientSide }); } catch (err) { @@ -252,7 +252,7 @@ module.exports = async (hostApiConnection, debug, config) => { resolve(http); }); }); - const http = await listen(config.web.port); + const http = await listen(config.port); console.log('[http server]', 'initialized'); diff --git a/src/server/index.js b/src/server/index.js index fe4d19f..248dd0e 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -1,19 +1,9 @@ -const fs = require('fs'); const path = require('path'); -const { promisify } = require('util'); const httpServer = require('./httpServer'); -const i = require('./helpers/input-async'); -const loadConfig = require('./helpers/load-config'); -const request = require('request-promise'); const streamingServer = require('./streamingServer'); const ReconnectingWebSocket = require('./helpers/reconnecting-websocket-node'); const events = require('websocket-events'); -const urlConfigFile = 'https://raw.githubusercontent.com/Frost-Dev/Frost/master/config.json'; - -const q = async str => (await i(str)).toLowerCase().indexOf('y') === 0; -const writeFile = promisify(fs.writeFile); - const isDebug = false; /** @@ -25,21 +15,15 @@ module.exports = async () => { console.log('| Frost Web Server |'); console.log('+------------------+'); - console.log('loading config...'); - let config = loadConfig(); + console.log('loading config file...'); + let config = require(path.resolve('.configs/server-config.json')); if (config == null) { - if (await q('config file is not found. generate now? (y/n) > ')) { - const parent = await q('generate config.json in the parent directory of repository? (y/n) > '); - const configPath = path.resolve(parent ? '../config.json' : 'config.json'); - const configJson = await request(urlConfigFile); - await writeFile(configPath, configJson); - console.log('generated. please edit config.json and restart frost-web.'); - } + console.log('config file is not found. please refer to .configs/README.md'); return; } console.log('connecting to streaming api as host ...'); - const hostApiConnection = await ReconnectingWebSocket.connect(`${config.web.apiBaseUrl}?access_token=${config.web.hostAccessToken}`); + const hostApiConnection = await ReconnectingWebSocket.connect(`ws://${config.apiHost}?access_token=${config.hostAccessToken}`); hostApiConnection.on('error', err => { if (err.message.indexOf('ECONNRESET') != -1) { return; diff --git a/src/server/streamingServer.js b/src/server/streamingServer.js index 31e967a..af526b0 100644 --- a/src/server/streamingServer.js +++ b/src/server/streamingServer.js @@ -15,7 +15,7 @@ module.exports = (http, sessionStore, debugDetail, config) => { let frontConnection; try { // セッションを取得 - const session = await getSessionFromCookie(wsRequest.httpRequest.headers['cookie'], config.web.session.name, config.web.session.SecretToken, sessionStore); + const session = await getSessionFromCookie(wsRequest.httpRequest.headers['cookie'], config.session.name, config.session.SecretToken, sessionStore); if (session == null || session.token == null) { return wsRequest.reject(401, 'Unauthorized'); @@ -27,7 +27,7 @@ module.exports = (http, sessionStore, debugDetail, config) => { if (debugDetail) { console.log('[streaming server]', 'connecting streaming api server...'); } - apiConnection = await WebSocketUtility.connect(`${config.web.apiBaseUrl}?access_token=${session.token.accessToken}`); + apiConnection = await WebSocketUtility.connect(`ws://${config.apiHost}?access_token=${session.token.accessToken}`); events(apiConnection); } catch (err) { @@ -98,7 +98,7 @@ module.exports = (http, sessionStore, debugDetail, config) => { const verifyResult = await request('https://www.google.com/recaptcha/api/siteverify', { method: 'POST', json: true, - form: { secret: config.web.reCAPTCHA.secretKey, response: data.recaptchaToken } + form: { secret: config.reCAPTCHA.secretKey, response: data.recaptchaToken } }); if (!verifyResult.success) { frontConnection.error('app-create', 'invalid recaptcha');