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