diff --git a/captcha-service/app.js b/captcha-service/app.js index 24340c6..820da22 100644 --- a/captcha-service/app.js +++ b/captcha-service/app.js @@ -32,7 +32,7 @@ db.defaults({ captchas: [] }).write(); app.listen(port, host, () => console.log(`listening on port: ${port}`)); app.get("/", (request, response) => { - const captchaParsed = Math.random().toString(36).substr(2,6).toUpperCase(); + const captchaParsed = parseInt(Math.random() * 900000 + 100000); var p = new captchapng(120, 30, captchaParsed); // width,height,numeric captcha p.color(0, 0, 0, 0); // First color: background (red, green, blue, alpha) p.color(80, 80, 80, 255); // Second color: paint (red, green, blue, alpha) @@ -83,7 +83,7 @@ app.get("/verify", (request, response) => { } deleteUsedCaptcha(token); - if (userResponse === (captcha && captcha.captchaParsed)) { + if (parseInt(userResponse) === (captcha && captcha.captchaParsed)) { response.status(200).send({ status: "Success" }); } else { response.status(400).send({ status: "Code Incorrect" }); @@ -95,4 +95,4 @@ app.get("/verify", (request, response) => { }); function deleteUsedCaptcha(token) { db.get("captchas").remove({ token: token }).write(); -} \ No newline at end of file +} diff --git a/portal/components/login/login.js b/portal/components/login/login.js index cd804dd..af088b5 100644 --- a/portal/components/login/login.js +++ b/portal/components/login/login.js @@ -6,7 +6,7 @@ import controls from "./form.config"; import styles from "../../styles/Login.module.css"; import axios from "axios"; import Image from "next/image"; -const CryptoJS = require('crypto-js'); +const CryptoJS = require("crypto-js"); export default function Login(props) { const { persona } = props; @@ -53,7 +53,6 @@ export default function Login(props) { setCaptchaToken(token); }) .catch((err) => { - console.log(err) addToast(err.response?.data?.errors || err.message, { appearance: "error", }); @@ -64,7 +63,7 @@ export default function Login(props) { e.preventDefault(); let rightNow = new Date(); - try{ + try { const result = await axios({ method: "POST", url: `${process.env.NEXT_PUBLIC_CAPTCHA_URL}`, @@ -73,22 +72,34 @@ export default function Login(props) { token: captchaToken, }, }); - } catch (err) { - addToast('Incorect Captcha/ Captcha कोड गलत है!', { appearance: "error" }); + } catch (err) { + addToast("Incorect Captcha/ Captcha कोड गलत है!", { + appearance: "error", + }); setRefreshToken(rightNow.toISOString()); return false; } - const parsedBase64Key = CryptoJS.enc.Base64.parse(process.env.NEXT_PUBLIC_BASE64_KEY); - let encryptedUsername = CryptoJS.AES.encrypt(input.username, parsedBase64Key, { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.Pkcs7 - }) - encryptedUsername = encryptedUsername.toString(); - const encryptedPassword = CryptoJS.AES.encrypt(input.password, parsedBase64Key, { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.Pkcs7 - }).toString(); + const parsedBase64Key = CryptoJS.enc.Base64.parse( + process.env.NEXT_PUBLIC_BASE64_KEY + ); + let encryptedUsername = CryptoJS.AES.encrypt( + input.username, + parsedBase64Key, + { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + } + ); + encryptedUsername = encryptedUsername.toString(); + const encryptedPassword = CryptoJS.AES.encrypt( + input.password, + parsedBase64Key, + { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + } + ).toString(); const { error, url } = await signIn("fusionauth", { loginId: encryptedUsername, diff --git a/portal/components/react-admin/base/resources/teachers.js b/portal/components/react-admin/base/resources/teachers.js index 7cb2b21..3c90c53 100644 --- a/portal/components/react-admin/base/resources/teachers.js +++ b/portal/components/react-admin/base/resources/teachers.js @@ -242,8 +242,8 @@ export const TeacherEdit = (props) => { const response = await sendSMS(template, templateId, data.user.mobile_phone); if (response?.success) notify(response.success, "info"); else if (response?.error) notify(response.error, "warning"); - redirect("list", props.basePath, data.id, data); } + redirect("list", props.basePath, data.id, data); } }; @@ -284,20 +284,26 @@ export const TeacherEdit = (props) => { Update Status -
Changing status will trigger an SMS notification to the teacher upon diff --git a/portal/pages/api/auth/[...nextauth].js b/portal/pages/api/auth/[...nextauth].js index 00cb1cd..df4b786 100644 --- a/portal/pages/api/auth/[...nextauth].js +++ b/portal/pages/api/auth/[...nextauth].js @@ -1,22 +1,32 @@ import NextAuth from "next-auth"; import Providers from "next-auth/providers"; import axios from "axios"; -const CryptoJS = require('crypto-js'); +const CryptoJS = require("crypto-js"); const fusionAuthLogin = async (path, credentials) => { - const base64Key = CryptoJS.enc.Base64.parse(process.env.NEXT_PUBLIC_BASE64_KEY); - let byteEncodedUsername = CryptoJS.AES.decrypt(credentials.loginId, base64Key, { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.Pkcs7 - }); + const base64Key = CryptoJS.enc.Base64.parse( + process.env.NEXT_PUBLIC_BASE64_KEY + ); + let byteEncodedUsername = CryptoJS.AES.decrypt( + credentials.loginId, + base64Key, + { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + } + ); let decryptedLoginId = byteEncodedUsername.toString(CryptoJS.enc.Utf8); - let byteEncodedPassword = CryptoJS.AES.decrypt(credentials.password, base64Key, { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.Pkcs7 - }); + let byteEncodedPassword = CryptoJS.AES.decrypt( + credentials.password, + base64Key, + { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + } + ); let decryptedPassword = byteEncodedPassword.toString(CryptoJS.enc.Utf8); - + const options = { headers: { Authorization: process.env.FUSIONAUTH_API_KEY }, }; @@ -45,7 +55,9 @@ export default NextAuth({ process.env.FUSIONAUTH_DOMAIN, credentials ); - if (response) { + if (response.data?.responseCode == "FAILURE") { + throw new Error(response.data?.params?.errMsg); + } else { return response.data?.result?.data?.user; } } catch (err) { @@ -81,4 +93,4 @@ export default NextAuth({ return session; }, }, -}); \ No newline at end of file +});