Skip to content

Commit 3a9eb39

Browse files
committed
initial commit
0 parents  commit 3a9eb39

File tree

15 files changed

+2521
-0
lines changed

15 files changed

+2521
-0
lines changed

api/activate.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const db = require('./../db.js');
2+
const express = require('express');
3+
4+
const app = express.Router();
5+
6+
app.get('/activate/:code([a-zA-Z0-9]{64})', (req, res) => {
7+
db.query('update tracker.user set activated=$1, activation_code=$2, where activation_code=$3',
8+
[true, null, req.params.code]).then(result => {
9+
res.send(200);
10+
});
11+
});
12+
13+
module.exports = app;

api/blogPosts.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const express = require('express');
2+
const db = require('./../db.js');
3+
4+
const app = express.Router();
5+
6+
app.get('/blogPosts/:amount', (req, res) => {
7+
db.query('select * from tracker.blogposts limit $1', [req.params.amount]).then(result => {
8+
res.json(result.rows.map((post, index) => {
9+
return { title: post.title, content: post.content, timestamp: post.time };
10+
}));
11+
});
12+
});
13+
14+
module.exports = app;

api/createAccount.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const express = require('express');
2+
const db = require('./../db.js');
3+
const bcrypt = require('bcrypt');
4+
const emailer = require('./emailer');
5+
const crypto = require('crypto');
6+
7+
const app = express.Router();
8+
9+
const checkAccountExists = (username, email) => {
10+
return db.query('select username from tracker.user where username=$1 or email=$2', [username, email]).then(result => {
11+
if (result.rows.length > 0) {
12+
return Promise.reject(new Error('Invalid username/email.'));
13+
}
14+
return Promise.resolve();
15+
});
16+
};
17+
18+
const hashPassword = password => {
19+
return bcrypt.hashSync(password, 10);
20+
};
21+
22+
const makeActivationCode = username => {
23+
const hash = crypto.createHash('sha256');
24+
const code = process.env.COOKIE_SECRET + username + Math.floor((new Date).getTime()/1000).toString();
25+
hash.update(code);
26+
return hash.digest('hex');
27+
};
28+
29+
app.post('/create', (req, res) => {
30+
checkAccountExists(req.body.username, req.body.email).then(() => {
31+
const activationCode = makeActivationCode(req.body.username);
32+
db.query('insert into tracker.user (username, password_hash, email, activation_code) values ($1, $2, $3, $4)',
33+
[req.body.username, hashPassword(req.body.password), req.body.email, activationCode]).then(result => {
34+
res.sendStatus(200);
35+
emailer.sendActivationEmail(req.body.email, activationCode);
36+
}).catch(err => {
37+
console.log(err);
38+
res.sendStatus(503);
39+
});
40+
}).catch(err => {
41+
console.log(err);
42+
res.status(409);
43+
res.send('Invalid username/email.');
44+
});
45+
});
46+
47+
module.exports = app;

api/emailer.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const nodemailer = require('nodemailer');
2+
//const sendmailTransport = require('nodemailer-sendmail-transport');
3+
4+
const transporter = nodemailer.createTransport({
5+
host: 'topkek.us',
6+
port: 25,
7+
secure: false,
8+
auth: {
9+
user: process.env.MAIL_USER,
10+
pass: process.env.MAIL_PASS
11+
}
12+
});
13+
14+
const makeActivationURL = (activationCode) => {
15+
return `http://${process.env.DOMAIN}:${process.env.WEB_PORT}/activate/${activationCode}`;
16+
};
17+
18+
module.exports.sendActivationEmail = (to, activationCode) => {
19+
const mailOptions = {
20+
from: 'Topkek <[email protected]>',
21+
to: to,
22+
subject: 'Email verification',
23+
text: `Please click on the link below to activate your account:\n\n ${makeActivationURL(activationCode)}`
24+
};
25+
26+
transporter.sendMail(mailOptions, (err, info) => {
27+
if (err) {
28+
console.log(err);
29+
}
30+
console.log(`Message sent: ${info.response}`);
31+
});
32+
};

api/index.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const express = require('express');
2+
3+
const app = express.Router();
4+
5+
// routes
6+
const createAccount = require('./createAccount.js');
7+
const login = require('./login.js');
8+
const unauthorized = require('./unauthorized.js');
9+
const logout = require('./logout.js');
10+
const logged = require('./isLoggedIn.js');
11+
const activate = require('./activate.js');
12+
const blogPosts = require('./blogPosts.js');
13+
const upload = require('./upload.js');
14+
15+
app.use(login);
16+
app.use(createAccount);
17+
app.use(activate);
18+
app.use(blogPosts);
19+
//app.use(unauthorized);
20+
app.use(logout);
21+
app.use(logged);
22+
app.use(upload);
23+
24+
module.exports = app;

api/isLoggedIn.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const express = require('express');
2+
3+
const app = express.Router();
4+
5+
app.all('/logged', (req, res) => {
6+
const user = req.session.currentUser;
7+
res.send(user);
8+
});
9+
10+
module.exports = app;

api/login.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const express = require('express');
2+
const db = require('./../db.js');
3+
const bcrypt = require('bcrypt');
4+
5+
const app = express.Router();
6+
7+
app.post('/login', (req, res) => {
8+
db.query('select username, account_id, password_hash from tracker.user where username=$1', [req.body.username]).then(result => {
9+
if (bcrypt.compareSync(req.body.password, result.rows[0].password_hash)) {
10+
req.session.currentUser = {
11+
username: req.body.username,
12+
id: result.rows[0].account_id
13+
};
14+
15+
req.session.save(function(err) {
16+
res.send();
17+
});
18+
}
19+
}).catch(err => {
20+
console.log(err);
21+
res.sendStatus(404);
22+
});
23+
});
24+
25+
module.exports = app;

api/logout.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const express = require('express');
2+
3+
const app = express.Router();
4+
5+
app.get('/logout', (req, res) => {
6+
req.session.destroy(err => {
7+
if (err) throw err;
8+
res.send(200);
9+
});
10+
});
11+
12+
module.exports = app;

api/unauthorized.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const express = require('express');
2+
3+
const app = express.Router();
4+
5+
app.all('*', (req, res, next) => {
6+
if (!req.session.currentUser) {
7+
res.sendStatus(401);
8+
}
9+
10+
next();
11+
});
12+
13+
module.exports = app;

api/upload.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const express = require('express');
2+
const multer = require('multer');
3+
const cyrpto = require('crypto');
4+
const db = require('./../db.js');
5+
const _ = require('lodash');
6+
7+
const app = express.Router();
8+
9+
const storage = multer.diskStorage({
10+
destination: (req, file, cb) => {
11+
cb(null, `/home/justin/torrents/${(new Date).getMonth()}`);
12+
},
13+
filename: (req, file, cb) => {
14+
cb(null, file.hash);
15+
}
16+
});
17+
18+
const hashTorrent = (torrentBuffer) => {
19+
20+
};

0 commit comments

Comments
 (0)