diff --git a/pom.xml b/pom.xml
index 24fb5d14..4760d6ec 100755
--- a/pom.xml
+++ b/pom.xml
@@ -153,11 +153,11 @@
akismet-kotlin
1.0.0
+
-
- com.google.zxing
- javase
- 3.5.3
+ net.logicsquad
+ qr4j
+ 1.0
diff --git a/src/main/java/com/erudika/scoold/controllers/SettingsController.java b/src/main/java/com/erudika/scoold/controllers/SettingsController.java
index 0e042c51..0e9dc365 100755
--- a/src/main/java/com/erudika/scoold/controllers/SettingsController.java
+++ b/src/main/java/com/erudika/scoold/controllers/SettingsController.java
@@ -30,22 +30,15 @@
import com.erudika.scoold.utils.ScooldUtils;
import com.erudika.scoold.utils.avatars.AvatarRepository;
import com.erudika.scoold.utils.avatars.AvatarRepositoryProxy;
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.client.j2se.MatrixToImageWriter;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.qrcode.QRCodeWriter;
import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-import jakarta.ws.rs.WebApplicationException;
-import jakarta.ws.rs.core.StreamingOutput;
-import java.io.IOException;
-import java.io.OutputStream;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import net.logicsquad.qr4j.QrCode;
import org.apache.commons.codec.binary.Base32;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
@@ -183,7 +176,7 @@ public String reset2FA(HttpServletRequest req, HttpServletResponse res) {
return "redirect:" + SETTINGSLINK;
}
- @GetMapping(path = "/qr", produces = "image/png")
+ @GetMapping(path = "/qr", produces = "image/svg+xml")
public void generate2FAQRCode(HttpServletRequest req, HttpServletResponse res) {
if (!utils.isAuthenticated(req)) {
return;
@@ -201,19 +194,11 @@ public void generate2FAQRCode(HttpServletRequest req, HttpServletResponse res) {
user.getEmail(), new Base32().encodeAsString(user.getTwoFAkey().
replaceAll("=", "").getBytes()).replaceAll("=", ""));
- QRCodeWriter writer = new QRCodeWriter();
- final BitMatrix matrix;
try {
- matrix = writer.encode(otpProtocol, BarcodeFormat.QR_CODE, 300, 300);
- StreamingOutput qrCode = new StreamingOutput() {
- @Override
- public void write(OutputStream os) throws IOException, WebApplicationException {
- MatrixToImageWriter.writeToStream(matrix, "PNG", os);
- os.flush();
- }
- };
- res.setContentType("image/png");
- qrCode.write(res.getOutputStream());
+ QrCode qr = QrCode.encodeText(otpProtocol, QrCode.Ecc.MEDIUM);
+ res.setContentType("image/svg+xml");
+ res.getOutputStream().write(qr.toSvg(1, "#FFF", "#000").getBytes());
+ res.getOutputStream().flush();
} catch (Exception ex) {
return;
}