From 635d7f167dc8a52fe2f02dae8cc14f1ead75302c Mon Sep 17 00:00:00 2001 From: Hide_D Date: Fri, 18 Aug 2023 16:20:10 +0000 Subject: [PATCH] =?UTF-8?q?gateway=20=EA=B5=AC=EB=B6=84=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/ProcDecorator/ReqGatewayLogin.ts | 33 +++++++++++++++++++++++++ server/ProcDecorator/ReqLogin.ts | 3 ++- server/connectDB.ts | 22 +++++++++++++++++ server/connectGatewayDB.ts | 22 +++++++++++++++++ server/gateway.ts | 6 ++--- server/index.ts | 6 ++--- server/schema/gateway/LoginToken.ts | 4 +-- server/schema/gateway/ServerConfig.ts | 4 +-- 8 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 server/ProcDecorator/ReqGatewayLogin.ts create mode 100644 server/connectDB.ts create mode 100644 server/connectGatewayDB.ts diff --git a/server/ProcDecorator/ReqGatewayLogin.ts b/server/ProcDecorator/ReqGatewayLogin.ts new file mode 100644 index 0000000..a270d93 --- /dev/null +++ b/server/ProcDecorator/ReqGatewayLogin.ts @@ -0,0 +1,33 @@ +import type { GatewayActionType, ServerActionType } from "../schema/gateway/User.js"; +import type { SessionCtx } from "./StartSession.js"; +import type { ProcDecorator } from "./base.js"; + +export type GatewayLoginCtx = { + userID: number; + userName: string; + userLevel: number; + allowServerAction: Map>; + allowGatewayAction: Set; + loginDate: Date; +} +export const loginCtxSessionKey = 'loginCtx'; + +export function ReqGatewayLogin(): ProcDecorator { + return (ctx) => { + const loginCtx = ctx.session.getItem(loginCtxSessionKey); + if(!loginCtx){ + return [{ + result: false, + type: 'Required Login', + info: 'ReqLogin' + }, ctx]; + } + + return [{ + result: true, + },{ + ...loginCtx, + ...ctx, + }]; + } +} \ No newline at end of file diff --git a/server/ProcDecorator/ReqLogin.ts b/server/ProcDecorator/ReqLogin.ts index ea45cbc..a8d8fe4 100644 --- a/server/ProcDecorator/ReqLogin.ts +++ b/server/ProcDecorator/ReqLogin.ts @@ -1,3 +1,4 @@ +import { ServerActionType } from "../schema/gateway/User.js"; import type { SessionCtx } from "./StartSession.js"; import type { ProcDecorator } from "./base.js"; @@ -5,7 +6,7 @@ export type LoginCtx = { userID: number; userName: string; userLevel: number; - allowServerAction: Record; + allowServerAction: Set; loginDate: Date; } export const loginCtxSessionKey = 'loginCtx'; diff --git a/server/connectDB.ts b/server/connectDB.ts new file mode 100644 index 0000000..c37ea01 --- /dev/null +++ b/server/connectDB.ts @@ -0,0 +1,22 @@ +import 'dotenv/config'; +import { connect, Mongoose } from "mongoose"; +import { unwrap } from './util/unwrap.js'; + +const dbConfig = { + host: unwrap(process.env.GAME_DB_HOST), + port: Number(unwrap(process.env.GAME_DB_PORT)), + user: unwrap(process.env.GAME_DB_USER), + password: unwrap(process.env.GAME_DB_PASSWORD), + database: unwrap(process.env.GAME_DB_DATABASE), +} + +const db: Promise = (async () => { + return await connect(`mongodb://${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`, { + auth:{ + username: dbConfig.user, + password: dbConfig.password, + } + }); +})(); + +export default db; \ No newline at end of file diff --git a/server/connectGatewayDB.ts b/server/connectGatewayDB.ts new file mode 100644 index 0000000..87c816f --- /dev/null +++ b/server/connectGatewayDB.ts @@ -0,0 +1,22 @@ +import 'dotenv/config'; +import { connect, Mongoose } from "mongoose"; +import { unwrap } from './util/unwrap.js'; + +const dbConfig = { + host: unwrap(process.env.GATEWAY_DB_HOST), + port: Number(unwrap(process.env.GATEWAY_DB_PORT)), + user: unwrap(process.env.GATEWAY_DB_USER), + password: unwrap(process.env.GATEWAY_DB_PASSWORD), + database: unwrap(process.env.GATEWAY_DB_DATABASE), +} + +const gatewayDB: Promise = (async () => { + return await connect(`mongodb://${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`, { + auth:{ + username: dbConfig.user, + password: dbConfig.password, + } + }); +})(); + +export default gatewayDB; \ No newline at end of file diff --git a/server/gateway.ts b/server/gateway.ts index 362473b..10bc814 100644 --- a/server/gateway.ts +++ b/server/gateway.ts @@ -1,5 +1,5 @@ -import 'dotenv/config'; import 'reflect-metadata'; +import gatewayDB from './connectGatewayDB.js'; import express, { type Request, type Response } from "express" import session from "express-session"; import path from 'node:path'; @@ -14,7 +14,7 @@ import { gatewayConfig } from './gatewayConfig.js'; -(async () => { +gatewayDB.then(async (gatewayDB) => { // create express app const app = express() app.use(express.json()); @@ -32,6 +32,6 @@ import { gatewayConfig } from './gatewayConfig.js'; console.log(`Gateway server has started on port ${gatewayConfig.port}`) -})().catch(error => console.log(error)); +}).catch(error => console.log(error)); export default {}; \ No newline at end of file diff --git a/server/index.ts b/server/index.ts index 42280af..eaf526f 100644 --- a/server/index.ts +++ b/server/index.ts @@ -1,5 +1,5 @@ - import 'reflect-metadata'; +import connectDB from './connectDB.js'; import express, { type Request, type Response } from "express" import session from "express-session"; import path from 'node:path'; @@ -10,7 +10,7 @@ import { unwrap } from './util/unwrap.js'; import { sammoAPI } from './api/api.js'; import { ownConfig } from './serverConfig.js'; -(async () => { +connectDB.then(async (db) => { // create express app const app = express() app.use(express.json()); @@ -28,6 +28,6 @@ import { ownConfig } from './serverConfig.js'; console.log(`Express server has started on port ${ownConfig.port}`) -})().catch(error => console.log(error)); +}).catch(error => console.log(error)); export default {}; \ No newline at end of file diff --git a/server/schema/gateway/LoginToken.ts b/server/schema/gateway/LoginToken.ts index 2e07add..27c5e46 100644 --- a/server/schema/gateway/LoginToken.ts +++ b/server/schema/gateway/LoginToken.ts @@ -1,5 +1,5 @@ import { type UserIDType } from "./User.js"; -import { Schema, model } from "mongoose"; +import { Mongoose, Schema, model } from "mongoose"; export interface ILoginToken { userID: UserIDType; @@ -20,4 +20,4 @@ export const LoginToken = new Schema({ .index({ validUntil: 1 }, { expireAfterSeconds: 1 }) ; -export default model('LoginToken', LoginToken); \ No newline at end of file +export default (conn: Mongoose)=>conn.model('LoginToken', LoginToken); \ No newline at end of file diff --git a/server/schema/gateway/ServerConfig.ts b/server/schema/gateway/ServerConfig.ts index 00b4236..7519d06 100644 --- a/server/schema/gateway/ServerConfig.ts +++ b/server/schema/gateway/ServerConfig.ts @@ -1,4 +1,4 @@ -import { Schema, model } from "mongoose"; +import { Mongoose, Schema, model } from "mongoose"; export interface IServerConfig { allowLogin: boolean; @@ -20,4 +20,4 @@ export const ServerConfig = new Schema({ ; //단일 document로 관리 -export default model('ServerConfig', ServerConfig); \ No newline at end of file +export default (conn:Mongoose)=>conn.model('ServerConfig', ServerConfig); \ No newline at end of file