diff --git a/src/routes/tokens.js b/src/routes/tokens.js
index a38bc56..d9f9183 100644
--- a/src/routes/tokens.js
+++ b/src/routes/tokens.js
@@ -74,13 +74,15 @@ router.post("/",
middlewareRestrictor(10, 3600, false),
async (req, res) => {
// Check user exists by the email address
- if (!(await User.findOne({email: req.body.email}).exec())) {
+ const user = await User.findOne({email: req.body.email}).exec();
+ if (!user) {
res.sendStatus(StatusCodes.NOT_FOUND);
return;
}
// Handle code and metadata
const metadata = {
+ userId: user._id,
email: req.body.email,
};
const {code, sessionId} = utilCodeSession.
@@ -89,9 +91,11 @@ router.post("/",
// Handle mail
try {
await utilMailSender("create_token", {
+ name: user.nickname,
to: req.body.email,
website: getMust("SARA_AUDIENCE_URL"),
ip_address: utilVisitor.getIPAddress(req),
+ session_id: sessionId,
code,
});
if (getMust("NODE_ENV") === "testing") {
@@ -176,6 +180,12 @@ router.patch("/",
return;
}
+ // Check metadata user id
+ if (user._id !== metadata.userId) {
+ res.sendStatus(StatusCodes.FORBIDDEN);
+ return;
+ }
+
// Handle authentication
const userData = user.toObject();
const token = utilXaraToken.
diff --git a/src/routes/users.js b/src/routes/users.js
index 276991b..955a973 100644
--- a/src/routes/users.js
+++ b/src/routes/users.js
@@ -188,9 +188,12 @@ router.put("/me/email",
// Handle mail
try {
await utilMailSender("update_email", {
+ name: req.auth.metadata?.profile?.name,
+ origin: req.auth.metadata?.profile?.email,
to: req.body.email,
website: getMust("SARA_AUDIENCE_URL"),
ip_address: utilVisitor.getIPAddress(req),
+ session_id: sessionId,
code,
});
if (getMust("NODE_ENV") === "testing") {
@@ -346,9 +349,11 @@ router.post("/",
// Handle mail
try {
await utilMailSender("create_user", {
+ name: metadata.nickname,
to: req.body.email,
website: getMust("SARA_AUDIENCE_URL"),
ip_address: utilVisitor.getIPAddress(req),
+ session_id: sessionId,
code,
});
if (getMust("NODE_ENV") === "testing") {
diff --git a/src/templates/mail/create_token.js b/src/templates/mail/create_token.js
index f04b20b..0810c0d 100644
--- a/src/templates/mail/create_token.js
+++ b/src/templates/mail/create_token.js
@@ -3,29 +3,42 @@
module.exports = {
subject: (data) => `登入 ${data.website} 上的Sara系統`,
text: (data) => `
- 您好,這裡是 ${data.website} 網站,有人申請使用您的信箱 ${data.to} 進行登入。
+ 您好,這裡是 ${data.website} 網站。
+ 使用者 ${data.name} 申請使用您的信箱 ${data.to} 進行登入。
- 這裡是您的登入代碼:${data.code}
+ 這裡是您的登入代碼:
+ ${data.code}
- 這份請求來自於IP:${data.ip_address}
+ 這份請求來自於 IP 位址:
+ ${data.ip_address}
若您未曾請求過該代碼,請您無視本電子郵件。
+ ${data.session_id} (${data.timestamp})
- 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由臺灣網際網路技術推廣組織(https://web-tech-tw.github.io)提供技術支援。
+ 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,
+ 由臺灣網際網路技術推廣組織(https://web-tech.tw)提供技術支援。
`,
html: (data) => `
- 您好,這裡是 ${data.website} 網站,有人申請使用您的信箱 ${data.to} 進行登入
+
+ 您好,這裡是 ${data.website} 網站。
+ 使用者 ${data.name} 申請使用您的信箱 ${data.to} 進行登入。
+
這裡是您的登入代碼:
${data.code}
- 這份請求來自於IP:
+ 這份請求來自於 IP 位址:
${data.ip_address}
若您未曾請求過該代碼,請您無視本電子郵件。
- 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由 - 臺灣網際網路技術推廣組織 - 提供技術支援。
+ 若您未曾請求過該代碼,請您無視本電子郵件。
+ ${data.session_id} (${data.timestamp})
+
+ 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由
+ 臺灣網際網路技術推廣組織
+ 提供技術支援。
+
+ 您好,這裡是 ${data.website} 網站。
+ 使用者 ${data.name} 申請使用您的信箱 ${data.to} 進行註冊。
+
這裡是您的註冊代碼:
${data.code}
- 這份請求來自於IP:
+ 這份請求來自於 IP 位址:
${data.ip_address}
若您未曾請求過該代碼,請您無視本電子郵件。
- 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由 - 臺灣網際網路技術推廣組織 - 提供技術支援。
+ 若您未曾請求過該代碼,請您無視本電子郵件。
+ ${data.session_id} (${data.timestamp})
+
+ 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由
+ 臺灣網際網路技術推廣組織
+ 提供技術支援。
+
+ 您好,這裡是 ${data.website} 網站。
+ 使用者 ${data.name} 將帳號轉移到您的信箱 ${data.to} 上。
+
這裡是您的轉移代碼:
${data.code}
- 這份請求來自於IP:
+ 這份請求來自於 IP 位址
${data.ip_address}
若您未曾請求過該代碼,請您無視本電子郵件。
- 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由 - 臺灣網際網路技術推廣組織 - 提供技術支援。
+ 若您未曾請求過該代碼,請您無視本電子郵件。
+ ${data.session_id} (${data.timestamp})
+
+ 「Sara系統」是一個開放原始碼的無密碼式身份認證解決方案,由
+ 臺灣網際網路技術推廣組織
+ 提供技術支援。
+