From 9adb53e7ab7c866a46f3bb82ea0b09142a2ce5e6 Mon Sep 17 00:00:00 2001 From: ltiongku Date: Wed, 14 Aug 2024 19:44:18 +0800 Subject: [PATCH 1/2] write sms type to db --- .../exceptions/GlobalExceptionHandler.java | 4 ++++ .../exceptions/InvalidFormatExceptions.java | 7 ++++++ .../com/safeqr/app/qrcode/model/SMSModel.java | 2 ++ .../service/SMSVerificationService.java | 22 +++++++++++++++++++ .../safeqr/app/user/service/UserService.java | 4 ++-- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/safeqr/app/exceptions/InvalidFormatExceptions.java diff --git a/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java b/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java index 58ecb35..f7d0e0a 100644 --- a/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java +++ b/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java @@ -16,4 +16,8 @@ public class GlobalExceptionHandler { public ResponseEntity handleResourceAlreadyExistsException(ResourceAlreadyExists e) { return new ResponseEntity<>(new ErrorResponse(e.getMessage(), HttpStatus.BAD_REQUEST.value()), HttpStatus.BAD_REQUEST); } + @ExceptionHandler(InvalidFormatExceptions.class) + public ResponseEntity handleInvalidFormatException(InvalidFormatExceptions e) { + return new ResponseEntity<>(new ErrorResponse(e.getMessage(), HttpStatus.BAD_REQUEST.value()), HttpStatus.BAD_REQUEST); + } } diff --git a/src/main/java/com/safeqr/app/exceptions/InvalidFormatExceptions.java b/src/main/java/com/safeqr/app/exceptions/InvalidFormatExceptions.java new file mode 100644 index 0000000..5d92f54 --- /dev/null +++ b/src/main/java/com/safeqr/app/exceptions/InvalidFormatExceptions.java @@ -0,0 +1,7 @@ +package com.safeqr.app.exceptions; + +public class InvalidFormatExceptions extends RuntimeException { + public InvalidFormatExceptions(String message){ + super(message); + } +} diff --git a/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java b/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java index 3dfd600..9b020db 100644 --- a/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java +++ b/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java @@ -27,6 +27,8 @@ public final class SMSModel extends QRCodeModel { @Override public void setDetails() { details = SMSEntity.builder().qrCodeId(data.getId()).build(); + + smsVerificationService.parseSMSString(details, data.getContents()); // Insert into sms table smsVerificationService.insertDB(details); } diff --git a/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java b/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java index 90ee218..1c1848a 100644 --- a/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java +++ b/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java @@ -1,5 +1,6 @@ package com.safeqr.app.qrcode.service; +import com.safeqr.app.exceptions.InvalidFormatExceptions; import com.safeqr.app.exceptions.ResourceNotFoundExceptions; import com.safeqr.app.qrcode.entity.SMSEntity; import com.safeqr.app.qrcode.repository.SMSRepository; @@ -29,4 +30,25 @@ public class SMSVerificationService { smsRepository.save(smsEntity); } + public void parseSMSString(SMSEntity smsEntity, String smsto) throws IllegalArgumentException{ + // Remove the "SMSTO:" prefix + String data = smsto.substring(6); + + // Split the data into phone number and message + String[] parts = data.split(":", 2); + + // If both phone number and message are available + if (parts.length == 2) { + String phone = parts[0]; + String message = parts[1]; + + // Populate the SMSEntity object + smsEntity.setPhone(phone); + smsEntity.setMessage(message); + } else { + // Handle the case where the format is invalid + throw new InvalidFormatExceptions("Invalid SMSTO format. Expected format: SMSTO::"); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/safeqr/app/user/service/UserService.java b/src/main/java/com/safeqr/app/user/service/UserService.java index 190f7ec..6f3e04e 100644 --- a/src/main/java/com/safeqr/app/user/service/UserService.java +++ b/src/main/java/com/safeqr/app/user/service/UserService.java @@ -2,7 +2,7 @@ package com.safeqr.app.user.service; import com.safeqr.app.exceptions.ResourceAlreadyExists; import com.safeqr.app.exceptions.ResourceNotFoundExceptions; -import com.safeqr.app.qrcode.entity.ScanBookmarkEntity; + import com.safeqr.app.qrcode.entity.ScanHistoryEntity; import com.safeqr.app.qrcode.repository.ScanBookmarkRepository; import com.safeqr.app.qrcode.repository.ScanHistoryRepository; @@ -14,7 +14,7 @@ import com.safeqr.app.user.repository.UserRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataIntegrityViolationException; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; From b176e5c54f947cd40e098e494f2a129554db16fc Mon Sep 17 00:00:00 2001 From: heyethereum Date: Wed, 14 Aug 2024 21:15:29 +0800 Subject: [PATCH 2/2] fix gmail scan null results --- .../controller/QRCodeTypeController.java | 9 ------ .../app/qrcode/dto/RedirectCountResponse.java | 9 ------ .../app/qrcode/entity/QRCodeEntity.java | 2 ++ .../safeqr/app/qrcode/entity/URLEntity.java | 1 + .../app/qrcode/service/QRCodeTypeService.java | 3 ++ .../qrcode/service/RedirectCountService.java | 30 ------------------- .../service/SMSVerificationService.java | 4 +++ 7 files changed, 10 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/com/safeqr/app/qrcode/dto/RedirectCountResponse.java delete mode 100644 src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java diff --git a/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java b/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java index 0a66533..87e1968 100644 --- a/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java +++ b/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java @@ -3,11 +3,9 @@ package com.safeqr.app.qrcode.controller; import static com.safeqr.app.constants.APIConstants.*; import static com.safeqr.app.constants.CommonConstants.*; import com.safeqr.app.qrcode.dto.request.QRCodePayload; -import com.safeqr.app.qrcode.dto.RedirectCountResponse; import com.safeqr.app.qrcode.dto.response.BaseScanResponse; import com.safeqr.app.qrcode.entity.QRCodeTypeEntity; import com.safeqr.app.qrcode.service.QRCodeTypeService; -import com.safeqr.app.qrcode.service.RedirectCountService; import com.safeqr.app.qrcode.service.URLVerificationService; import com.safeqr.app.qrcode.service.VirusTotalService; import org.slf4j.Logger; @@ -35,9 +33,6 @@ public class QRCodeTypeController { @Autowired private VirusTotalService virusTotalService; - @Autowired - private RedirectCountService redirectCountService; - @GetMapping(value = API_URL_QRCODE_GET_ALL) public ResponseEntity> getAllTypes() { return ResponseEntity.ok(qrCodeTypeService.getAllTypes()); @@ -79,9 +74,5 @@ public class QRCodeTypeController { } } - @PostMapping(API_URL_QRCODE_REDIRECT_COUNT) - public ResponseEntity checkRedirects(@RequestBody QRCodePayload payload) { - return ResponseEntity.ok(redirectCountService.countRedirects(payload).block()); - } } \ No newline at end of file diff --git a/src/main/java/com/safeqr/app/qrcode/dto/RedirectCountResponse.java b/src/main/java/com/safeqr/app/qrcode/dto/RedirectCountResponse.java deleted file mode 100644 index ad34005..0000000 --- a/src/main/java/com/safeqr/app/qrcode/dto/RedirectCountResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.safeqr.app.qrcode.dto; - -import lombok.Data; - -@Data -public class RedirectCountResponse { - private int redirectCount; - private String message; -} \ No newline at end of file diff --git a/src/main/java/com/safeqr/app/qrcode/entity/QRCodeEntity.java b/src/main/java/com/safeqr/app/qrcode/entity/QRCodeEntity.java index b6fc2ca..17680d6 100644 --- a/src/main/java/com/safeqr/app/qrcode/entity/QRCodeEntity.java +++ b/src/main/java/com/safeqr/app/qrcode/entity/QRCodeEntity.java @@ -2,6 +2,7 @@ package com.safeqr.app.qrcode.entity; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; @@ -39,6 +40,7 @@ public class QRCodeEntity { @Column(name = "created_at", insertable = false, updatable = false) private LocalDateTime createdAt; + @JsonInclude(JsonInclude.Include.NON_EMPTY) @Column(name = "result_category") private String result = CLASSIFY_UNKNOWN; } diff --git a/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java b/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java index 0d22e74..c8d3464 100644 --- a/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java +++ b/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java @@ -23,6 +23,7 @@ import java.util.UUID; @NoArgsConstructor @AllArgsConstructor public class URLEntity { + @JsonInclude(JsonInclude.Include.NON_EMPTY) @Column(name="classifications") private String classifications; diff --git a/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java b/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java index 32e5153..807c5f7 100644 --- a/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java +++ b/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java @@ -138,6 +138,9 @@ public class QRCodeTypeService { QRCodeModel qrCodeModel = qrCodeFactoryProvider.createQRCodeInstance(scannedQR); qrCodeModel.setDetails(); + // Get classifications based on verifications + scannedQR.setResult(qrCodeModel.retrieveClassification()); + return qrCodeModel; } // Returns Default type as text if it does not fit into any of the category diff --git a/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java b/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java deleted file mode 100644 index 82ff172..0000000 --- a/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java +++ /dev/null @@ -1,30 +0,0 @@ - -package com.safeqr.app.qrcode.service; - -import com.safeqr.app.qrcode.dto.request.QRCodePayload; -import com.safeqr.app.qrcode.dto.RedirectCountResponse; -import org.springframework.stereotype.Service; -import org.springframework.web.reactive.function.client.WebClient; -import reactor.core.publisher.Mono; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Service -public class RedirectCountService { - private static final Logger logger = LoggerFactory.getLogger(RedirectCountService.class); - - public Mono countRedirects(QRCodePayload payload) { - String url = payload.getData(); - logger.info("RedirectCountService: countRedirects: url={}", url); - - return WebClient.create() - .get() - .uri("https://google.com")// replace with url when logic is complete - .exchangeToMono(response -> { - RedirectCountResponse redirectCountResponse = new RedirectCountResponse(); - redirectCountResponse.setRedirectCount(response.cookies().size()); - redirectCountResponse.setMessage("Redirect count calculated."); - return Mono.just(redirectCountResponse); - }); - } -} diff --git a/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java b/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java index 1c1848a..c55fe7e 100644 --- a/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java +++ b/src/main/java/com/safeqr/app/qrcode/service/SMSVerificationService.java @@ -31,6 +31,10 @@ public class SMSVerificationService { } public void parseSMSString(SMSEntity smsEntity, String smsto) throws IllegalArgumentException{ + // Validate the string format + if (smsto == null || smsto.isEmpty()) { + throw new InvalidFormatExceptions("sms cannot be null or empty."); + } // Remove the "SMSTO:" prefix String data = smsto.substring(6);