Added last seen info

This commit is contained in:
Akif9748 2022-09-09 18:00:32 +03:00
parent e0e6dadc14
commit 3a78fd4f6c
7 changed files with 19 additions and 11 deletions

View file

@ -42,7 +42,6 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn
- Navbar manuel select - Navbar manuel select
- Version info to footer - Version info to footer
- upload other photos, model for it - upload other photos, model for it
- black theme is broken
## Major Version History ## Major Version History
- V4: Caching - V4: Caching

View file

@ -22,8 +22,9 @@ app.use(
session({ secret: 'secret', resave: true, saveUninitialized: true }), session({ secret: 'secret', resave: true, saveUninitialized: true }),
express.static("public"), express.json(), ipBlock(app.ips), express.static("public"), express.json(), ipBlock(app.ips),
async (req, res, next) => { async (req, res, next) => {
req.headers["x-forwarded-for"]; if (req.session.userID)
req.user = await UserModel.get(req.session.userID); req.user = await UserModel.findOneAndUpdate({ id: req.session.userID }, { lastSeen: Date.now() });
res.reply = (page, options = {}, status = 200) => res.status(status) res.reply = (page, options = {}, status = 200) => res.status(status)
.render(page, { user: req.user, theme: req.user?.theme || def_theme, forum_name, desp, ...options }); .render(page, { user: req.user, theme: req.user?.theme || def_theme, forum_name, desp, ...options });

View file

@ -10,7 +10,9 @@ const schema = new mongoose.Schema({
edited: { type: Boolean, default: false }, edited: { type: Boolean, default: false },
about: { type: String, default: "" }, about: { type: String, default: "" },
admin: { type: Boolean, default: false }, admin: { type: Boolean, default: false },
theme: { type: String, default: def_theme } theme: { type: String, default: def_theme },
lastSeen: { type: Date, default: Date.now,select:false },
hideLastSeen: { type: Boolean, default: false }
}); });
@ -25,6 +27,6 @@ schema.methods.getLink = function (id = this.id) {
const model = mongoose.model('user', schema); const model = mongoose.model('user', schema);
model.get = id => model.findOne({ id }); model.get = (id,select) => model.findOne({ id }).select(select);
module.exports = model; module.exports = model;

View file

@ -20,12 +20,12 @@ app.get("/", async (req, res) => {
}); });
app.get("/:id", async (req, res) => { app.get("/:id", async (req, res) => {
const {category} = req; const { category } = req;
res.complate(category); res.complate(category);
}); });
app.patch("/:id", async (req, res) => { app.patch("/:id", async (req, res) => {
const {category} = req; const { category } = req;
if (req.body.name) category.name = req.body.name; if (req.body.name) category.name = req.body.name;
if (req.body.desp) category.name = req.body.name; if (req.body.desp) category.name = req.body.name;
res.complate(await category.save()); res.complate(await category.save());
@ -36,7 +36,7 @@ app.delete("/:id", async (req, res) => {
}); });
app.post("/", async (req, res) => { app.post("/", async (req, res) => {
const {name,desp} = req.body; const { name, desp } = req.body;
if (!name) return res.error(400, "You have to give a name for the category."); if (!name) return res.error(400, "You have to give a name for the category.");
if (await CategoryModel.exists({ name })) return res.error(400, "This category is already opened."); if (await CategoryModel.exists({ name })) return res.error(400, "This category is already opened.");

View file

@ -6,7 +6,7 @@ const multer = require("multer");
const app = Router(); const app = Router();
app.param("id", async (req, res, next, id) => { app.param("id", async (req, res, next, id) => {
req.member = await UserModel.get(id); req.member = await UserModel.get(id, req.user.admin ? "+lastSeen": "");
if (!req.member) return res.error(404, `We don't have any user with id ${id}.`); if (!req.member) return res.error(404, `We don't have any user with id ${id}.`);

View file

@ -23,7 +23,7 @@ app.get("/:id/avatar", async (req, res) => {
app.get("/:id", async (req, res) => { app.get("/:id", async (req, res) => {
const user = req.user const user = req.user
const { id } = req.params; const { id } = req.params;
const member = await UserModel.get(id); const member = await UserModel.get(id,"+lastSeen");
if (member && (user?.admin || !member.deleted)) { if (member && (user?.admin || !member.deleted)) {

View file

@ -115,6 +115,12 @@ color: var(--anti);
<h2 class="box-title">Created at:</h2> <h2 class="box-title">Created at:</h2>
<h2 class="box-value"><%= new Date(member.time).toLocaleString() %></h2> <h2 class="box-value"><%= new Date(member.time).toLocaleString() %></h2>
</div> </div>
<% if(!member.hideLastSeen || user?.admin) {%>
<div class="box">
<h2 class="box-title">Last seen at:</h2>
<h2 class="box-value"><%= new Date(member.lastSeen).toLocaleString() %></h2>
</div>
<% } %>
<div class="box"> <div class="box">
<h2 class="box-title">Message:</h2> <h2 class="box-title">Message:</h2>
<h2 class="box-value"><%= counts.message %></h2> <h2 class="box-value"><%= counts.message %></h2>