summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--models/user.js4
-rw-r--r--package.json3
-rw-r--r--server.js282
-rw-r--r--views/change-password.ejs160
-rw-r--r--views/error.ejs12
-rw-r--r--views/index.ejs90
-rw-r--r--views/login.ejs3
-rw-r--r--views/profile.ejs8
-rw-r--r--views/signup.ejs3
10 files changed, 482 insertions, 85 deletions
diff --git a/TODO b/TODO
index 026527a..c41d1bd 100644
--- a/TODO
+++ b/TODO
@@ -9,7 +9,7 @@ Final:
[x] Images
[x] Videos
- Footer:
+ Footer:
[x] “created by: “
[ ] List of sources (maybe just W3Schools)
diff --git a/models/user.js b/models/user.js
index 0971f1f..ae92d86 100644
--- a/models/user.js
+++ b/models/user.js
@@ -17,6 +17,10 @@ const userSchema = new mongoose.Schema({
password: {
type: String,
required: true
+ },
+ registrationIP: {
+ type: String,
+ required: false
}
});
module.exports = mongoose.model('User', userSchema); \ No newline at end of file
diff --git a/package.json b/package.json
index 88ce0bd..3b1244e 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,7 @@
"express": "^4.17.1",
"express-session": "^1.17.1",
"formidable": "^1.2.2",
- "mongoose": "^5.9.12"
+ "mongoose": "^5.9.12",
+ "quotes-go": "^1.0.5"
}
}
diff --git a/server.js b/server.js
index 848afa0..a0326af 100644
--- a/server.js
+++ b/server.js
@@ -3,6 +3,7 @@ const path = require('path');
const bcrypt = require('bcrypt');
const session = require('express-session');
const formidable = require('formidable');
+const quotes = require('quotes-go');
const fs = require('fs');
//const ejs = require('ejs');
const mongoose = require('mongoose');
@@ -37,11 +38,19 @@ app.get('/', async (req, res) => {
User.findById(req.session.userId)
.exec(async (error, user) => {
if (error) {
- res.render('index', { req: req, User: User, name: null });
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
} else {
if (user === null) {
//let err = new Error('Not logged in!');
- res.render('index', { req: req, User: User, name: null });
+ res.render('index', {
+ req: req,
+ User: User,
+ name: null,
+ quote: quotes.getRandomQuote()
+ });
//return err.status = 400;
//return next(err);
} else {
@@ -72,8 +81,25 @@ app.get('/', async (req, res) => {
"type": "trade",
"user": user.username
}).countDocuments();
+
let EntryCount = await EntryItem.countDocuments();
let UserCount = await User.countDocuments();
+
+ let rawUptime = process.uptime();
+ const date = new Date(rawUptime * 1000);
+ const days = date.getUTCDate() - 1,
+ hours = date.getUTCHours(),
+ minutes = date.getUTCMinutes(),
+ seconds = date.getUTCSeconds(),
+ milliseconds = date.getUTCMilliseconds();
+ let segments = [];
+ if (days > 0) segments.push(days + ' day' + ((days == 1) ? '' : 's'));
+ if (hours > 0) segments.push(hours + ' hour' + ((hours == 1) ? '' : 's'));
+ if (minutes > 0) segments.push(minutes + ' minute' + ((minutes == 1) ? '' : 's'));
+ if (seconds > 0) segments.push(seconds + ' second' + ((seconds == 1) ? '' : 's'));
+ if (milliseconds > 0) segments.push(milliseconds + ' millisecond' + ((seconds == 1) ? '' : 's'));
+ const dateString = segments.join(', ');
+
return res.render('index', {
req: req,
User: User,
@@ -87,23 +113,10 @@ app.get('/', async (req, res) => {
loop3: loop3,
loop3Count: loop3Count,
EntryCount: EntryCount,
- UserCount: UserCount
+ UserCount: UserCount,
+ dateString: dateString,
+ quote: quotes.getRandomQuote()
});
- // (await loop1).forEach(entryItem => {
- // })
- // loop.forEach(entryItem => {
- // parms = parms;
- // });
- // const entryItemsPurchase = (await entryItems.find({ username: user.name, "type": "purchase" })).forEach(entryItem => {});
- // const entryItemsSale = (await entryItems.find({ username: user.name, "type": "sale" })).forEach(entryItem => {});
- // const entryItemsTrade = (await entryItems.find({ username: user.name, "type": "trade" })).forEach(entryItem => {});
-
- //entryItems.find({ username: user.name, "type": "trade" }).forEach(entryItem => {});
-
- // entryItems.find({"user": user.username, "type": "purchase"}).forEach(entryItem => {
- // console.log(entryItemsPurchase.forEach(entryItem => {
- // entryItem.cars;
- // }));
}
}
});
@@ -115,11 +128,15 @@ app.get('/', async (req, res) => {
// });
app.get('/login', (req, res) => {
- res.render('login');
+ res.render('login', {
+ quote: quotes.getRandomQuote()
+ });
});
app.get('/signup', (req, res) => {
- res.render('signup');
+ res.render('signup', {
+ quote: quotes.getRandomQuote()
+ });
});
app.get('/api/v1/entries', async (req, res) => {
@@ -137,10 +154,16 @@ app.post('/submitEntry', async (req, res) => {
User.findById(req.session.userId)
.exec(async (error, user) => {
if (error) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
} else {
if (user === null) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Not logged in.'
+ });
} else {
await EntryItem.create({
user: user.username,
@@ -150,9 +173,9 @@ app.post('/submitEntry', async (req, res) => {
price: req.body.priceType,
date: new Date()
});
- }
- return res.redirect(req.get('referer'));
+ return res.redirect(req.get('referer'));
+ }
}
});
@@ -167,9 +190,15 @@ app.post('/login', async (req, res) => {
})
.exec((err, user) => {
if (err) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
} else if (!user) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown user.'
+ });
}
bcrypt.compare(password, user.password, (err, result) => {
@@ -186,10 +215,16 @@ app.post('/login', async (req, res) => {
if (error || !user) {
//let err = new Error('Wrong username or password.');
//err.status = 401;
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown username or password.'
+ });
} else {
req.session.userId = user._id;
- return res.redirect('/');
+ if (req.get('referer') == 'http://' + req.get('host') + '/login' || req.get('referer') == 'https://' + req.get('host') + '/login') {
+ return res.redirect('/');
+ }
+ return res.redirect(req.get('referer'));
}
});
}
@@ -201,12 +236,16 @@ app.post('/signup', async (req, res) => {
const userData = {
email: req.body.emailSignup,
username: req.body.userSignup,
- password: await hashedPass
+ password: await hashedPass,
+ registrationIP: req.headers['x-forwarded-for'] || req.connection.remoteAddress
};
User.create(userData, (err, user) => {
if (err) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Username already exists.'
+ });
} else {
req.session.userId = user._id;
return res.redirect('/');
@@ -219,7 +258,10 @@ app.post('/logout', (req, res, next) => {
if (req.session) {
req.session.destroy((err) => {
if (err) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
} else {
return res.redirect('/');
}
@@ -227,31 +269,46 @@ app.post('/logout', (req, res, next) => {
}
});
-app.get('/logout', (req, res, next) => {
- if (req.session) {
- req.session.userId.destroy((err) => {
- if (err) {
- return res.render('error');
- } else {
- return res.redirect('/');
- }
- });
- }
-});
+// app.get('/logout', (req, res, next) => {
+// if (req.session) {
+// req.session.userId.destroy((err) => {
+// if (err) {
+// return res.render('error', {
+// quote: quotes.getRandomQuote(),
+// errorMsg: 'Unknown error.'
+// });
+// } else {
+// return res.redirect('/');
+// }
+// });
+// }
+// });
app.get('/profile', async (req, res, next) => {
User.findById(req.session.userId)
.exec((error, user) => {
if (error) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
} else {
if (user === null) {
//let err = new Error('Not logged in!');
- return res.render('login', { req: req, User: User });
+ return res.render('login', {
+ req: req,
+ User: User,
+ quote: quotes.getRandomQuote()
+ });
//return err.status = 400;
//return next(err);
} else {
- return res.render('profile', { req: req, User: User, name: user.username });
+ return res.render('profile', {
+ req: req,
+ User: User,
+ name: user.username,
+ quote: quotes.getRandomQuote()
+ });
}
}
});
@@ -261,7 +318,10 @@ app.get('/profile/legacy', async (req, res, next) => {
User.findById(req.session.userId)
.exec((error, user) => {
if (error) {
- return res.render('error');
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
} else {
if (user === null) {
return res.json({ name: 'null' });
@@ -272,9 +332,11 @@ app.get('/profile/legacy', async (req, res, next) => {
});
});
-app.get('/error', (req, res) => {
- res.render('error');
-});
+// app.get('/error', (req, res) => {
+// res.render('error', {
+// quote: quotes.getRandomQuote()
+// });
+// });
app.get('/terms', (req, res) => {
res.render('terms');
@@ -294,7 +356,28 @@ app.get('/terms', (req, res) => {
// });
app.get('/marketplace', (req, res) => {
- res.redirect('/')
+ User.findById(req.session.userId)
+ .exec((error, user) => {
+ if (error) {
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
+ } else {
+ if (user === null) {
+ //let err = new Error('Not logged in!');
+ return res.render('login', {
+ req: req,
+ User: User,
+ quote: quotes.getRandomQuote()
+ });
+ //return err.status = 400;
+ //return next(err);
+ } else {
+ return res.redirect('/')
+ }
+ }
+ })
})
app.post('/closeExampleVideo', async (req, res) => {
@@ -307,6 +390,105 @@ app.post('/openExampleVideo', async (req, res) => {
return res.redirect('/');
});
+app.get('/admin', (req, res) => {
+ User.findById(req.session.userId)
+ .exec((error, user) => {
+ if (error) {
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
+ } else {
+ if (user === null) {
+ //let err = new Error('Not logged in!');
+ return res.render('login', {
+ req: req,
+ User: User,
+ quote: quotes.getRandomQuote()
+ });
+ //return err.status = 400;
+ //return next(err);
+ } else {
+ if (user.username == 'sin') {
+ return res.redirect('/')
+ // return res.render('profile', {
+ // req: req,
+ // User: User,
+ // name: user.username,
+ // quote: quotes.getRandomQuote()
+ // });
+ } else {
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Not authorized.'
+ });
+ }
+ }
+ }
+ })
+})
+
+app.get('/change-password', (req, res) => {
+ User.findById(req.session.userId)
+ .exec((error, user) => {
+ if (error) {
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
+ } else {
+ if (user === null) {
+ //let err = new Error('Not logged in!');
+ return res.render('login', {
+ req: req,
+ User: User,
+ quote: quotes.getRandomQuote()
+ });
+ //return err.status = 400;
+ //return next(err);
+ } else {
+ return res.render('change-password', {
+ quote: quotes.getRandomQuote()
+ });
+ }
+ }
+ })
+});
+
+app.post('/change-password', async (req, res) => {
+ if (req.body.passReset && req.body.passResetCheck) {
+ let hashedPass = bcrypt.hash(req.body.passReset, 10);
+ const userData = {
+ password: await hashedPass
+ };
+
+ User.findByIdAndUpdate(req.session.userId, userData, (err, user) => {
+ if (err) {
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Error changing password.'
+ });
+ } else {
+ return res.redirect('/');
+ }
+ })
+ }
+});
+
+app.post('/deleteItem/:id', (req, res) => {
+ EntryItem.findByIdAndDelete(req.params.id)
+ .exec((err, user) => {
+ if (err) {
+ return res.render('error', {
+ quote: quotes.getRandomQuote(),
+ errorMsg: 'Unknown error.'
+ });
+ } else {
+ res.redirect('/')
+ }
+ })
+})
+
app.get('*', (req, res) => {
res.redirect('/')
})
diff --git a/views/change-password.ejs b/views/change-password.ejs
new file mode 100644
index 0000000..aa24b28
--- /dev/null
+++ b/views/change-password.ejs
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Sin's SS Logger | Change Password</title>
+ <link rel="shortcut icon" href="https://i.imgur.com/69mCrs0.jpg" type="image/jpg">
+ <!-- CSS -->
+ <link rel="stylesheet" href="/css/main.css">
+ <link rel="stylesheet" href="/css/now-ui-kit.css">
+ <link rel="stylesheet" href="/css/bootstrap.min.css">
+
+ <style>
+ html,
+ body {
+ background-color: #202124;
+ user-select: none;
+ }
+
+ .container {
+ z-index: 999;
+ }
+
+ #white-txt {
+ color: white !important;
+ }
+
+ .highlightable {
+ user-select: text;
+ }
+
+ footer {
+ position: fixed;
+ left: 0;
+ bottom: 3px;
+ width: 100%;
+ color: white;
+ text-align: center;
+ }
+
+ #pink-link {
+ color: pink;
+ }
+ #pink-link:hover {
+ color: rgb(214, 161, 170);
+ }
+
+ #deez-nuts {
+ cursor: default;
+ color: white
+ }
+ #deez-nuts:hover {
+ cursor: default;
+ color: white;
+ text-decoration: none
+ }
+ </style>
+ <!-- External Libraries -->
+ <!-- Invisible Scripts -->
+ <script src="https://code.jquery.com/jquery-3.5.0.min.js"
+ integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
+ <script src="/js/now-ui-kit.js"></script>
+ <script src="/js/main.js"></script>
+ <!-- External Libraries -->
+ <!-- Invisible Scripts -->
+ </head>
+ <body>
+ <!-- Visable Scripts -->
+
+ <nav class="navbar navbar-expand-lg bg-transparent hideme" id="navbar-remove">
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav ml-auto">
+ <li class="nav-item">
+ <a href="#" class="nav-link disabled" style="opacity: 1;">Database Status: <span
+ style="color: #99CC33;">Online</span></a>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a class="nav-link" href="/">Home</a>
+ </li>
+ <!--<li class="nav-item">
+ <a class="nav-link" href="/discord/bots/uwufier/about/">About</a>
+ </li>-->
+ <li class="nav-item active">
+ <a href="/profile" class="nav-link">Profile</a>
+ </li>
+ <li class="nav-item disabled">
+ <a href="#" class="nav-link disabled">API</a>
+ </li>
+ <div class="divider-vertical"></div>
+ <li class="nav-item">
+ <a href="https://kyzer.co" class="nav-link">More stuff from Sin</a>
+ </li>
+ </ul>
+ <!-- <button class="btn btn-outline-secondary my-2 my-sm-0 btn-round btn-sm">LOGIN</button> -->
+ </div>
+ </nav>
+
+ <div class="container my-5 hideme">
+ <div class="row">
+ <div class="col-sm"></div>
+ <div class="col-sm">
+ <h4 class="pt-4" id="white-txt">
+ Change Password
+ </h4>
+
+ <form action="/change-password" method="post" class="my-4">
+ <div class="form-group">
+ <label for="passReset" class="sr-only">Password</label>
+ <input type="password" name="passReset" id="passReset" class="form-control mr-2 mb-2"
+ placeholder="Password" pattern=".{3,}" required>
+ <input type="password" name="passResetCheck" id="passResetCheck" class="form-control mr-2"
+ placeholder="Confirm Password" pattern=".{3,}" required>
+ <script>
+ var password = document.getElementById("passReset"),
+ confirm_password = document.getElementById("passResetCheck");
+
+ function validatePassword() {
+ if (password.value != confirm_password.value) {
+ confirm_password.setCustomValidity("Passwords do not match!");
+ } else {
+ confirm_password.setCustomValidity('');
+ }
+ }
+
+ password.onchange = validatePassword;
+ confirm_password.onkeyup = validatePassword;
+ </script>
+ <small id="loginUserhelp" class="form-text text-muted">Pick something secure and easy to
+ remember! Must be atleast 3 characters.</small>
+ <button type="submit" class="btn btn-success">Reset Password</button>
+ </div>
+ </form>
+ </div>
+ <div class="col-sm"></div>
+ </div>
+ </div>
+
+ <footer class="hideme">
+ <link rel="stylesheet" type="text/css"
+ href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />
+ Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a>. |
+ <span class="highlightable"><%= quote.text %> -<%= quote.author.name %></span>
+ </footer>
+
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
+ integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
+ </script>
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
+ integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
+ </script>
+ <script src="https://code.jquery.com/jquery-3.5.0.min.js"
+ integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
+ </body>
+</html> \ No newline at end of file
diff --git a/views/error.ejs b/views/error.ejs
index 05344c0..829840d 100644
--- a/views/error.ejs
+++ b/views/error.ejs
@@ -76,8 +76,8 @@
<!--<li class="nav-item">
<a class="nav-link" href="/discord/bots/uwufier/about/">About</a>
</li>-->
- <li class="nav-item active">
- <a href="#" class="nav-link">Profile <span class="sr-only">(current)</span></a>
+ <li class="nav-item">
+ <a href="/profile" class="nav-link">Profile</a>
</li>
<li class="nav-item disabled">
<a href="#" class="nav-link disabled">API</a>
@@ -96,10 +96,11 @@
<div class="col-sm"></div>
<div class="col-sm">
<h4 class="pt-4" id="white-txt">Error</h4>
- <h5 class="pt-2" id="white-txt">If you are here, you probably expirienced some kind of error.
+ <!-- <h5 class="pt-2" id="white-txt">If you are here, you probably expirienced some kind of error.
Because this site is in early access, error codes are currently disabled. If you are repeatedly
getting the same error, please join <a href="https://discord.gg/DVwXUwx">Sin's Support
- Server</a> on Discord and report a error.</b></h5>
+ Server</a> on Discord and report a error.</b></h5> -->
+ <h5 class="pt-2" id="white-txt"><%= errorMsg %></h5>
<div class="pt-3">
<a href="#" onclick="window.history.back();">
<button type="submit" class="btn btn-success">Back</button>
@@ -113,7 +114,8 @@
<footer class="hideme">
<link rel="stylesheet" type="text/css"
href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />
- Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a> (in only 10 hours).
+ Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a>. |
+ <span class="highlightable"><%= quote.text %> -<%= quote.author.name %></span>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
diff --git a/views/index.ejs b/views/index.ejs
index 48144ba..c3071d3 100644
--- a/views/index.ejs
+++ b/views/index.ejs
@@ -131,9 +131,14 @@
<a href="/login">
<button type="button" class="btn btn-danger">Login to submit</button>
</a>
- <% } else { %>
+ <% } else { %>
<button type="submit" class="btn btn-success">Submit</button>
- <% } %>
+ <% } %>
+
+ <small class="form-text" style="color: #dc3545;">Known bug: When adding/
+ deleting multiple entries at a time, you might have to
+ refresh the page for changes to show.
+ </small>
</div>
</div>
</form>
@@ -149,9 +154,12 @@
<th id="white-txt" class="hideme">Price</th>
<th id="white-txt" class="hideme" data-toggle="tooltip" data-placement="top"
title="Time of Sale">TOS</th>
+ <% if (name === null) { } else { %>
+ <th id="white-txt" class="hideme"></th>
+ <% } %>
</tr>
</thead>
- <tbody class="hideme">
+ <tbody>
<% if (name === null) { %>
<tr>
<td id="white-txt" class="highlightable hideme">RX7</td>
@@ -174,6 +182,15 @@
<td id="white-txt" class="highlightable hideme"><%= lp.seller %></td>
<td id="white-txt" class="highlightable hideme"><%= lp.price %></td>
<td id="white-txt" class="highlightable hideme"><%= lp.date %></td>
+ <!-- <td id="white-txt id" class="highlightable" style="display: none;"><%= lp._id %></td> -->
+ <td class="hideme">
+ <form action="/deleteItem/<%= lp._id %>" method="post">
+ <button type="submit" class="btn btn-danger"
+ style="float: right; font-size: 10px !important;"
+ data-toggle="tooltip" data-placement="top"
+ title="Delete this entry" data-delete-item-button>Delete</button>
+ </form>
+ </td>
</tr>
<% }) %>
<% } %>
@@ -191,9 +208,12 @@
<th id="white-txt" class="hideme">Price</th>
<th id="white-txt" class="hideme" data-toggle="tooltip" data-placement="top"
title="Time of Sale">TOS</th>
+ <% if (name === null) { } else { %>
+ <th id="white-txt" class="hideme"></th>
+ <% } %>
</tr>
</thead>
- <tbody class="hideme">
+ <tbody>
<% if (name === null) { %>
<tr>
<td id="white-txt" class="highlightable hideme">R34</td>
@@ -216,6 +236,15 @@
<td id="white-txt" class="highlightable hideme"><%= lp.seller %></td>
<td id="white-txt" class="highlightable hideme"><%= lp.price %></td>
<td id="white-txt" class="highlightable hideme"><%= lp.date %></td>
+ <!-- <td id="white-txt id" class="highlightable" style="display: none;"><%= lp._id %></td> -->
+ <td class="hideme">
+ <form action="/deleteItem/<%= lp._id %>" method="post">
+ <button type="submit" class="btn btn-danger"
+ style="float: right; font-size: 10px !important;"
+ data-toggle="tooltip" data-placement="top"
+ title="Delete this entry" data-delete-item-button>Delete</button>
+ </form>
+ </td>
</tr>
<% }) %>
<% } %>
@@ -232,29 +261,41 @@
<th id="white-txt">Trader</th>
<th id="white-txt">Traded Car(s)</th>
<th id="white-txt" data-toggle="tooltip" data-placement="top" title="Time of Sale">TOS</th>
+ <% if (name === null) { } else { %>
+ <th id="white-txt" class="hideme"></th>
+ <% } %>
</tr>
</thead>
- <tbody class="hideme">
+ <tbody>
<% if (name === null) { %>
- <td id="white-txt" class="highlightable">R32</td>
- <td id="white-txt" class="highlightable">Sin</td>
- <td id="white-txt" class="highlightable">R34</td>
- <td id="white-txt" class="highlightable">2020-05-02T06:21:23.2J7F</td>
+ <td id="white-txt" class="highlightable hideme">R32</td>
+ <td id="white-txt" class="highlightable hideme">Sin</td>
+ <td id="white-txt" class="highlightable hideme">R34</td>
+ <td id="white-txt" class="highlightable hideme">2020-05-02T06:21:23.2J7F</td>
<% } else { %>
<% if (loop3Count < 1) { %>
<tr>
- <td id="white-txt" class="highlightable"></td>
- <td id="white-txt" class="highlightable"></td>
- <td id="white-txt" class="highlightable"></td>
- <td id="white-txt" class="highlightable"></td>
+ <td id="white-txt" class="highlightable hideme"></td>
+ <td id="white-txt" class="highlightable hideme"></td>
+ <td id="white-txt" class="highlightable hideme"></td>
+ <td id="white-txt" class="highlightable hideme"></td>
</tr>
<% } else { %>
<% loop3.forEach(lp => { %>
<tr>
- <td id="white-txt" class="highlightable"><%= lp.cars %></td>
- <td id="white-txt" class="highlightable"><%= lp.seller %></td>
- <td id="white-txt" class="highlightable"><%= lp.price %></td>
- <td id="white-txt" class="highlightable"><%= lp.date %></td>
+ <td id="white-txt" class="highlightable hideme"><%= lp.cars %></td>
+ <td id="white-txt" class="highlightable hideme"><%= lp.seller %></td>
+ <td id="white-txt" class="highlightable hideme"><%= lp.price %></td>
+ <td id="white-txt" class="highlightable hideme"><%= lp.date %></td>
+ <!-- <td id="white-txt id" class="highlightable" style="display: none;"><%= lp._id %></td> -->
+ <td class="hideme">
+ <form action="/deleteItem/<%= lp._id %>" method="post">
+ <button type="submit" class="btn btn-danger"
+ style="float: right; font-size: 10px !important;"
+ data-toggle="tooltip" data-placement="top"
+ title="Delete this entry" data-delete-item-button>Delete</button>
+ </form>
+ </td>
</tr>
<% }) %>
<% } %>
@@ -265,7 +306,8 @@
</div>
<% if (name === 'sin') { %>
- <div class="newest hideme" style="position: fixed; top: 5%; left: 5%;">
+ <div class="newest hideme" style="position: absolute; top: 15px; left: 15px;">
+ <!-- <div class="newest hideme" style="position: fixed; top: 5%; left: 5%;"> -->
<table class="table table-striped">
<thead>
<tr>
@@ -278,7 +320,7 @@
<tr>
<td id="white-txt" class="highlightable"><%= UserCount %></td>
<td id="white-txt" class="highlightable"><%= EntryCount %></td>
- <td id="white-txt" class="highlightable"><%= process.uptime() %></td>
+ <td id="white-txt" class="highlightable"><%= dateString %></td>
</tr>
</tbody>
</table>
@@ -286,7 +328,8 @@
<% } %>
<% if (req.session.exampleVideo) { %>
- <div class="example-video__container hideme" style="position: absolute; bottom: 15px; left: 15px;">
+ <div class="example-video__container hideme" style="position: fixed; bottom: 25px; left: 25px;">
+ <!-- <div class="example-video__container hideme" style="position: fixed; bottom: 0px; left: 8px;"> -->
<form action="/closeExampleVideo" method="post">
<button type="submit" class="btn btn-danger" style="float: right; font-size: 10px !important;"
data-toggle="tooltip" data-placement="top" title="Close the demo">Close Demo</button>
@@ -297,19 +340,20 @@
allowfullscreen id="example-video"></iframe>
</div>
<% } else { %>
- <div class="example-video__container hideme" style="position: fixed; bottom: 15px; left: 15px;">
+ <div class="example-video__container hideme" style="position: fixed; bottom: 15px; left: 25px;">
<form action="/openExampleVideo" method="post">
<button type="submit" class="btn btn-info"
style="float: right; font-size: 10px !important;" data-toggle="tooltip" data-placement="top" title="Re-watch the demo">Re-watch Demo</button>
</form>
</div>
- <% } %>
+ <% } %>
</div>
<footer class="hideme">
<link rel="stylesheet" type="text/css"
href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />
- Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a> (in only 10 hours).
+ Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a>. |
+ <span class="highlightable"><%= quote.text %> -<%= quote.author.name %></span>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
diff --git a/views/login.ejs b/views/login.ejs
index c282b7f..b2845de 100644
--- a/views/login.ejs
+++ b/views/login.ejs
@@ -125,7 +125,8 @@
<footer class="hideme">
<link rel="stylesheet" type="text/css"
href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />
- Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a> (in only 10 hours).
+ Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a>. |
+ <span class="highlightable"><%= quote.text %> -<%= quote.author.name %></span>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
diff --git a/views/profile.ejs b/views/profile.ejs
index ff15c3b..3d3e214 100644
--- a/views/profile.ejs
+++ b/views/profile.ejs
@@ -121,11 +121,12 @@
<input type="submit" style="font-size: 16px;">
</form> -->
</h4>
+
<form action="/logout" method="POST" class="my-4">
<div class="form-group">
<button type="submit" class="btn btn-danger">Logout</button>
- <a href="#">
- <button type="button" class="btn btn-primary" style="float: right;">Coming soon!</button>
+ <a href="/change-password">
+ <button type="button" class="btn btn-primary" style="float: right;">Change password</button>
</a>
</div>
</form>
@@ -137,7 +138,8 @@
<footer class="hideme">
<link rel="stylesheet" type="text/css"
href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />
- Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a> (in only 10 hours).
+ Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a>. |
+ <span class="highlightable"><%= quote.text %> -<%= quote.author.name %></span>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
diff --git a/views/signup.ejs b/views/signup.ejs
index 3d1356b..25d222d 100644
--- a/views/signup.ejs
+++ b/views/signup.ejs
@@ -152,7 +152,8 @@
<footer class="hideme">
<link rel="stylesheet" type="text/css"
href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" />
- Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a> (in only 10 hours).
+ Made with <i class="icon ion-heart"></i> by <a href="https://kyzer.co/">Sin</a>. |
+ <span class="highlightable"><%= quote.text %> -<%= quote.author.name %></span>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"