upd
This commit is contained in:
@@ -18,6 +18,9 @@ import adminCompaniesRoute from "./routes/admin/adminCompaniesRoute.js";
|
||||
import adminBuildsRoute from "./routes/admin/adminBuildsRoute.js";
|
||||
import adminUsersRoute from "./routes/admin/adminUsersRoute.js";
|
||||
import changePasswordRoute from "./routes/changePassword.js";
|
||||
import resetRoute from "./routes/reset.js";
|
||||
import resetConfirmRoute from "./routes/resetConfirm.js";
|
||||
import addManagerRoute from "./routes/addManager.js";
|
||||
|
||||
await connectDB();
|
||||
|
||||
@@ -39,6 +42,8 @@ app.use("/login", loginRoute);
|
||||
app.use("/check", checkRoute);
|
||||
app.use("/refresh", refreshRoute);
|
||||
app.use("/register", registerRoute);
|
||||
app.use("/reset", resetRoute);
|
||||
app.use("/resetConfirm", resetConfirmRoute);
|
||||
app.use("/actions", actionsRouter);
|
||||
app.use("/builds", buildsRouter);
|
||||
app.use("/scheduled_sessions", scheduledSessionsRoute);
|
||||
@@ -49,6 +54,7 @@ app.use("/admin/users", adminUsersRoute);
|
||||
app.use("/companies", authMiddleware, companiesRouter);
|
||||
app.use("/users", authMiddleware, usersRouter);
|
||||
app.use("/changePassword", authMiddleware, changePasswordRoute);
|
||||
app.use("/addManager", authMiddleware, addManagerRoute);
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server listening on port ${port}`);
|
||||
|
||||
@@ -11,6 +11,9 @@ const userSchema = new Schema(
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
resetCode: {
|
||||
type: String,
|
||||
},
|
||||
companyId: {
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: "Company",
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
import { Router } from "express";
|
||||
import { generate } from "generate-password";
|
||||
import User from "../models/User.js";
|
||||
import { hashSync } from "bcrypt";
|
||||
import { createTransport } from "nodemailer";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.post("/", async (req, res) => {
|
||||
const { companyId, username, name, role } = req.body;
|
||||
|
||||
try {
|
||||
const password = generate({
|
||||
length: 8,
|
||||
numbers: true,
|
||||
});
|
||||
|
||||
console.log("password", password);
|
||||
|
||||
const passwordHash = hashSync(password, 12);
|
||||
|
||||
const userExist = await User.exists({ username });
|
||||
|
||||
if (userExist) {
|
||||
return res.json({ error: "User exist" });
|
||||
}
|
||||
|
||||
await User.create({
|
||||
companyId,
|
||||
username,
|
||||
name,
|
||||
role,
|
||||
password: passwordHash,
|
||||
});
|
||||
|
||||
let transporter = createTransport({
|
||||
host: "mail.netangels.ru",
|
||||
port: 587,
|
||||
secure: false, // true for 465, false for other ports
|
||||
auth: {
|
||||
user: "stream@graff.tech", // generated ethereal user
|
||||
pass: "zLUbt8Io7dh2F9KT", // generated ethereal password
|
||||
},
|
||||
});
|
||||
|
||||
// send mail with defined transport object
|
||||
try {
|
||||
await transporter.sendMail({
|
||||
from: "stream@graff.tech", // sender address
|
||||
to: username, // list of receivers
|
||||
subject: "Данные аккаунта - stream.graff.tech", // Subject line
|
||||
html: `<div>
|
||||
Пароль для входа в аккаунт: <b>${password}</b>
|
||||
</div>`,
|
||||
});
|
||||
} catch (error) {
|
||||
console.log("error", (error as Error).message);
|
||||
}
|
||||
|
||||
return res.json({ ok: 1 });
|
||||
} catch (error) {
|
||||
return res.json({ error: (error as Error).message });
|
||||
}
|
||||
});
|
||||
|
||||
const addManagerRoute = router;
|
||||
|
||||
export default addManagerRoute;
|
||||
@@ -0,0 +1,57 @@
|
||||
import bcrypt from "bcrypt";
|
||||
import { Router } from "express";
|
||||
import User from "../models/User.js";
|
||||
import { randomBytes } from "crypto";
|
||||
import { createTransport } from "nodemailer";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.post("/", async (req, res) => {
|
||||
const { username } = req.body;
|
||||
|
||||
try {
|
||||
const user = await User.findOne({ username });
|
||||
|
||||
if (!user) {
|
||||
return res.json({ error: "Username not found" });
|
||||
}
|
||||
|
||||
const resetCode = randomBytes(32).toString("hex");
|
||||
|
||||
await User.findByIdAndUpdate(user._id, { resetCode });
|
||||
|
||||
const url = `https://crm.stream.graff.tech/resetConfirm?code=${resetCode}`;
|
||||
|
||||
let transporter = createTransport({
|
||||
host: "mail.netangels.ru",
|
||||
port: 587,
|
||||
secure: false, // true for 465, false for other ports
|
||||
auth: {
|
||||
user: "stream@graff.tech", // generated ethereal user
|
||||
pass: "zLUbt8Io7dh2F9KT", // generated ethereal password
|
||||
},
|
||||
});
|
||||
|
||||
// send mail with defined transport object
|
||||
try {
|
||||
await transporter.sendMail({
|
||||
from: "stream@graff.tech", // sender address
|
||||
to: username, // list of receivers
|
||||
subject: "Сброс пароля - stream.graff.tech", // Subject line
|
||||
html: `<div>
|
||||
Ссылка для сброса пароля: <a href="${url}" target="_blank">${url}</a>
|
||||
</div>`,
|
||||
});
|
||||
} catch (error) {
|
||||
console.log("error", (error as Error).message);
|
||||
}
|
||||
|
||||
return res.json({ ok: 1 });
|
||||
} catch (error) {
|
||||
return res.json({ error: (error as Error).message });
|
||||
}
|
||||
});
|
||||
|
||||
const resetRoute = router;
|
||||
|
||||
export default resetRoute;
|
||||
@@ -0,0 +1,34 @@
|
||||
import bcrypt from "bcrypt";
|
||||
import { Router } from "express";
|
||||
import User from "../models/User.js";
|
||||
import Token from "../models/Token.js";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.post("/", async (req, res) => {
|
||||
const { resetCode, password } = req.body;
|
||||
|
||||
try {
|
||||
const passwordHash = bcrypt.hashSync(password, 12);
|
||||
|
||||
const user = await User.findOneAndUpdate(
|
||||
{ resetCode },
|
||||
{ password: passwordHash }
|
||||
);
|
||||
|
||||
if (!user) {
|
||||
return res.json({ error: "Reset code not valid" });
|
||||
}
|
||||
|
||||
await User.findByIdAndUpdate(user._id, { $unset: { resetCode } });
|
||||
await Token.deleteMany({ userId: user._id });
|
||||
|
||||
return res.json({ ok: 1 });
|
||||
} catch (error) {
|
||||
return res.json({ error: (error as Error).message });
|
||||
}
|
||||
});
|
||||
|
||||
const resetConfirmRoute = router;
|
||||
|
||||
export default resetConfirmRoute;
|
||||
Reference in New Issue
Block a user