diff --git a/pom.xml b/pom.xml
index 8bc16f2..1590d99 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,21 +85,25 @@
google-api-services-gmail
v1-rev20240520-2.0.0
+
org.json
json
- 20210307
+ 20240303
+
com.google.zxing
core
- 3.4.1
+ 3.5.3
+
com.google.zxing
javase
- 3.4.1
+ 3.5.3
+
diff --git a/src/main/java/com/safeqr/app/constants/APIConstants.java b/src/main/java/com/safeqr/app/constants/APIConstants.java
index b9086b0..8c0e85a 100644
--- a/src/main/java/com/safeqr/app/constants/APIConstants.java
+++ b/src/main/java/com/safeqr/app/constants/APIConstants.java
@@ -4,6 +4,7 @@ public class APIConstants {
private APIConstants() {
//private constructor to prevent instantiation
}
+ public static final String APPLICATION_NAME = "SafeQR";
public static final String API_VERSION = "v1";
public static final String API_URL_QRCODE_GET_ALL = "/qrcodetypes";
public static final String API_URL_QRCODE_SCAN = "/qrcodetypes/scan";
diff --git a/src/main/java/com/safeqr/app/gmail/controller/GmailController.java b/src/main/java/com/safeqr/app/gmail/controller/GmailController.java
index dba90b8..7be12ac 100644
--- a/src/main/java/com/safeqr/app/gmail/controller/GmailController.java
+++ b/src/main/java/com/safeqr/app/gmail/controller/GmailController.java
@@ -1,8 +1,9 @@
package com.safeqr.app.gmail.controller;
+import com.google.api.client.auth.oauth2.BearerToken;
+import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.model.MessagePart;
-import com.google.api.services.gmail.model.MessagePartHeader;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
@@ -38,7 +39,7 @@ import org.springframework.web.servlet.view.RedirectView;
import javax.imageio.ImageIO;
-import static com.safeqr.app.constants.APIConstants.API_VERSION;
+import static com.safeqr.app.constants.APIConstants.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
@@ -56,9 +57,7 @@ import java.util.regex.Pattern;
public class GmailController {
private static final Logger logger = LoggerFactory.getLogger(GmailController.class);
GmailService gmailService;
-
- private static final String APPLICATION_NAME = "SafeQR App";
- private static HttpTransport httpTransport;
+ private static HttpTransport httpTransport = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static com.google.api.services.gmail.Gmail client;
@@ -80,7 +79,7 @@ public class GmailController {
this.gmailService = gmailService;
}
- @RequestMapping(value = "/gmail/login", method = RequestMethod.GET)
+ @GetMapping(value = "/gmail/login")
public RedirectView googleConnectionStatus(HttpServletRequest request) throws Exception {
return new RedirectView(authorize());
}
@@ -102,18 +101,17 @@ public class GmailController {
//.setApprovalPrompt("force") // force refresh token
;
- System.out.println("gmail authorizationUrl ->" + authorizationUrl);
+ logger.info("gmail authorizationUrl -> {}", authorizationUrl);
return authorizationUrl.build();
}
- @RequestMapping(value = "/gmail/callback", method = RequestMethod.GET, params = "code")
+ @GetMapping(value = "/gmail/callback", params = "code")
public ResponseEntity oauth2Callback(@RequestParam(value = "code") String code) {
// System.out.println("code->" + code + " userId->" + userId + "
// query->" + query);
-
JSONObject json = new JSONObject();
- JSONArray emailArray = new JSONArray();
+
// String message;
try {
@@ -123,44 +121,6 @@ public class GmailController {
logger.info(credential.getRefreshToken());
logger.info(credential.toString());
- // Build the Gmail service
- Gmail service = new Gmail.Builder(httpTransport, JSON_FACTORY, credential)
- .setApplicationName(APPLICATION_NAME)
- .build();
-
- // Get the list of messages
- ListMessagesResponse listResponse = service.users().messages().list("me").execute();
- List messages = listResponse.getMessages();
-
- if (messages != null && !messages.isEmpty()) {
- for (Message message : messages) {
- Message fullMessage = service.users().messages().get("me", message.getId()).setFormat("full").execute();
-
- if (containsQRCode(fullMessage)) {
- JSONObject emailJson = new JSONObject();
- emailJson.put("id", fullMessage.getId());
-
- // Extract subject
- String subject = "";
- for (MessagePartHeader header : fullMessage.getPayload().getHeaders()) {
- if (header.getName().equals("Subject")) {
- subject = header.getValue();
- break;
- }
- }
- emailJson.put("subject", subject);
-
- // Extract snippet
- emailJson.put("snippet", fullMessage.getSnippet());
-
- emailArray.put(emailJson);
- }
- }
- }
-
- json.put("emails_with_qr_codes", emailArray);
-
-
} catch (Exception e) {
@@ -170,6 +130,56 @@ public class GmailController {
return new ResponseEntity<>(json.toString(), HttpStatus.OK);
}
+
+ @GetMapping(value = "/gmail/getEmails", produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity> getUserEmails(@RequestHeader(name = "accessToken") String accessToken) throws IOException {
+ logger.info("Invoking GET User Emails endpoints");
+ if (accessToken == null || accessToken.isEmpty()) {
+ return new ResponseEntity<>("Access token is missing", HttpStatus.BAD_REQUEST);
+ }
+
+ JSONObject json;
+ try {
+ json = getEmail(accessToken);
+ } catch (Exception e) {
+ logger.error("Error getting emails: ", e);
+ return new ResponseEntity<>("Failed to get emails", HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+
+ return new ResponseEntity<>(json.toString(), HttpStatus.OK);
+ }
+
+ private Gmail getGmailService(String accessToken) {
+ Credential userCredentials = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken);
+ return new Gmail.Builder(httpTransport, JSON_FACTORY, userCredentials)
+ .setApplicationName(APPLICATION_NAME)
+ .build();
+ }
+
+ private JSONObject getEmail(String accessToken) throws IOException {
+ JSONObject json = new JSONObject();
+ JSONArray emailArray = new JSONArray();
+
+ // Build the Gmail service
+ Gmail service = getGmailService(accessToken);
+ logger.info("service-> {}", service);
+
+ // Get the list of messages
+ ListMessagesResponse listResponse = service.users().messages().list("me").execute();
+ List messages = listResponse.getMessages();
+
+ if (messages != null && !messages.isEmpty()) {
+ Message message = service.users().messages().get("me", messages.get(0).getId()).setFormat("full").execute();
+ logger.info("message-> {}", message);
+
+ if (containsQRCode(message)) {
+ emailArray.put(message.getId());
+ }
+ }
+
+ json.put("emails_with_qr_codes", emailArray);
+ return json;
+ }
private boolean containsQRCode(Message message) throws IOException {
if (message.getPayload().getParts() != null) {
for (MessagePart part : message.getPayload().getParts()) {