diff --git a/README.md b/README.md index 1c900d9..f8d50a3 100644 --- a/README.md +++ b/README.md @@ -55,13 +55,14 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn - delete admin??? - change category name - _id -- ADD gavatar support +- add support for transition aroun gravatar +### theme to do: +- theme change - routes/api/routes/users.js check, themes/default/extra/footer.ejs check, themes/default/extra/meta.ejs check -- "defaultThreadState" ??? better case - +- add theme support again, but only works with css folder. Put every css file into one file. (themes/default/css/main.css) ### front-end - better usermenu for user profile @@ -76,4 +77,4 @@ themes/default/extra/meta.ejs check - V3: New Theme - V2: Backend fix, mongoose is fixed. Really big fix. - V1: Mongoose added. -- V0: Birth with quick.db +- V0: Birth with quick.db \ No newline at end of file diff --git a/config.json.example b/config.json.example index 5bd2c3c..ed93d96 100644 --- a/config.json.example +++ b/config.json.example @@ -17,7 +17,7 @@ "windowMs": 60000 }, "discord_auth": "", - "defaultThreadState": "OPEN", + "default_thread_state": "OPEN", "email_auth": false, "default_user_state": "ACTIVE", "host": "https://akf-forum.glitch.me" diff --git a/lib.js b/lib.js index 6d4f7ad..5387a04 100644 --- a/lib.js +++ b/lib.js @@ -1,6 +1,8 @@ const RL = require('express-rate-limit'); const nodemailer = require("nodemailer"); const config = require("./config.json"); +const crypto = require("crypto"); + require("dotenv").config(); module.exports = { threadEnum: ["OPEN", "APPROVAL", "DELETED"], @@ -11,6 +13,9 @@ module.exports = { handler: (req, res, next, opts) => !req.user?.admin ? res.error(opts.statusCode, "You are begin ratelimited") : next() }) }, + getGravatar(email, size) { + return `https://www.gravatar.com/avatar/${crypto.createHash('md5').update(email).digest("hex")}?d=mp${size ? `&size=${size}` : ''}`; + }, // eslint-disable-next-line no-useless-escape emailRegEx: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, diff --git a/models/Thread.js b/models/Thread.js index 16ffd3f..941cd9c 100644 --- a/models/Thread.js +++ b/models/Thread.js @@ -1,7 +1,7 @@ const mongoose = require("mongoose"); const cache = require("./cache") const MessageModel = require("./Message"); -const { limits, defaultThreadState } = require("../config.json"); +const { limits, default_thread_state } = require("../config.json"); const { threadEnum } = require("../lib"); const schema = new mongoose.Schema({ id: { type: String, unique: true }, @@ -22,7 +22,7 @@ const schema = new mongoose.Schema({ time: { type: Date, default: Date.now }, edited: { type: Boolean, default: false }, - state: { type: String, default: defaultThreadState, enum: threadEnum, uppercase: true }, + state: { type: String, default: default_thread_state, enum: threadEnum, uppercase: true }, messages: [String], views: { type: Number, default: 0 } }); diff --git a/routes/register.js b/routes/register.js index 7bfec70..1fc393b 100644 --- a/routes/register.js +++ b/routes/register.js @@ -1,7 +1,7 @@ const { UserModel } = require("../models"); const { Router } = require("express") const bcrypt = require("bcrypt"); -const { RL, transporter, emailRegEx } = require('../lib'); +const { RL, transporter, emailRegEx, getGravatar } = require('../lib'); const app = Router(); const { email_auth, forum_name, host } = require("../config.json"); app.get("/", (req, res) => res.reply("register", { user: null, discord: req.app.get("discord_auth"), mail: email_auth })); @@ -20,6 +20,8 @@ app.post("/", RL(24 * 60 * 60_000, 5), async (req, res) => { if (await UserModel.exists({ name })) return res.error(400, `We have got an user named ${name}!`) const user = new UserModel({ name }); + + user.avatar = getGravatar(name, 128); if (about) { if (about.length > 256) return res.error(400, "about must be under 256 characters"); user.about = about; diff --git a/views/setup.ejs b/views/setup.ejs index c93410a..d474834 100644 --- a/views/setup.ejs +++ b/views/setup.ejs @@ -16,7 +16,7 @@ Forum description: Default state for new threads, change with "APPROVAL" for approval system: - + Domain of the forum, defaulty setted: