1
- import { NextFunction , Request , Response , Router } from "express" ;
1
+ import { Request , Response , Router } from "express" ;
2
2
import path from "path" ;
3
3
import { XMLParser } from "fast-xml-parser" ;
4
4
import jwt from "jsonwebtoken" ;
5
5
import { prisma } from "./prisma" ;
6
6
import {
7
- authenticate , formatOpening ,
7
+ authenticate ,
8
+ chestAlive ,
9
+ formatOpening ,
8
10
generateCode ,
9
11
generateNewCode ,
10
12
getJoyconsLeft ,
11
- getLastTimeChestWasAlive ,
12
- getWaitingOpening , OPENING_INCLUDE_BEFORE_FORMATTING ,
13
+ getWaitingOpening ,
14
+ OPENING_INCLUDE_BEFORE_FORMATTING ,
13
15
} from "./utils" ;
14
16
15
17
const webRouter = Router ( ) ;
16
18
17
- function chestAlive ( ) {
18
- return Date . now ( ) - getLastTimeChestWasAlive ( ) < Number . parseInt ( process . env . TIME_BEFORE_CHEST_DEATH ) * 1000 ;
19
- }
20
-
21
19
webRouter . get ( "/borrow" , async ( request : Request , response : Response ) => {
22
- if ( ! chestAlive ( ) ) return response . redirect ( ' /down' ) ;
20
+ if ( ! chestAlive ( ) ) return response . redirect ( " /down" ) ;
23
21
const login = authenticate ( request ) ;
24
- if ( ! authenticate ( request ) ) return response . redirect ( ' /login' ) ;
25
- if ( await getWaitingOpening ( login ) ) return response . redirect ( ' /code' ) ;
22
+ if ( ! authenticate ( request ) ) return response . redirect ( " /login" ) ;
23
+ if ( await getWaitingOpening ( login ) ) return response . redirect ( " /code" ) ;
26
24
const joyconsLeft = await getJoyconsLeft ( ) ;
27
- return response . render ( path . join ( __dirname , '../www/borrow.html' ) , { joyconsLeft } ) ;
25
+ return response . render ( path . join ( __dirname , "../www/borrow.html" ) , {
26
+ joyconsLeft,
27
+ } ) ;
28
28
} ) ;
29
29
30
30
webRouter . get ( "/code" , async ( request : Request , response : Response ) => {
31
31
const login = authenticate ( request ) ;
32
- if ( ! login ) return response . redirect ( ' /login' ) ;
33
- if ( ! chestAlive ( ) ) return response . redirect ( ' /down' ) ;
34
- if ( ! await getWaitingOpening ( login ) ) return response . redirect ( '/' ) ;
32
+ if ( ! login ) return response . redirect ( " /login" ) ;
33
+ if ( ! chestAlive ( ) ) return response . redirect ( " /down" ) ;
34
+ if ( ! ( await getWaitingOpening ( login ) ) ) return response . redirect ( "/" ) ;
35
35
const opening = await getWaitingOpening ( login ) ;
36
36
const newCode = await generateNewCode ( opening . id ) ;
37
- return response . render ( path . join ( __dirname , "../www/getCode.html" ) , { code : newCode , joycons : opening . borrow . joyconsTaken , type : opening . type } ) ;
37
+ return response . render ( path . join ( __dirname , "../www/getCode.html" ) , {
38
+ code : newCode ,
39
+ joycons : opening . borrow . joyconsTaken ,
40
+ type : opening . type ,
41
+ } ) ;
38
42
} ) ;
39
43
40
44
webRouter . get ( "/login" , async ( request : Request , response : Response ) => {
41
- if ( ! chestAlive ( ) ) return response . redirect ( ' /down' ) ;
42
- if ( authenticate ( request ) ) return response . redirect ( '/' ) ;
45
+ if ( ! chestAlive ( ) ) return response . redirect ( " /down" ) ;
46
+ if ( authenticate ( request ) ) return response . redirect ( "/" ) ;
43
47
if ( ! request . query [ "ticket" ] ) {
44
48
return response . sendFile ( path . join ( __dirname , "../www/login.html" ) ) ;
45
49
}
@@ -100,16 +104,16 @@ webRouter.get("/login/cas", async (request: Request, response: Response) => {
100
104
) ;
101
105
} ) ;
102
106
103
- webRouter . get ( ' /logout' , async ( request : Request , response : Response ) => {
104
- return response . clearCookie ( ' token' ) . redirect ( '/' ) ;
107
+ webRouter . get ( " /logout" , async ( request : Request , response : Response ) => {
108
+ return response . clearCookie ( " token" ) . redirect ( "/" ) ;
105
109
} ) ;
106
110
107
111
webRouter . post ( "/borrow" , async ( request : Request , response : Response ) => {
108
112
const login = authenticate ( request ) ;
109
- if ( ! login ) return response . redirect ( ' /login' ) ;
110
- if ( ! chestAlive ( ) ) return response . redirect ( ' /down' ) ;
111
- if ( await getWaitingOpening ( login ) ) return response . redirect ( ' /code' ) ;
112
- if ( ! request . body . joycons ) return response . redirect ( ' /borrow' ) ;
113
+ if ( ! login ) return response . redirect ( " /login" ) ;
114
+ if ( ! chestAlive ( ) ) return response . redirect ( " /down" ) ;
115
+ if ( await getWaitingOpening ( login ) ) return response . redirect ( " /code" ) ;
116
+ if ( ! request . body . joycons ) return response . redirect ( " /borrow" ) ;
113
117
const joycons = Number . parseInt ( request . body . joycons ) ;
114
118
if ( Number . isNaN ( joycons ) ) {
115
119
return response . redirect ( "/borrow" ) ;
@@ -132,49 +136,64 @@ webRouter.post("/borrow", async (request: Request, response: Response) => {
132
136
user : { connect : { login } } ,
133
137
} ,
134
138
} ) ;
135
- return response . redirect ( ' /code' ) ;
139
+ return response . redirect ( " /code" ) ;
136
140
} ) ;
137
141
138
- webRouter . get ( '/forceOpen' , async ( request : Request , response : Response ) => {
139
- if ( ! chestAlive ( ) ) return response . redirect ( '/down' ) ;
140
- if ( ! request . query [ 'id' ] ) return response . redirect ( '/' ) ;
141
- const opening = formatOpening ( await prisma . opening . findUnique ( {
142
- where : { id : Number . parseInt ( request . query . id as string ) , date : null , borrow : null } ,
143
- ...OPENING_INCLUDE_BEFORE_FORMATTING
144
- } ) ) ;
142
+ webRouter . get ( "/forceOpen" , async ( request : Request , response : Response ) => {
143
+ if ( ! chestAlive ( ) ) return response . redirect ( "/down" ) ;
144
+ if ( ! request . query [ "id" ] ) return response . redirect ( "/" ) ;
145
+ const opening = formatOpening (
146
+ await prisma . opening . findUnique ( {
147
+ where : {
148
+ id : Number . parseInt ( request . query . id as string ) ,
149
+ date : null ,
150
+ borrow : null ,
151
+ } ,
152
+ ...OPENING_INCLUDE_BEFORE_FORMATTING ,
153
+ } )
154
+ ) ;
145
155
if ( ! opening ) {
146
- return response . redirect ( '/' ) ;
156
+ return response . redirect ( "/" ) ;
147
157
}
148
- const newCode = await generateNewCode ( Number . parseInt ( request . query . id as string ) ) ;
149
- response . render ( path . join ( __dirname , '../www/getCode.html' ) , { code : newCode , joycons : opening . borrow . joyconsTaken , type : opening . type } ) ;
158
+ const newCode = await generateNewCode (
159
+ Number . parseInt ( request . query . id as string )
160
+ ) ;
161
+ response . render ( path . join ( __dirname , "../www/getCode.html" ) , {
162
+ code : newCode ,
163
+ joycons : opening . borrow . joyconsTaken ,
164
+ type : opening . type ,
165
+ } ) ;
150
166
} ) ;
151
167
152
168
webRouter . get ( "/down" , async ( request : Request , response : Response ) => {
153
- if ( chestAlive ( ) ) return response . redirect ( '/' ) ;
169
+ if ( chestAlive ( ) ) return response . redirect ( "/" ) ;
154
170
response . sendFile ( path . join ( __dirname , "../www/down.html" ) ) ;
155
171
} ) ;
156
172
157
- webRouter . get ( ' /legal' , async ( request : Request , response : Response ) => {
173
+ webRouter . get ( " /legal" , async ( request : Request , response : Response ) => {
158
174
return response . sendFile ( path . join ( __dirname , "../www/legal.html" ) ) ;
159
175
} ) ;
160
176
161
- webRouter . get ( ' /cancel' , async ( request : Request , response : Response ) => {
162
- if ( ! chestAlive ( ) ) return response . redirect ( ' /down' ) ;
177
+ webRouter . get ( " /cancel" , async ( request : Request , response : Response ) => {
178
+ if ( ! chestAlive ( ) ) return response . redirect ( " /down" ) ;
163
179
const login = authenticate ( request ) ;
164
- if ( ! login ) return response . redirect ( ' /login' ) ;
180
+ if ( ! login ) return response . redirect ( " /login" ) ;
165
181
const opening = await getWaitingOpening ( login ) ;
166
- if ( opening && opening . type === 'borrow' ) {
167
- await prisma . opening . update ( { where : { id : opening . id } , data : { code : null , codeGeneratedAt : null } } ) ;
182
+ if ( opening && opening . type === "borrow" ) {
183
+ await prisma . opening . update ( {
184
+ where : { id : opening . id } ,
185
+ data : { code : null , codeGeneratedAt : null } ,
186
+ } ) ;
168
187
}
169
- return response . redirect ( '/' ) ;
188
+ return response . redirect ( "/" ) ;
170
189
} ) ;
171
190
172
- webRouter . get ( '/' , async ( request : Request , response : Response ) => {
173
- if ( ! chestAlive ( ) ) return response . redirect ( ' /down' ) ;
191
+ webRouter . get ( "/" , async ( request : Request , response : Response ) => {
192
+ if ( ! chestAlive ( ) ) return response . redirect ( " /down" ) ;
174
193
const login = authenticate ( request ) ;
175
- if ( ! login ) return response . redirect ( ' /login' ) ;
176
- if ( await getWaitingOpening ( login ) ) return response . redirect ( ' /code' ) ;
177
- return response . redirect ( ' /borrow' ) ;
194
+ if ( ! login ) return response . redirect ( " /login" ) ;
195
+ if ( await getWaitingOpening ( login ) ) return response . redirect ( " /code" ) ;
196
+ return response . redirect ( " /borrow" ) ;
178
197
} ) ;
179
198
180
199
webRouter . use ( async ( request : Request , response : Response ) => {
0 commit comments