Skip to content

Commit 318bb33

Browse files
committed
Merge remote-tracking branch 'origin/dev' into #159-add-typescript-support
2 parents 387aee7 + 4162a71 commit 318bb33

File tree

6 files changed

+79
-31
lines changed

6 files changed

+79
-31
lines changed

app.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// 모듈 require
22
const express = require("express");
33
const http = require("http");
4-
const { port: httpPort, eventConfig } = require("./loadenv");
4+
const { nodeEnv, port: httpPort, eventConfig } = require("./loadenv");
55
const logger = require("./src/modules/logger");
66
const { connectDatabase } = require("./src/modules/stores/mongo");
77
const { startSocketServer } = require("./src/modules/socket");
@@ -20,7 +20,7 @@ app.use(express.urlencoded({ extended: false }));
2020
app.use(express.json());
2121

2222
// reverse proxy가 설정한 헤더를 신뢰합니다.
23-
app.set("trust proxy", true);
23+
if (nodeEnv === "production") app.set("trust proxy", 2);
2424

2525
// [Middleware] CORS 설정
2626
app.use(require("./src/middlewares/cors"));

loadenv.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
require("dotenv").config({ path: `./.env.${process.env.NODE_ENV}` });
33

44
module.exports = {
5-
nodeEnv: process.env.NODE_ENV,
5+
nodeEnv: process.env.NODE_ENV, // required
66
mongo: process.env.DB_PATH, // required
7-
session: process.env.SESSION_KEY || "TAXI_SESSION_KEY", // optional
7+
session: {
8+
secret: process.env.SESSION_KEY || "TAXI_SESSION_KEY", // optional
9+
expiry: 14 * 24 * 3600 * 1000, // 14일, ms 단위입니다.
10+
},
811
redis: process.env.REDIS_PATH, // optional
912
sparcssso: {
1013
id: process.env.SPARCSSSO_CLIENT_ID || "", // optional
@@ -40,5 +43,5 @@ module.exports = {
4043
slackWebhookUrl: {
4144
report: process.env.SLACK_REPORT_WEBHOOK_URL || "", // optional
4245
},
43-
eventConfig: (process.env.EVENT_CONFIG && JSON.parse(process.env.EVENT_CONFIG))
46+
eventConfig: process.env.EVENT_CONFIG && JSON.parse(process.env.EVENT_CONFIG),
4447
};

src/middlewares/session.js

+7-23
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
11
const expressSession = require("express-session");
2-
const redis = require("redis");
3-
const MongoStore = require("connect-mongo");
4-
const RedisStore = require("connect-redis")(expressSession);
5-
const {
6-
redis: redisUrl,
7-
mongo: mongoUrl,
8-
session: sessionSecret,
9-
} = require("../../loadenv");
10-
const logger = require("../modules/logger");
11-
12-
// 환경변수 REDIS_PATH 유무에 따라 session 저장 방식이 변경됩니다.
13-
let sessionStore = null;
14-
if (redisUrl) {
15-
const client = redis.createClient({
16-
url: redisUrl,
17-
legacyMode: true,
18-
});
19-
client.connect().catch(logger.error);
20-
sessionStore = new RedisStore({ client });
21-
} else {
22-
sessionStore = MongoStore.create({ mongoUrl });
23-
}
2+
const { nodeEnv, session: sessionConfig } = require("../../loadenv");
3+
const sessionStore = require("../modules/stores/sessionStore");
244

255
module.exports = expressSession({
26-
secret: sessionSecret,
6+
secret: sessionConfig.secret,
277
resave: false,
288
saveUninitialized: false,
299
store: sessionStore,
10+
cookie: {
11+
maxAge: sessionConfig.expiry,
12+
secure: nodeEnv === "production",
13+
},
3014
});

src/modules/auths/login.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
const { session: sessionConfig } = require("../../../loadenv");
12
const logger = require("../logger");
23

34
const getLoginInfo = (req) => {
45
if (req.session.loginInfo) {
56
const { id, sid, oid, name, time } = req.session.loginInfo;
67
const timeFlow = Date.now() - time;
7-
if (timeFlow > 14 * 24 * 3600 * 1000 /* 14일 */) {
8-
// if (timeFlow > 1 * 3600 * 1000 /* 1시간 */) {
8+
// 14일이 지난 세션에 대해서는 로그인 정보를 반환하지 않습니다.
9+
// 세션은 새로운 요청 시 갱신되지 않습니다.
10+
if (timeFlow > sessionConfig.expiry) {
911
return { id: undefined, sid: undefined, oid: undefined, name: undefined };
1012
}
11-
req.session.loginInfo.time = Date.now();
1213
return { id, sid, oid, name };
1314
}
1415
return { id: undefined, sid: undefined, oid: undefined, name: undefined };

src/modules/stores/sessionStore.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const expressSession = require("express-session");
2+
const redis = require("redis");
3+
const MongoStore = require("connect-mongo");
4+
const RedisStore = require("connect-redis")(expressSession);
5+
const {
6+
redis: redisUrl,
7+
mongo: mongoUrl,
8+
session: sessionConfig,
9+
} = require("../../../loadenv");
10+
const logger = require("../logger");
11+
12+
const getSessionStore = (redisUrl) => {
13+
// 환경변수 REDIS_PATH 유무에 따라 session 저장 방식이 변경됩니다.
14+
if (redisUrl) {
15+
const client = redis.createClient({
16+
url: redisUrl,
17+
legacyMode: true,
18+
});
19+
20+
// redis client 연결 성공 시 로그를 출력합니다.
21+
client.on("ready", () => {
22+
logger.info("Redis session store is connected!");
23+
});
24+
25+
// redis client 에러 발생 시 1초에 두 번 재연결을 시도합니다.
26+
client.on("error", (err) => {
27+
logger.error(err);
28+
});
29+
30+
client.connect().catch(logger.error);
31+
return new RedisStore({ client, ttl: sessionConfig.expiry });
32+
} else {
33+
return MongoStore.create({ mongoUrl });
34+
}
35+
};
36+
37+
module.exports = getSessionStore(redisUrl);

src/routes/docs/swaggerDocs.js

+23
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,28 @@ const logininfoDocs = require("./logininfo");
44
const locationsDocs = require("./locations");
55
const authDocs = require("./auth");
66
const usersDocs = require("./users");
7+
const { port, nodeEnv } = require("../../../loadenv");
8+
9+
const serverList = [
10+
{
11+
url: `http://localhost:${port}`,
12+
description: "local api server",
13+
development: true,
14+
production: false,
15+
},
16+
{
17+
url: "https://taxi.sparcs.org/api",
18+
description: "taxi main api server",
19+
development: true,
20+
production: true,
21+
},
22+
{
23+
url: "https://taxi.dev.sparcs.org/api",
24+
description: "taxi dev api server",
25+
development: true,
26+
production: false,
27+
},
28+
];
729

830
const swaggerDocs = {
931
openapi: "3.0.3",
@@ -12,6 +34,7 @@ const swaggerDocs = {
1234
version: "1.0.0",
1335
},
1436
basePath: "/",
37+
servers: serverList.filter((server) => server[nodeEnv]),
1538
tags: [
1639
{
1740
name: "locations",

0 commit comments

Comments
 (0)