Skip to content

Commit fcb1903

Browse files
committed
Code Refactor, Clean-up; Handle multiple domains
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. - Update README to reflect new config. Fix #20
1 parent 396fea4 commit fcb1903

21 files changed

+251
-534
lines changed

README.md

+17-12
Original file line numberDiff line numberDiff line change
@@ -52,26 +52,27 @@ Dev config may look like this:
5252
# Email Server IMAP and SMTP configuration
5353
# SMTP server should support Alias creation and deletion
5454
# IMAP server should support IDLE
55-
emailServer:
56-
host: trashemail.in
57-
admin:
58-
59-
password: changeme
60-
api:
61-
aliases:
62-
add_url: https://trashemail.in/admin/mail/aliases/add
63-
remove_url: https://trashemail.in/admin/mail/aliases/remove
55+
56+
email-server:
57+
hosts:
58+
- trashemail.in
59+
- thromail.com
60+
- humblemail.com
61+
admin-email: [email protected]
62+
admin-password: changeme
63+
add-url: https://trashemail.in/admin/mail/aliases/add
64+
remove-url: https://trashemail.in/admin/mail/aliases/remove
6465
imap:
6566
host: trashemail.in
6667
port: 993
6768
6869
password: changeme
6970

70-
7171
# Telegram bot specific settings
7272
telegram:
7373
url: https://api.telegram.org/bot
74-
botToken: telegram-bot-token
74+
botToken: xxxxxxxxxxxxxxxxxxxxxx
75+
size: 4096
7576

7677
# For development purpose, H2 is used.
7778
# I prefer H2 persistent in file.
@@ -90,20 +91,24 @@ spring:
9091
path: /h2-console
9192
settings:
9293
web-allow-others: true
94+
enabled: true
9395
application:
9496
name: Trashemail
9597

9698
# Tomcat server settings
9799
server:
98100
port: 9090
99101

