Skip to content

Commit b55f99e

Browse files
committed
Initial commit (user sessions)
0 parents  commit b55f99e

File tree

4 files changed

+120
-0
lines changed

4 files changed

+120
-0
lines changed

Diff for: app.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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;

Diff for: index.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+

Diff for: package.json

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
}

Diff for: users.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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}

0 commit comments

Comments
 (0)