gateway 구분중
This commit is contained in:
@@ -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<string, Set<ServerActionType>>;
|
||||||
|
allowGatewayAction: Set<GatewayActionType>;
|
||||||
|
loginDate: Date;
|
||||||
|
}
|
||||||
|
export const loginCtxSessionKey = 'loginCtx';
|
||||||
|
|
||||||
|
export function ReqGatewayLogin<Q extends SessionCtx>(): ProcDecorator<GatewayLoginCtx & Q, Q> {
|
||||||
|
return (ctx) => {
|
||||||
|
const loginCtx = ctx.session.getItem<GatewayLoginCtx>(loginCtxSessionKey);
|
||||||
|
if(!loginCtx){
|
||||||
|
return [{
|
||||||
|
result: false,
|
||||||
|
type: 'Required Login',
|
||||||
|
info: 'ReqLogin'
|
||||||
|
}, ctx];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [{
|
||||||
|
result: true,
|
||||||
|
},{
|
||||||
|
...loginCtx,
|
||||||
|
...ctx,
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { ServerActionType } from "../schema/gateway/User.js";
|
||||||
import type { SessionCtx } from "./StartSession.js";
|
import type { SessionCtx } from "./StartSession.js";
|
||||||
import type { ProcDecorator } from "./base.js";
|
import type { ProcDecorator } from "./base.js";
|
||||||
|
|
||||||
@@ -5,7 +6,7 @@ export type LoginCtx = {
|
|||||||
userID: number;
|
userID: number;
|
||||||
userName: string;
|
userName: string;
|
||||||
userLevel: number;
|
userLevel: number;
|
||||||
allowServerAction: Record<string, number>;
|
allowServerAction: Set<ServerActionType>;
|
||||||
loginDate: Date;
|
loginDate: Date;
|
||||||
}
|
}
|
||||||
export const loginCtxSessionKey = 'loginCtx';
|
export const loginCtxSessionKey = 'loginCtx';
|
||||||
|
|||||||
@@ -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<Mongoose> = (async () => {
|
||||||
|
return await connect(`mongodb://${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`, {
|
||||||
|
auth:{
|
||||||
|
username: dbConfig.user,
|
||||||
|
password: dbConfig.password,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
export default db;
|
||||||
@@ -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<Mongoose> = (async () => {
|
||||||
|
return await connect(`mongodb://${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`, {
|
||||||
|
auth:{
|
||||||
|
username: dbConfig.user,
|
||||||
|
password: dbConfig.password,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
export default gatewayDB;
|
||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
import 'dotenv/config';
|
|
||||||
import 'reflect-metadata';
|
import 'reflect-metadata';
|
||||||
|
import gatewayDB from './connectGatewayDB.js';
|
||||||
import express, { type Request, type Response } from "express"
|
import express, { type Request, type Response } from "express"
|
||||||
import session from "express-session";
|
import session from "express-session";
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
@@ -14,7 +14,7 @@ import { gatewayConfig } from './gatewayConfig.js';
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
(async () => {
|
gatewayDB.then(async (gatewayDB) => {
|
||||||
// create express app
|
// create express app
|
||||||
const app = express()
|
const app = express()
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
@@ -32,6 +32,6 @@ import { gatewayConfig } from './gatewayConfig.js';
|
|||||||
|
|
||||||
console.log(`Gateway server has started on port ${gatewayConfig.port}`)
|
console.log(`Gateway server has started on port ${gatewayConfig.port}`)
|
||||||
|
|
||||||
})().catch(error => console.log(error));
|
}).catch(error => console.log(error));
|
||||||
|
|
||||||
export default {};
|
export default {};
|
||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import 'reflect-metadata';
|
import 'reflect-metadata';
|
||||||
|
import connectDB from './connectDB.js';
|
||||||
import express, { type Request, type Response } from "express"
|
import express, { type Request, type Response } from "express"
|
||||||
import session from "express-session";
|
import session from "express-session";
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
@@ -10,7 +10,7 @@ import { unwrap } from './util/unwrap.js';
|
|||||||
import { sammoAPI } from './api/api.js';
|
import { sammoAPI } from './api/api.js';
|
||||||
import { ownConfig } from './serverConfig.js';
|
import { ownConfig } from './serverConfig.js';
|
||||||
|
|
||||||
(async () => {
|
connectDB.then(async (db) => {
|
||||||
// create express app
|
// create express app
|
||||||
const app = express()
|
const app = express()
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
@@ -28,6 +28,6 @@ import { ownConfig } from './serverConfig.js';
|
|||||||
|
|
||||||
console.log(`Express server has started on port ${ownConfig.port}`)
|
console.log(`Express server has started on port ${ownConfig.port}`)
|
||||||
|
|
||||||
})().catch(error => console.log(error));
|
}).catch(error => console.log(error));
|
||||||
|
|
||||||
export default {};
|
export default {};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { type UserIDType } from "./User.js";
|
import { type UserIDType } from "./User.js";
|
||||||
import { Schema, model } from "mongoose";
|
import { Mongoose, Schema, model } from "mongoose";
|
||||||
|
|
||||||
export interface ILoginToken {
|
export interface ILoginToken {
|
||||||
userID: UserIDType;
|
userID: UserIDType;
|
||||||
@@ -20,4 +20,4 @@ export const LoginToken = new Schema<ILoginToken>({
|
|||||||
.index({ validUntil: 1 }, { expireAfterSeconds: 1 })
|
.index({ validUntil: 1 }, { expireAfterSeconds: 1 })
|
||||||
;
|
;
|
||||||
|
|
||||||
export default model<ILoginToken>('LoginToken', LoginToken);
|
export default (conn: Mongoose)=>conn.model<ILoginToken>('LoginToken', LoginToken);
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Schema, model } from "mongoose";
|
import { Mongoose, Schema, model } from "mongoose";
|
||||||
|
|
||||||
export interface IServerConfig {
|
export interface IServerConfig {
|
||||||
allowLogin: boolean;
|
allowLogin: boolean;
|
||||||
@@ -20,4 +20,4 @@ export const ServerConfig = new Schema<IServerConfig>({
|
|||||||
;
|
;
|
||||||
|
|
||||||
//단일 document로 관리
|
//단일 document로 관리
|
||||||
export default model<IServerConfig>('ServerConfig', ServerConfig);
|
export default (conn:Mongoose)=>conn.model<IServerConfig>('ServerConfig', ServerConfig);
|
||||||
Reference in New Issue
Block a user