added other types of qrcodes like phone, sms, email, wifi

This commit is contained in:
heyethereum
2024-07-18 00:47:01 +08:00
parent 3e0ad7db2d
commit 686c4f939e
35 changed files with 612 additions and 132 deletions

View File

@@ -0,0 +1,31 @@
package com.safeqr.app.qrcode.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Builder;
import org.hibernate.annotations.UuidGenerator;
import java.util.UUID;
@Entity
@Table(name = "email", schema = "safeqr")
@Data
@Builder
public class EmailEntity {
@Id
@JsonIgnore
@GeneratedValue(generator = "UUID")
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@JsonIgnore
@Column(name = "qr_code_id")
private UUID qrCodeId;
private String email;
private String title;
private String message;
}

View File

@@ -0,0 +1,29 @@
package com.safeqr.app.qrcode.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Builder;
import org.hibernate.annotations.UuidGenerator;
import java.util.UUID;
@Entity
@Table(name = "phone", schema = "safeqr")
@Data
@Builder
public class PhoneEntity {
@Id
@JsonIgnore
@GeneratedValue(generator = "UUID")
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@JsonIgnore
@Column(name = "qr_code_id")
private UUID qrCodeId;
private String phone;
}

View File

@@ -0,0 +1,30 @@
package com.safeqr.app.qrcode.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Builder;
import org.hibernate.annotations.UuidGenerator;
import java.util.UUID;
@Entity
@Table(name = "sms", schema = "safeqr")
@Data
@Builder
public class SMSEntity {
@Id
@JsonIgnore
@GeneratedValue(generator = "UUID")
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@JsonIgnore
@Column(name = "qr_code_id")
private UUID qrCodeId;
private String phone;
private String message;
}

View File

@@ -4,8 +4,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import org.hibernate.annotations.UuidGenerator; import org.hibernate.annotations.UuidGenerator;
@@ -15,9 +13,7 @@ import java.util.UUID;
@Table(name = "text", schema = "safeqr") @Table(name = "text", schema = "safeqr")
@Data @Data
@Builder @Builder
@NoArgsConstructor public class TextEntity {
@AllArgsConstructor
public class QRCodeTextEntity {
@Id @Id
@JsonIgnore @JsonIgnore
@GeneratedValue(generator = "UUID") @GeneratedValue(generator = "UUID")

View File

@@ -18,7 +18,7 @@ import java.util.UUID;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class QRCodeURLEntity { public class URLEntity {
@Id @Id
@JsonIgnore @JsonIgnore
@GeneratedValue(generator = "UUID") @GeneratedValue(generator = "UUID")

View File

@@ -0,0 +1,32 @@
package com.safeqr.app.qrcode.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Builder;
import org.hibernate.annotations.UuidGenerator;
import java.util.UUID;
@Entity
@Table(name = "wifi", schema = "safeqr")
@Data
@Builder
public class WifiEntity {
@Id
@JsonIgnore
@GeneratedValue(generator = "UUID")
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@JsonIgnore
@Column(name = "qr_code_id")
private UUID qrCodeId;
private String ssid;
private String password;
private String encryption;
private boolean hidden;
}

View File

@@ -0,0 +1,36 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.EmailVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class EmailModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(EmailModel.class);
@JsonIgnore
private final EmailVerificationService emailVerificationService;
EmailEntity details;
public EmailModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, EmailVerificationService emailVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.emailVerificationService = emailVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = EmailEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into email table
emailVerificationService.insertDB(details);
}
}

View File

@@ -0,0 +1,36 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.PhoneEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.PhoneVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class PhoneModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(PhoneModel.class);
@JsonIgnore
private final PhoneVerificationService phoneVerificationService;
PhoneEntity details;
public PhoneModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, PhoneVerificationService phoneVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.phoneVerificationService = phoneVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = PhoneEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into phone table
phoneVerificationService.insertDB(details);
}
}

View File

@@ -9,5 +9,5 @@ public abstract class QRCodeModel {
QRCodeEntity scannedQRCode; QRCodeEntity scannedQRCode;
QRCodeTypeEntity qrCode; QRCodeTypeEntity qrCode;
public abstract void insertDB(); public abstract void setDetails();
} }

