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
- Version info to footer
- upload other photos, model for it
- black theme is broken
## Major Version History
- V4: Caching

View File

@ -22,8 +22,9 @@ app.use(
session({ secret: 'secret', resave: true, saveUninitialized: true }),
express.static("public"), express.json(), ipBlock(app.ips),
async (req, res, next) => {
req.headers["x-forwarded-for"];
req.user = await UserModel.get(req.session.userID);
if (req.session.userID)
req.user = await UserModel.findOneAndUpdate({ id: req.session.userID }, { lastSeen: Date.now() });
res.reply = (page, options = {}, status = 200) => res.status(status)
.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 },
about: { type: String, default: "" },
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);
model.get = id => model.findOne({ id });
model.get = (id,select) => model.findOne({ id }).select(select);
module.exports = model;

View File

@ -20,12 +20,12 @@ app.get("/", async (req, res) => {
});
app.get("/:id", async (req, res) => {
const {category} = req;
const { category } = req;
res.complate(category);
});
app.patch("/:id", async (req, res) => {
const {category} = req;
const { category } = req;
if (req.body.name) category.name = req.body.name;
if (req.body.desp) category.name = req.body.name;
res.complate(await category.save());
@ -36,7 +36,7 @@ app.delete("/:id", 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 (await CategoryModel.exists({ name })) return res.error(400, "This category is already opened.");

View File

@ -6,10 +6,10 @@ const multer = require("multer");
const app = Router();
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.deleted && !req.user?.admin)
return res.error(404, `You do not have permissions to view this user with id ${id}.`);

View File

@ -23,7 +23,7 @@ app.get("/:id/avatar", async (req, res) => {
app.get("/:id", async (req, res) => {
const user = req.user
const { id } = req.params;
const member = await UserModel.get(id);
const member = await UserModel.get(id,"+lastSeen");
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-value"><%= new Date(member.time).toLocaleString() %></h2>
</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">
<h2 class="box-title">Message:</h2>
<h2 class="box-value"><%= counts.message %></h2>