1+
2+
3+ var port = 3002 ;
4+ var server = require ( 'http' ) . createServer ( request ) . listen ( port ) ;
5+ console . log ( `http://localhost:${ port } /` ) ;
6+ var users = [
7+ { name :'matt' , password :'xyz' , cookie :null } ,
8+ ] ;
9+
10+ function request ( req , res ) {
11+ console . log ( req . method , req . url ) ;
12+ var path = req . url . slice ( 1 ) ;
13+
14+ switch ( path ) {
15+
16+ case 'login' : return login ( req , res ) ;
17+ case 'lougout' : return logout ( req , res ) ;
18+ case 'admin.html' : return admin ( req , res ) ;
19+
20+ } //switch
21+
22+ var type = mime ( path ) ;
23+
24+ res . writeHead ( 200 , { 'content-type' :type } ) ;
25+ require ( 'fs' ) . createReadStream ( path ) . pipe ( res ) ;
26+
27+ } //request
28+
29+
30+ function mime ( path ) {
31+
32+ var ext = path . split ( '.' ) . at ( - 1 ) , type ;
33+ switch ( ext ) {
34+
35+ case 'html' : return 'text/html' ;
36+ case 'js' : return 'text/javascript' ;
37+ case 'css' : return 'text/css' ;
38+
39+ } //switch
40+ return 'application/octet-stream' ;
41+
42+ } //mime
43+
44+
45+ function post ( req ) {
46+
47+ var body = '' ;
48+ for ( await data of req ) body += data ;
49+ var json = JSON . parse ( body ) ;
50+ return json ;
51+
52+ } / / read
53+
54+
55+ function login ( req , res ) {
56+
57+ var json = post ( req ) ;
58+ var user = users . find ( user => user . name === json . name ) ;
59+ if ( ! user ) {
60+ res . end ( 'error' ) ;
61+ return ;
62+ }
63+ if ( user . password !== json . password ) {
64+ res . end ( 'error' ) ;
65+ return ;
66+ }
67+
68+ user . cookie = cookie ( ) ;
69+ res . setHeader ( 'set-cookie' , `session=${ user . id } ;HttpOnly;Secure;SameSite=Strict;Max-Age=60` ) ;
70+ res . setHeader ( 'Location' , '/admin' ) ;
71+ res . statusCode = 303 ;
72+ res . end ( 'ok' ) ;
73+
74+ } //login
75+
76+ function logout ( req , res ) {
77+
78+ var json = post ( req ) ;
79+ var user = users . find ( user => user . name === json . name ) ;
80+ if ( ! user ) {
81+ res . end ( 'error' ) ;
82+ return ;
83+ }
84+
85+ user . status = Date . now ( ) ;
86+ user . id = id ( ) ;
87+ res . setHeader ( 'set-cookie' , `session=${ user . id } ;HttpOnly;Secure;SameSite=Strict;Max-Age=0` ) ;
88+ res . setHeader ( 'Location' , '/login.html' ) ;
89+ res . statusCode = 303 ;
90+ res . end ( 'ok' ) ;
91+
92+ } / / logout
93+
94+ function admin ( req , res ) {
95+
96+ var cookie = req . headers . cookie ;
97+ if ( ! cookie ) {
98+ redirect ( ) ;
99+ return ;
100+ }
101+
102+ var cookie = cookie . split ( '=' ) . at ( 0 ) ;
103+ var user = users . find ( user => user . cookie === cookie ) ;
104+ if ( ! user ) {
105+ redirect ( ) ;
106+ return ;
107+ }
108+
109+ res . writeHead ( 200 , { 'content-type' :'text/html' } ) ;
110+ res . end ( html . admin ) ;
111+
112+ function redirect ( ) {
113+
114+ res . setHeader ( 'Location' , '/login.html' ) ;
115+ res . statusCode = 302 ;
116+ res . end ( 'ok' ) ;
117+
118+ } / / redirect
119+
120+ } / / admin
121+
122+
0 commit comments