View File

@@ -0,0 +1,36 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.SMSEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.SMSVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class SMSModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(SMSModel.class);
@JsonIgnore
private final SMSVerificationService smsVerificationService;
SMSEntity details;
public SMSModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, SMSVerificationService smsVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.smsVerificationService = smsVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = SMSEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into sms table
smsVerificationService.insertDB(details);
}
}

View File

@@ -2,9 +2,8 @@ package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity; import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTextEntity; import com.safeqr.app.qrcode.entity.TextEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity; import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.repository.TextRepository;
import com.safeqr.app.qrcode.service.TextVerificationService; import com.safeqr.app.qrcode.service.TextVerificationService;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -13,28 +12,25 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class QRCodeText extends QRCodeModel { public class TextModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(QRCodeText.class); private static final Logger logger = LoggerFactory.getLogger(TextModel.class);
@JsonIgnore @JsonIgnore
private final TextVerificationService textVerificationService; private final TextVerificationService textVerificationService;
@JsonIgnore
private final TextRepository textRepository;
QRCodeTextEntity details; TextEntity details;
public QRCodeText(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, TextVerificationService textVerificationService, TextRepository textRepository) { public TextModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, TextVerificationService textVerificationService) {
this.scannedQRCode = scannedQRCodeEntity; this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity; this.qrCode = qrCodeTypeEntity;
this.textVerificationService = textVerificationService; this.textVerificationService = textVerificationService;
this.textRepository = textRepository;
this.details = null; this.details = null;
} }
@Override @Override
public void insertDB() { public void setDetails() {
details = QRCodeTextEntity.builder().qrCodeId(scannedQRCode.getId()).text(scannedQRCode.getContents()).build(); details = TextEntity.builder().qrCodeId(scannedQRCode.getId()).text(scannedQRCode.getContents()).build();
// Insert into URL table // Insert into text table
textRepository.save(details); textVerificationService.insertDB(details);
} }
} }

View File