102+
# Trashemail app server settings
103+
trashemail:
104+
max-emails-per-user: 4
105+
100106
# Logger settings
101107
logging:
102108
level:
103109
io:
104110
github:
105111
trashemail: debug
106-
107112
```
108113
109114
1. This code will spin up the service at `localhost:9090/telegram/new-message` endpoint.

pom.xml

+7-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
</parent>
1111
<groupId>io.github</groupId>
1212
<artifactId>trashemail</artifactId>
13-
<version>1.0.0</version>
13+
<version>1.1.0</version>
1414
<name>Trashemail</name>
15-
<description>Sprinboot miscroservice heart of Telegram @trashemail_bot</description>
15+
<description>Springboot miscroservice - heart of Telegram @trashemail_bot</description>
1616
<distributionManagement>
1717
<repository>
1818
<id>github</id>
@@ -82,6 +82,11 @@
8282
<artifactId>jsoup</artifactId>
8383
<version>1.13.1</version>
8484
</dependency>
85+
<dependency>
86+
<groupId>org.projectlombok</groupId>
87+
<artifactId>lombok</artifactId>
88+
<version>1.18.10</version>
89+
</dependency>
8590
</dependencies>
8691
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
8792

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.github.trashemail.Configurations;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
6+
import org.springframework.boot.context.properties.ConfigurationProperties;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
import java.util.List;
10+
11+
@Configuration
12+
@ConfigurationProperties(prefix = "email-server")
13+
@Getter @Setter @NoArgsConstructor
14+
public class EmailServerConfig {
15+
16+
private List<String> hosts;
17+
private String adminEmail;
18+
private String adminPassword;
19+
private String addUrl;
20+
private String removeUrl;
21+
private Imap imap;
22+
23+
24+
@Configuration
25+
@ConfigurationProperties(prefix = "imap")
26+
@Getter @Setter @NoArgsConstructor
27+
public static class Imap{
28+
private String host;
29+
private String port;
30+
private String email;
31+
private String password;
32+
}
33+
}

src/main/java/io/github/trashemail/Configurations/EmailServerConfiguration.java

-107
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,18 @@
11
package io.github.trashemail.Configurations;
22

3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
36
import org.springframework.boot.context.properties.ConfigurationProperties;
47
import org.springframework.context.annotation.Configuration;
58

69
@Configuration
710
@ConfigurationProperties(prefix="telegram")
11+
@Getter
12+
@Setter
13+
@NoArgsConstructor
814
public class TelegramConfg{
915
private String botToken;
1016
private String url;
1117
private int size;
12-
13-
public String getUrl() {
14-
return url;
15-
}
16-
17-
public void setUrl(String url) {
18-
this.url = url;
19-
}
20-
21-
public String getBotToken() {
22-
return botToken;
23-
}
24-
25-
public void setBotToken(String botToken) {
26-
this.botToken = botToken;
27-
}
28-
29-
public int getSize() {
30-
return size;
31-
}
32-
33-
public void setSize(int size) {
34-
this.size = size;
35-
}
3618
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.github.trashemail.Configurations;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
6+
import org.springframework.boot.context.properties.ConfigurationProperties;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
@Getter
10+
@Setter
11+
@NoArgsConstructor
12+
@Configuration
13+
@ConfigurationProperties(prefix = "trashemail")
14+
public class TrashemailConfig {
15+
private Integer maxEmailsPerUser;
16+
17+
@Override
18+
public String toString() {
19+
return Integer.toString(maxEmailsPerUser);
20+
}
21+
}

src/main/java/io/github/trashemail/EmailInteraction/EmailServerInteraction.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.github.trashemail.EmailInteraction;
22

3-
import io.github.trashemail.Telegram.TelegramRequestHandler;
3+
import io.github.trashemail.Configurations.EmailServerConfig;
44
import io.github.trashemail.utils.exceptions.EmailAliasNotCreatedExecption;
55
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;
@@ -12,15 +12,14 @@
1212
import org.springframework.web.client.HttpClientErrorException;
1313
import org.springframework.web.client.RestTemplate;
1414

15-
import io.github.trashemail.Configurations.EmailServerConfiguration;
1615
import io.github.trashemail.models.User;
1716

1817

1918
@Component("EmailServerInteraction")
2019
public class EmailServerInteraction {
2120

2221
@Autowired
23-
private EmailServerConfiguration emailServerConfig;
22+
private EmailServerConfig emailServerConfig;
2423

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

3231
HttpHeaders headers = new HttpHeaders();
3332
headers.setBasicAuth(
34-
emailServerConfig.getAdminemail(),
33+
emailServerConfig.getAdminEmail(),
3534
emailServerConfig.getAdminPassword()
3635
);
3736
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
3837

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

4140
data.add("address", user.getEmailId());
42-
data.add("forwards_to", emailServerConfig.getEmailServerImapTaregtUsername());
41+
data.add("forwards_to", emailServerConfig.getImap().getEmail());
4342

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

4645
ResponseEntity response = restTemplate.postForEntity(
47-
emailServerConfig.getEmailServerApiAddAliasesUrl(),
46+
emailServerConfig.getAddUrl(),
4847
request,
4948
String.class);
5049

@@ -60,7 +59,7 @@ public String createEmailId(User user) throws HttpClientErrorException, EmailAli
6059
public boolean deleteEmailId(User user) {
6160
HttpHeaders headers = new HttpHeaders();
6261
headers.setBasicAuth(
63-
emailServerConfig.getAdminemail(),
62+
emailServerConfig.getAdminEmail(),
6463
emailServerConfig.getAdminPassword()
6564
);
6665
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
@@ -73,7 +72,7 @@ public boolean deleteEmailId(User user) {
7372

7473
RestTemplate restTemplate = new RestTemplate();
7574
ResponseEntity response = restTemplate.postForEntity(
76-
emailServerConfig.getEmailServerApiRemoveAliasUrl(),
75+
emailServerConfig.getRemoveUrl(),
7776
request,
7877
String.class);
7978

0 commit comments

Comments
 (0)