Skip to content

Commit

Permalink
Code Refactor, Clean-up; Handle multiple domains
Browse files Browse the repository at this point in the history
This is heavy commit as in it chages lot
of stuff in the code. Changes are:
- Code refactor
- Code clean-up and used Lombok for
removing boilerplate getter/setter code.
- Support for config based max
emailIds per user
- version change from 1.0.0 -> 1.1.0
- Config restructuring.
- And support for multiple domains is
added. Now this bot can interact with
multiple domains and can offer temp-mails
from various domains. Config driven.

Fix #20
  • Loading branch information
rosehgal committed Jun 1, 2020
1 parent 396fea4 commit 5bda8f1
Show file tree
Hide file tree
Showing 20 changed files with 234 additions and 522 deletions.
9 changes: 7 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
</parent>
<groupId>io.github</groupId>
<artifactId>trashemail</artifactId>
<version>1.0.0</version>
<version>1.1.0</version>
<name>Trashemail</name>
<description>Sprinboot miscroservice heart of Telegram @trashemail_bot</description>
<description>Springboot miscroservice - heart of Telegram @trashemail_bot</description>
<distributionManagement>
<repository>
<id>github</id>
Expand Down Expand Up @@ -82,6 +82,11 @@
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
</dependencies>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.github.trashemail.Configurations;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
@ConfigurationProperties(prefix = "email-server")
@Getter @Setter @NoArgsConstructor
public class EmailServerConfig {

private List<String> hosts;
private String adminEmail;
private String adminPassword;
private String addUrl;
private String removeUrl;
private Imap imap;


@Configuration
@ConfigurationProperties(prefix = "imap")
@Getter @Setter @NoArgsConstructor
public static class Imap{
private String host;
private String port;
private String email;
private String password;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,36 +1,18 @@
package io.github.trashemail.Configurations;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix="telegram")
@Getter
@Setter
@NoArgsConstructor
public class TelegramConfg{
private String botToken;
private String url;
private int size;

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getBotToken() {
return botToken;
}

public void setBotToken(String botToken) {
this.botToken = botToken;
}

public int getSize() {
return size;
}

public void setSize(int size) {
this.size = size;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.github.trashemail.Configurations;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Getter
@Setter
@NoArgsConstructor
@Configuration
@ConfigurationProperties(prefix = "trashemail")
public class TrashemailConfig {
private Integer maxEmailsPerUser;

@Override
public String toString() {
return Integer.toString(maxEmailsPerUser);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.trashemail.EmailInteraction;

import io.github.trashemail.Telegram.TelegramRequestHandler;
import io.github.trashemail.Configurations.EmailServerConfig;
import io.github.trashemail.utils.exceptions.EmailAliasNotCreatedExecption;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -12,15 +12,14 @@
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;

import io.github.trashemail.Configurations.EmailServerConfiguration;
import io.github.trashemail.models.User;


@Component("EmailServerInteraction")
public class EmailServerInteraction {

@Autowired
private EmailServerConfiguration emailServerConfig;
private EmailServerConfig emailServerConfig;

@Autowired
RestTemplate restTemplate;
Expand All @@ -31,20 +30,20 @@ public String createEmailId(User user) throws HttpClientErrorException, EmailAli

HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(
emailServerConfig.getAdminemail(),
emailServerConfig.getAdminEmail(),
emailServerConfig.getAdminPassword()
);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> data = new LinkedMultiValueMap<String, String>();

data.add("address", user.getEmailId());
data.add("forwards_to", emailServerConfig.getEmailServerImapTaregtUsername());
data.add("forwards_to", emailServerConfig.getImap().getEmail());

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(data, headers);

ResponseEntity response = restTemplate.postForEntity(
emailServerConfig.getEmailServerApiAddAliasesUrl(),
emailServerConfig.getAddUrl(),
request,
String.class);

Expand All @@ -60,7 +59,7 @@ public String createEmailId(User user) throws HttpClientErrorException, EmailAli
public boolean deleteEmailId(User user) {
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(
emailServerConfig.getAdminemail(),
emailServerConfig.getAdminEmail(),
emailServerConfig.getAdminPassword()
);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
Expand All @@ -73,7 +72,7 @@ public boolean deleteEmailId(User user) {

RestTemplate restTemplate = new RestTemplate();
ResponseEntity response = restTemplate.postForEntity(
emailServerConfig.getEmailServerApiRemoveAliasUrl(),
emailServerConfig.getRemoveUrl(),
request,
String.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPStore;
import io.github.trashemail.Configurations.EmailServerConfiguration;
import io.github.trashemail.Configurations.EmailServerConfig;
import io.github.trashemail.Telegram.ForwardMailsToTelegram;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -25,7 +25,7 @@
public class ImapClient {

@Autowired
EmailServerConfiguration emailServerConfiguration;
EmailServerConfig emailServerConfig;

@Autowired
ForwardMailsToTelegram forwardMailsToTelegram;
Expand All @@ -37,16 +37,16 @@ public class ImapClient {

@PostConstruct
public void init(){
username = emailServerConfiguration.getEmailServerImapTaregtUsername();
password = emailServerConfiguration.getEmailServerImapTargetPassword();
username = emailServerConfig.getImap().getEmail();
password = emailServerConfig.getImap().getPassword();
}

@Async("threadPoolTaskExecutor")
public void fetchNewEmails() throws Exception {
Properties properties = new Properties();
properties.put("mail.store.protocol", "imaps");
properties.put("mail.imaps.host", emailServerConfiguration.getEmailServerImapHost());
properties.put("mail.imaps.port", emailServerConfiguration.getEmailServerImapPort());
properties.put("mail.imaps.host", emailServerConfig.getImap().getHost());
properties.put("mail.imaps.port", emailServerConfig.getImap().getPort());
properties.put("mail.imaps.timeout", "10000");
properties.put("mail.imaps.ssl.protocols", "TLSv1.2");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package io.github.trashemail.Telegram.DTO;

import io.github.trashemail.Telegram.DTO.messageEntities.Message;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/* This is how a response looks like, which we are taking input as request
{
"update_id": 90,
"message": {
"message_id": 6,
"from": {
"id": 9088787XXX,
"is_bot": false,
"first_name": "Rohit",
"last_name": "Sehgal",
"username": "r0hi7",
"language_code": "en"
},
"chat": {
"id": 753469447,
"first_name": "Rohit",
"last_name": "Sehgal",
"username": "r0hi7",
"type": "private"
},
"date": 1588833291,
"text": "Hi"
}
}
*/
@Getter @Setter @NoArgsConstructor
public class TelegramRequest {
private long update_id;
private Message message;
}
Loading

0 comments on commit 5bda8f1

Please sign in to comment.