@@ -3,12 +3,12 @@ package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity; import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity; import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.entity.QRCodeURLEntity; import com.safeqr.app.qrcode.entity.URLEntity;
import com.safeqr.app.qrcode.repository.URLRepository;
import com.safeqr.app.qrcode.service.URLVerificationService; import com.safeqr.app.qrcode.service.URLVerificationService;
import lombok.*; import lombok.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
@@ -16,25 +16,22 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class QRCodeURL extends QRCodeModel { public class URLModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(QRCodeURL.class); private static final Logger logger = LoggerFactory.getLogger(URLModel.class);
@JsonIgnore @JsonIgnore
private final URLVerificationService urlVerificationService; private final URLVerificationService urlVerificationService;
@JsonIgnore
private final URLRepository urlRepository;
QRCodeURLEntity details; URLEntity details;
@Autowired
public QRCodeURL(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, URLVerificationService urlVerificationService, URLRepository urlRepository) { public URLModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, URLVerificationService urlVerificationService) {
this.scannedQRCode = scannedQRCodeEntity; this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity; this.qrCode = qrCodeTypeEntity;
this.urlVerificationService = urlVerificationService; this.urlVerificationService = urlVerificationService;
this.urlRepository = urlRepository;
this.details = null; this.details = null;
} }
@Override @Override
public void insertDB() { public void setDetails() {
String url = scannedQRCode.getContents(); String url = scannedQRCode.getContents();
try { try {
details = urlVerificationService.breakdownURL(url); details = urlVerificationService.breakdownURL(url);
@@ -45,7 +42,7 @@ public class QRCodeURL extends QRCodeModel {
details.setRedirectChain(redirectChain); details.setRedirectChain(redirectChain);
// Insert into URL table // Insert into URL table
urlRepository.save(details); urlVerificationService.insertDB(details);
} catch (IOException | URISyntaxException e) { } catch (IOException | URISyntaxException e) {
logger.error("Error: ", e); logger.error("Error: ", e);

View File

@@ -0,0 +1,36 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.WifiEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.WifiVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class WifiModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(WifiModel.class);
@JsonIgnore
private final WifiVerificationService wifiVerificationService;
WifiEntity details;
public WifiModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, WifiVerificationService wifiVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.wifiVerificationService = wifiVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = WifiEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into wifi table
wifiVerificationService.insertDB(details);
}
}

View File

@@ -0,0 +1,24 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.EmailModel;
import com.safeqr.app.qrcode.service.EmailVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class EmailFactory implements QRCodeFactory<EmailModel> {
private final EmailVerificationService emailVerificationService;
@Autowired
public EmailFactory(EmailVerificationService emailVerificationService) {
this.emailVerificationService = emailVerificationService;
}
@Override
public EmailModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new EmailModel(scannedQRCodeEntity, qrCodeTypeEntity, emailVerificationService);
}
}

View File

@@ -0,0 +1,24 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.PhoneModel;
import com.safeqr.app.qrcode.service.PhoneVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PhoneFactory implements QRCodeFactory<PhoneModel> {
private final PhoneVerificationService phoneVerificationService;
@Autowired
public PhoneFactory(PhoneVerificationService phoneVerificationService) {
this.phoneVerificationService = phoneVerificationService;
}
@Override
public PhoneModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new PhoneModel(scannedQRCodeEntity, qrCodeTypeEntity, phoneVerificationService);
}
}

View File

@@ -9,17 +9,21 @@ import org.springframework.stereotype.Component;
@Component @Component
public class QRCodeFactoryProvider { public class QRCodeFactoryProvider {
private final ApplicationContext applicationContext;
@Autowired @Autowired
private ApplicationContext applicationContext; public QRCodeFactoryProvider(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
public QRCodeModel createQRCodeInstance(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) { public QRCodeModel createQRCodeInstance(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
switch (qrCodeTypeEntity.getType().toUpperCase()) { return switch (qrCodeTypeEntity.getType().toUpperCase()) {
case "URL": case "URL" -> applicationContext.getBean(URLFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
return applicationContext.getBean(QRCodeURLFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity); case "PHONE" -> applicationContext.getBean(PhoneFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "TEXT": case "SMS" -> applicationContext.getBean(SMSFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
return applicationContext.getBean(QRCodeTextFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity); case "EMAIL" -> applicationContext.getBean(EmailFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
default: case "WIFI" -> applicationContext.getBean(WifiFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
throw new IllegalArgumentException("Unsupported QR code type: " + qrCodeTypeEntity.getType()); case "TEXT" -> applicationContext.getBean(TextFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
} default -> throw new IllegalArgumentException("Unsupported QR code type: " + qrCodeTypeEntity.getType());
};
} }
} }

View File

@@ -1,23 +0,0 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.QRCodeText;
import com.safeqr.app.qrcode.repository.TextRepository;
import com.safeqr.app.qrcode.service.TextVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class QRCodeTextFactory implements QRCodeFactory<QRCodeText> {
@Autowired
private TextVerificationService textVerificationService;
@Autowired
private TextRepository textRepository;
@Override
public QRCodeText create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new QRCodeText(scannedQRCodeEntity, qrCodeTypeEntity, textVerificationService, textRepository);
}
}

View File

@@ -1,23 +0,0 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.QRCodeURL;
import com.safeqr.app.qrcode.repository.URLRepository;
import com.safeqr.app.qrcode.service.URLVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class QRCodeURLFactory implements QRCodeFactory<QRCodeURL> {
@Autowired
private URLVerificationService urlVerificationService;
@Autowired
private URLRepository urlRepository;
@Override
public QRCodeURL create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new QRCodeURL(scannedQRCodeEntity, qrCodeTypeEntity, urlVerificationService, urlRepository);
}
}

View File

@@ -0,0 +1,24 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.SMSModel;
import com.safeqr.app.qrcode.service.SMSVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SMSFactory implements QRCodeFactory<SMSModel> {
private final SMSVerificationService smsVerificationService;
@Autowired
public SMSFactory(SMSVerificationService smsVerificationService) {
this.smsVerificationService = smsVerificationService;
}
@Override
public SMSModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new SMSModel(scannedQRCodeEntity, qrCodeTypeEntity, smsVerificationService);
}
}

View File

@@ -0,0 +1,24 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.TextModel;
import com.safeqr.app.qrcode.service.TextVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TextFactory implements QRCodeFactory<TextModel> {
private final TextVerificationService textVerificationService;
@Autowired
public TextFactory(TextVerificationService textVerificationService) {
this.textVerificationService = textVerificationService;
}
@Override
public TextModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new TextModel(scannedQRCodeEntity, qrCodeTypeEntity, textVerificationService);
}
}

View File

@@ -0,0 +1,23 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.URLModel;
import com.safeqr.app.qrcode.service.URLVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class URLFactory implements QRCodeFactory<URLModel> {
private final URLVerificationService urlVerificationService;
@Autowired
public URLFactory(URLVerificationService urlVerificationService) {
this.urlVerificationService = urlVerificationService;
}
@Override
public URLModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new URLModel(scannedQRCodeEntity, qrCodeTypeEntity, urlVerificationService);
}
}

View File

@@ -0,0 +1,24 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.WifiModel;
import com.safeqr.app.qrcode.service.WifiVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class WifiFactory implements QRCodeFactory<WifiModel> {
private final WifiVerificationService wifiVerificationService;
@Autowired
public WifiFactory(WifiVerificationService wifiVerificationService) {
this.wifiVerificationService = wifiVerificationService;
}
@Override
public WifiModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new WifiModel(scannedQRCodeEntity, qrCodeTypeEntity, wifiVerificationService);
}
}

View File

@@ -0,0 +1,8 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.EmailEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID;
public interface EmailRepository extends JpaRepository<EmailEntity, UUID> {
}

View File

@@ -0,0 +1,8 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.PhoneEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID;
public interface PhoneRepository extends JpaRepository<PhoneEntity, UUID> {
}

View File

@@ -0,0 +1,8 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.SMSEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID;
public interface SMSRepository extends JpaRepository<SMSEntity, UUID> {
}

View File

@@ -1,8 +1,8 @@
package com.safeqr.app.qrcode.repository; package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.QRCodeTextEntity; import com.safeqr.app.qrcode.entity.TextEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID; import java.util.UUID;
public interface TextRepository extends JpaRepository<QRCodeTextEntity, UUID> { public interface TextRepository extends JpaRepository<TextEntity, UUID> {
} }

View File

@@ -1,8 +1,8 @@
package com.safeqr.app.qrcode.repository; package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.QRCodeURLEntity; import com.safeqr.app.qrcode.entity.URLEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID; import java.util.UUID;
public interface URLRepository extends JpaRepository<QRCodeURLEntity, UUID> { public interface URLRepository extends JpaRepository<URLEntity, UUID> {
} }

View File

@@ -0,0 +1,8 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.WifiEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID;
public interface WifiRepository extends JpaRepository<WifiEntity, UUID> {
}

View File

@@ -0,0 +1,23 @@
package com.safeqr.app.qrcode.service;
import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.repository.EmailRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmailVerificationService {
private final EmailRepository emailRepository;
private static final Logger logger = LoggerFactory.getLogger(EmailVerificationService.class);
@Autowired
public EmailVerificationService(EmailRepository emailRepository) {
this.emailRepository = emailRepository;
}
public void insertDB(EmailEntity EmailEntity) {
emailRepository.save(EmailEntity);
}
}

View File

@@ -0,0 +1,23 @@
package com.safeqr.app.qrcode.service;
import com.safeqr.app.qrcode.entity.PhoneEntity;
import com.safeqr.app.qrcode.repository.PhoneRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PhoneVerificationService {
private final PhoneRepository phoneRepository;
private static final Logger logger = LoggerFactory.getLogger(PhoneVerificationService.class);
@Autowired
public PhoneVerificationService(PhoneRepository phoneRepository) {
this.phoneRepository = phoneRepository;
}
public void insertDB(PhoneEntity PhoneEntity) {
phoneRepository.save(PhoneEntity);
}
}

View File

@@ -28,24 +28,25 @@ public class QRCodeTypeService {
private static final Logger logger = LoggerFactory.getLogger(QRCodeTypeService.class); private static final Logger logger = LoggerFactory.getLogger(QRCodeTypeService.class);
private final QRCodeFactoryProvider qrCodeFactoryProvider; private final QRCodeFactoryProvider qrCodeFactoryProvider;
private final QRCodeTypeRepository qrCodeTypeRepository;
private final ScanHistoryRepository scanHistoryRepository;
private final QRCodeRepository qrCodeRepository;
private final SafeBrowsingService safeBrowsingService;
@Autowired @Autowired
public QRCodeTypeService(QRCodeFactoryProvider qrCodeFactoryProvider) { public QRCodeTypeService(QRCodeFactoryProvider qrCodeFactoryProvider,
QRCodeTypeRepository qrCodeTypeRepository,
ScanHistoryRepository scanHistoryRepository,
QRCodeRepository qrCodeRepository,
SafeBrowsingService safeBrowsingService
) {
this.qrCodeFactoryProvider = qrCodeFactoryProvider; this.qrCodeFactoryProvider = qrCodeFactoryProvider;
this.qrCodeTypeRepository = qrCodeTypeRepository;
this.scanHistoryRepository = scanHistoryRepository;
this.qrCodeRepository = qrCodeRepository;
this.safeBrowsingService = safeBrowsingService;
} }
@Autowired
private QRCodeTypeRepository qrCodeTypeRepository;
@Autowired
private ScanHistoryRepository scanHistoryRepository;
@Autowired
private QRCodeRepository qrCodeRepository;
@Autowired
private SafeBrowsingService safeBrowsingService;
private List<QRCodeTypeEntity> configs; private List<QRCodeTypeEntity> configs;
private QRCodeTypeEntity defaultQRCodeTypeEntity; private QRCodeTypeEntity defaultQRCodeTypeEntity;
@@ -88,9 +89,9 @@ public class QRCodeTypeService {
.scanStatus(ScanHistoryEntity.ScanStatus.ACTIVE) .scanStatus(ScanHistoryEntity.ScanStatus.ACTIVE)
.build()); .build());
} }
// Create the QR Code Instance based on the QR Code Type & insert into the respective table
QRCodeModel qrCodeModel = qrCodeFactoryProvider.createQRCodeInstance(scannedQR, qrType); QRCodeModel qrCodeModel = qrCodeFactoryProvider.createQRCodeInstance(scannedQR, qrType);
qrCodeModel.insertDB(); qrCodeModel.setDetails();
return BaseScanResponse.builder().qrcode(qrCodeModel).build(); return BaseScanResponse.builder().qrcode(qrCodeModel).build();
} }
@@ -101,29 +102,6 @@ public class QRCodeTypeService {
.orElse(defaultQRCodeTypeEntity); .orElse(defaultQRCodeTypeEntity);
} }
// private BaseScanResponse insertIntoRespectiveTable(QRCodeEntity qrCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
// String contents = qrCodeEntity.getContents();
// try {
// QRCodeURLEntity urlObj = urlVerificationService.breakdownURL(contents);
// List<String> redirectChain = urlVerificationService.countAndTrackRedirects(contents);
// urlObj.setQrCodeId(qrCodeEntity.getId());
// urlObj.setRedirect(redirectChain.size() - 1);
// urlObj.setRedirectChain(redirectChain);
//
// // Insert into URL table
// urlRepository.save(urlObj);
//
// return URLResponse.builder().scannedQRCode(qrCodeEntity).qrCode(qrCodeTypeEntity).details(urlObj).build();
// } catch (IOException | URISyntaxException e) {
// logger.error("Error: ", e);
// }
//
// return BaseScanResponse.builder()
// .scannedQRCode(qrCodeEntity)
// .qrCode(qrCodeTypeEntity)
// .build();
// }
public Mono<String> detectType(QRCodePayload payload) { public Mono<String> detectType(QRCodePayload payload) {
String data = payload.getData(); String data = payload.getData();

View File

@@ -0,0 +1,23 @@
package com.safeqr.app.qrcode.service;
import com.safeqr.app.qrcode.entity.SMSEntity;
import com.safeqr.app.qrcode.repository.SMSRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SMSVerificationService {
private final SMSRepository smsRepository;
private static final Logger logger = LoggerFactory.getLogger(SMSVerificationService.class);
@Autowired
public SMSVerificationService(SMSRepository smsRepository) {
this.smsRepository = smsRepository;
}
public void insertDB(SMSEntity SMSEntity) {
smsRepository.save(SMSEntity);
}
}

View File

@@ -1,10 +1,22 @@
package com.safeqr.app.qrcode.service; package com.safeqr.app.qrcode.service;
import com.safeqr.app.qrcode.entity.TextEntity;
import com.safeqr.app.qrcode.repository.TextRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class TextVerificationService { public class TextVerificationService {
private final TextRepository textRepository;
@Autowired
public TextVerificationService(TextRepository textRepository) {
this.textRepository = textRepository;
}
public void insertDB(TextEntity textEntity) {
textRepository.save(textEntity);
}
private static final Logger logger = LoggerFactory.getLogger(TextVerificationService.class); private static final Logger logger = LoggerFactory.getLogger(TextVerificationService.class);
} }

View File

@@ -3,9 +3,11 @@ package com.safeqr.app.qrcode.service;
import com.safeqr.app.constants.CommonConstants; import com.safeqr.app.constants.CommonConstants;
import com.safeqr.app.qrcode.dto.QRCodePayload; import com.safeqr.app.qrcode.dto.QRCodePayload;
import com.safeqr.app.qrcode.dto.URLVerificationResponse; import com.safeqr.app.qrcode.dto.URLVerificationResponse;
import com.safeqr.app.qrcode.entity.QRCodeURLEntity; import com.safeqr.app.qrcode.entity.URLEntity;
import com.safeqr.app.qrcode.repository.URLRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
@@ -18,12 +20,20 @@ import java.util.Map;
@Service @Service
public class URLVerificationService { public class URLVerificationService {
private static final Logger logger = LoggerFactory.getLogger(URLVerificationService.class); private static final Logger logger = LoggerFactory.getLogger(URLVerificationService.class);
private final URLRepository urlRepository;
@Autowired
public URLVerificationService(URLRepository urlRepository) {
this.urlRepository = urlRepository;
}
public void insertDB(URLEntity urlEntity) {
urlRepository.save(urlEntity);
}
// Function to breakdown URL into subdomain, domain, topLevelDomain, query params, fragment // Function to breakdown URL into subdomain, domain, topLevelDomain, query params, fragment
public QRCodeURLEntity breakdownURL(String urlString) throws MalformedURLException, URISyntaxException { public URLEntity breakdownURL(String urlString) throws MalformedURLException, URISyntaxException {
URI uri = new URI(urlString); URI uri = new URI(urlString);
URL url = uri.toURL(); URL url = uri.toURL();
QRCodeURLEntity urlObj = new QRCodeURLEntity(); URLEntity urlObj = new URLEntity();
String host = url.getHost(); String host = url.getHost();
// split host into subdomain, domain, topLevelDomain // split host into subdomain, domain, topLevelDomain

View File

@@ -0,0 +1,23 @@
package com.safeqr.app.qrcode.service;
import com.safeqr.app.qrcode.entity.WifiEntity;
import com.safeqr.app.qrcode.repository.WifiRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class WifiVerificationService {
private final WifiRepository wifiRepository;
private static final Logger logger = LoggerFactory.getLogger(WifiVerificationService.class);
@Autowired
public WifiVerificationService(WifiRepository wifiRepository) {
this.wifiRepository = wifiRepository;
}
public void insertDB(WifiEntity WifiEntity) {
wifiRepository.save(WifiEntity);
}
}