+
+
+ `;
+ return htmlTemplate;
+}
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'ui', 'index.html'));
});
-app.get('/ui/style.css', function (req, res) {
- res.sendFile(path.join(__dirname, 'ui', 'style.css'));
+
+function hash (input, salt) {
+ // How do we create a hash?
+ var hashed = crypto.pbkdf2Sync(input, salt, 10000, 512, 'sha512');
+ return ["pbkdf2", "10000", salt, hashed.toString('hex')].join('$');
+}
+
+
+app.get('/hash/:input', function(req, res) {
+ var hashedString = hash(req.params.input, 'this-is-some-random-string');
+ res.send(hashedString);
+});
+
+app.post('/create-user', function (req, res) {
+ // username, password
+ // {"username": "tanmai", "password": "password"}
+ // JSON
+ var username = req.body.username;
+ var password = req.body.password;
+ var salt = crypto.randomBytes(128).toString('hex');
+ var dbString = hash(password, salt);
+ pool.query('INSERT INTO "user" (username, password) VALUES ($1, $2)', [username, dbString], function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ res.send('User successfully created: ' + username);
+ }
+ });
+});
+
+app.post('/login', function (req, res) {
+ var username = req.body.username;
+ var password = req.body.password;
+
+ pool.query('SELECT * FROM "user" WHERE username = $1', [username], function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ if (result.rows.length === 0) {
+ res.status(403).send('username/password is invalid');
+ } else {
+ // Match the password
+ var dbString = result.rows[0].password;
+ var salt = dbString.split('$')[2];
+ var hashedPassword = hash(password, salt); // Creating a hash based on the password submitted and the original salt
+ if (hashedPassword === dbString) {
+
+ // Set the session
+ req.session.auth = {userId: result.rows[0].id};
+ // set cookie with a session id
+ // internally, on the server side, it maps the session id to an object
+ // { auth: {userId }}
+
+ res.send('credentials correct!');
+
+ } else {
+ res.status(403).send('username/password is invalid');
+ }
+ }
+ }
+ });
});
-app.get('/ui/madi.png', function (req, res) {
- res.sendFile(path.join(__dirname, 'ui', 'madi.png'));
+app.get('/check-login', function (req, res) {
+ if (req.session && req.session.auth && req.session.auth.userId) {
+ // Load the user object
+ pool.query('SELECT * FROM "user" WHERE id = $1', [req.session.auth.userId], function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ res.send(result.rows[0].username);
+ }
+ });
+ } else {
+ res.status(400).send('You are not logged in');
+ }
+});
+
+app.get('/logout', function (req, res) {
+ delete req.session.auth;
+ res.send('Logged out!
Back to home');
+});
+
+var pool = new Pool(config);
+
+app.get('/get-articles', function (req, res) {
+ // make a select request
+ // return a response with the results
+ pool.query('SELECT * FROM article ORDER BY date DESC', function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ res.send(JSON.stringify(result.rows));
+ }
+ });
+});
+
+app.get('/get-comments/:articleName', function (req, res) {
+ // make a select request
+ // return a response with the results
+ pool.query('SELECT comment.*, "user".username FROM article, comment, "user" WHERE article.title = $1 AND article.id = comment.article_id AND comment.user_id = "user".id ORDER BY comment.timestamp DESC', [req.params.articleName], function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ res.send(JSON.stringify(result.rows));
+ }
+ });
+});
+
+app.post('/submit-comment/:articleName', function (req, res) {
+ // Check if the user is logged in
+ if (req.session && req.session.auth && req.session.auth.userId) {
+ // First check if the article exists and get the article-id
+ pool.query('SELECT * from article where title = $1', [req.params.articleName], function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ if (result.rows.length === 0) {
+ res.status(400).send('Article not found');
+ } else {
+ var articleId = result.rows[0].id;
+ // Now insert the right comment for this article
+ pool.query(
+ "INSERT INTO comment (comment, article_id, user_id) VALUES ($1, $2, $3)",
+ [req.body.comment, articleId, req.session.auth.userId],
+ function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ res.status(200).send('Comment inserted!')
+ }
+ });
+ }
+ }
+ });
+ } else {
+ res.status(403).send('Only logged in users can comment');
+ }
+});
+
+app.get('/articles/:articleName', function (req, res) {
+ // SELECT * FROM article WHERE title = '\'; DELETE WHERE a = \'asdf'
+ pool.query("SELECT * FROM article WHERE title = $1", [req.params.articleName], function (err, result) {
+ if (err) {
+ res.status(500).send(err.toString());
+ } else {
+ if (result.rows.length === 0) {
+ res.status(404).send('Article not found');
+ } else {
+ var articleData = result.rows[0];
+ res.send(createTemplate(articleData));
+ }
+ }
+ });
+});
+
+app.get('/ui/:fileName', function (req, res) {
+ res.sendFile(path.join(__dirname, 'ui', req.params.fileName));
});
@@ -22,3 +265,4 @@ var port = 8080; // Use 8080 for local development because you might already hav
app.listen(8080, function () {
console.log(`IMAD course app listening on port ${port}!`);
});
+
diff --git a/ui/CV1.png b/ui/CV1.png
new file mode 100644
index 0000000000..f839d59dfe
Binary files /dev/null and b/ui/CV1.png differ
diff --git a/ui/Imad.png b/ui/Imad.png
new file mode 100644
index 0000000000..72272f14ff
Binary files /dev/null and b/ui/Imad.png differ
diff --git a/ui/LinkedIn.png b/ui/LinkedIn.png
new file mode 100644
index 0000000000..e7bba58674
Binary files /dev/null and b/ui/LinkedIn.png differ
diff --git a/ui/NPTEL1.png b/ui/NPTEL1.png
new file mode 100644
index 0000000000..6d92287be0
Binary files /dev/null and b/ui/NPTEL1.png differ
diff --git a/ui/VIKASH.html b/ui/VIKASH.html
new file mode 100644
index 0000000000..9a7cb0c123
--- /dev/null
+++ b/ui/VIKASH.html
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+VIKASH KUMAR
+
+ Indian Institute of Engineering Science and Technology, Shibpur
+
+Howrah, India
+
+kumar.vikash863@gmail.com
+
++9748463047
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OBJECTIVE
+ To attain a position of intern in development field to contribute my
+ knowledge, skills and experience for the advancement of the company
+ while studying and making myself grow with the company.
+ To be a part of an organization, utilizing my analytical skills, abilities
+ and take initiatives in order to create the value addition to the company
+ and meet the corporate goals from thought to finish.
+Short Term Course on " Object Oriented Programming and
+Algorithm Design in Java " organised by Computer Science
+and Engineering Department of IIT Kharagpur .
+
+
+
+
+
PROJECTS Manual Robotics
+
+
+A Robot which picks blocks and puts it into holes while moving through
+different obstacles, climbing ramps.
+
+
+
+
+
+
+
+
ACHIEVEMENTS
+
+
+● Certified by IIT Kharagpur with "A" grade in Object Oriented
+Programming and Algorithm Design in Java.Click to see
+● Gold Medalist in Mathematics Olympiad organised by AISMTA ( All
+India Schools Mathematics Teachers Association ) in the year 2014.
${escapeHTML(commentsData[i].comment)}
+