Untitled

 avatar
unknown
javascript
a year ago
2.7 kB
4
Indexable
const router = require("express").Router();
const bcrypt = require("bcryptjs");
const User   = require("../../../../database/models/User");

router.post("/", async (req, res) => {
    const { username, password } = req.body;

    // username checks
    if (!/^[a-z0-9]+$/i.test(username)) return res.status(200).json({
        success: false,
        error: {
            name: "username",
            error: "Your username must only contain alphanumeric characters."
        }
    });

    if (username.length < 4) return res.status(200).json({
        success: false,
        error: {
            name: "username",
            error: "Your username must be at least 4 characters long."
        }
    });

    User.findOne({ username: username }).then(user => {
        if (user) {
            return res.status(200).json({
                success: false,
                error: {
                    name: "username",
                    error: "That username is already taken."
                }
            });
        }

        // password checks
        if (password.length < 6) {
            return res.status(200).json({
                success: false,
                error: {
                    name: "password",
                    error: "Your password must be at least 6 characters long."
                }
            });
        }
    
        // hash password and insert user into database
        bcrypt.genSalt(10, async (err, salt) => {
            if (err) return res.status(200).json({
                success: false,
                error: {
                    name: "password",
                    error: err.message
                }
            });

            bcrypt.hash(password, salt, async (err, hash) => {
                if (err) return res.status(200).json({
                    success: false,
                    error: {
                        name: "password",
                        error: err.message
                    }
                });

                const time = Math.floor(new Date().getTime() / 1000);
                const user = {
                    username: username,
                    password: hash,
                    membership: 0,
                    role: 0,
                    total_queries: 0,
                    time_created: time,
                    last_updated: time
                };

                const result = new User(user);
                await result.save();
                return res.status(200).json({
                    success: true
                });
            });
        });
    });
});

module.exports = router;
Editor is loading...
Leave a Comment