File tree 4 files changed +120
-0
lines changed
4 files changed +120
-0
lines changed Original file line number Diff line number Diff line change
1
+ const bodyParser = require ( 'body-parser' ) ;
2
+ const express = require ( 'express' ) ;
3
+ const users = require ( './users' ) ;
4
+
5
+ const router = express . Router ( ) ;
6
+ router . get ( '/' , ( req , res , next ) => {
7
+ res . json ( { ok : true } ) ;
8
+ } ) ;
9
+
10
+ router . post ( '/login' , ( req , res , next ) => {
11
+ const token = users . userLogin ( req . query [ 'username' ] ) ;
12
+ res . json ( { token} ) ;
13
+ } ) ;
14
+
15
+ router . get ( '/me/:token' , ( req , res , next ) => {
16
+ users . userSession ( req . params . token , ( err , user ) => {
17
+ res . json ( err ? { error : err . message } : user ) ;
18
+ } )
19
+ } ) ;
20
+
21
+ const app = express ( ) ;
22
+ app . use ( bodyParser . json ( ) ) ;
23
+ app . use ( bodyParser . urlencoded ( { extended : false } ) ) ;
24
+ app . use ( '/' , router ) ;
25
+ module . exports = app ;
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env node
2
+
3
+ const http = require ( 'http' ) ;
4
+ const app = require ( './app' ) ;
5
+
6
+ const port = parseInt ( process . env . PORT || '8000' ) ;
7
+ // app.set('port', port);
8
+ const server = http . createServer ( app ) ;
9
+ server . on ( 'error' , onError ) ;
10
+ server . on ( 'listening' , onListening ) ;
11
+ server . listen ( port ) ;
12
+
13
+ // Event listener for HTTP server "error" event.
14
+ function onError ( error ) {
15
+ if ( error . syscall !== 'listen' ) {
16
+ throw error ;
17
+ }
18
+
19
+ const bind = typeof port === 'string'
20
+ ? 'Pipe ' + port
21
+ : 'Port ' + port ;
22
+
23
+ // Handle specific listen errors with friendly messages.
24
+ switch ( error . code ) {
25
+ case 'EACCES' :
26
+ console . error ( bind + ' requires elevated privileges' ) ;
27
+ process . exit ( 1 ) ;
28
+ break ;
29
+ case 'EADDRINUSE' :
30
+ console . error ( bind + ' is already in use' ) ;
31
+ process . exit ( 1 ) ;
32
+ break ;
33
+ default :
34
+ throw error ;
35
+ }
36
+ }
37
+
38
+ // Event listener for HTTP server "listening" event.
39
+ function onListening ( ) {
40
+ const addr = server . address ( ) ;
41
+ const bind = typeof addr === 'string'
42
+ ? 'pipe ' + addr
43
+ : 'port ' + addr . port ;
44
+ console . log ( 'Listening on ' + bind ) ;
45
+ }
46
+
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" : " demo-iaptic-server" ,
3
+ "version" : " 1.0.0" ,
4
+ "description" : " " ,
5
+ "main" : " index.js" ,
6
+ "scripts" : {
7
+ "test" : " echo \" Error: no test specified\" && exit 1"
8
+ },
9
+ "author" : " " ,
10
+ "license" : " ISC" ,
11
+ "dependencies" : {
12
+ "express" : " ^4.18.2" ,
13
+ "sqlite3" : " ^5.1.6"
14
+ }
15
+ }
Original file line number Diff line number Diff line change
1
+ const sqlite3 = require ( 'sqlite3' ) ;
2
+ const db = new sqlite3 . Database ( 'sessions.db' ) ;
3
+
4
+ db . run ( 'CREATE TABLE IF NOT EXISTS sessions (token TEXT PRIMARY KEY, username TEXT)' ) ;
5
+
6
+ function userLogin ( username ) {
7
+ const token = generateToken ( ) ;
8
+ db . run ( 'INSERT INTO sessions VALUES (?, ?)' , token , username ) ;
9
+ return token ;
10
+ }
11
+
12
+ function userSession ( token , callback ) {
13
+
14
+ db . each ( 'SELECT * FROM sessions WHERE token = (?)' , token , ( err , row ) => {
15
+ if ( ! callback ) return ;
16
+ if ( err ) {
17
+ callback ( err ) ;
18
+ callback = null ;
19
+ }
20
+ else {
21
+ callback ( null , row ) ;
22
+ callback = null ;
23
+ }
24
+ } , ( ) => {
25
+ if ( ! callback ) return ;
26
+ callback ( new Error ( 'UserNotFound' ) ) ;
27
+ } ) ;
28
+ }
29
+
30
+ function generateToken ( ) {
31
+ return '' + Math . round ( 9999999 * Math . random ( ) ) ;
32
+ }
33
+
34
+ module . exports = { userLogin, userSession}
You can’t perform that action at this time.
0 commit comments