mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-11 11:33:09 +02:00
Prevent blocking common domain names
This commit is contained in:
@@ -99,6 +99,22 @@ public class EmailProvider {
|
||||
throw new UnknownHostException(this.name + " invalid");
|
||||
}
|
||||
|
||||
static List<String> getDomainNames(Context context) {
|
||||
List<String> result = new ArrayList<>();
|
||||
|
||||
for (String domain : PROPRIETARY)
|
||||
result.add(domain.replace(".", "\\."));
|
||||
|
||||
List<EmailProvider> providers = loadProfiles(context);
|
||||
for (EmailProvider provider : providers)
|
||||
if (provider.domain != null)
|
||||
for (String domain : provider.domain)
|
||||
if (!result.contains(domain))
|
||||
result.add(domain);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static List<EmailProvider> loadProfiles(Context context) {
|
||||
List<EmailProvider> result = null;
|
||||
try {
|
||||
|
||||
@@ -540,14 +540,23 @@ public class EntityRule {
|
||||
return cal;
|
||||
}
|
||||
|
||||
static EntityRule blockSender(Context context, EntityMessage message, EntityFolder junk, boolean block_domain) throws JSONException {
|
||||
static EntityRule blockSender(Context context, EntityMessage message, EntityFolder junk, boolean block_domain, List<String> whitelist) throws JSONException {
|
||||
String sender = ((InternetAddress) message.from[0]).getAddress();
|
||||
String name = MessageHelper.formatAddresses(new Address[]{message.from[0]});
|
||||
|
||||
if (block_domain) {
|
||||
int at = sender.indexOf('@');
|
||||
if (at > 0)
|
||||
sender = sender.substring(at);
|
||||
if (at > 0) {
|
||||
boolean whitelisted = false;
|
||||
String domain = sender.substring(at + 1);
|
||||
for (String d : whitelist)
|
||||
if (domain.matches(d)) {
|
||||
whitelisted = true;
|
||||
break;
|
||||
}
|
||||
if (!whitelisted)
|
||||
sender = '@' + domain;
|
||||
}
|
||||
}
|
||||
|
||||
JSONObject jsender = new JSONObject();
|
||||
|
||||
@@ -6036,6 +6036,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||
long id = args.getLong("id");
|
||||
boolean block_sender = args.getBoolean("block_sender");
|
||||
boolean block_domain = args.getBoolean("block_domain");
|
||||
List<String> whitelist = EmailProvider.getDomainNames(context);
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
try {
|
||||
@@ -6053,7 +6054,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||
|
||||
if ((block_sender || block_domain) &&
|
||||
(message.from != null && message.from.length > 0)) {
|
||||
EntityRule rule = EntityRule.blockSender(context, message, junk, block_sender);
|
||||
EntityRule rule = EntityRule.blockSender(context, message, junk, block_sender, whitelist);
|
||||
rule.id = db.rule().insertRule(rule);
|
||||
}
|
||||
|
||||
|
||||
@@ -240,6 +240,7 @@ public class ServiceUI extends IntentService {
|
||||
private void onJunk(long id) throws JSONException {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
boolean block_sender = prefs.getBoolean("notify_block_sender", false);
|
||||
List<String> whitelist = EmailProvider.getDomainNames(this);
|
||||
|
||||
DB db = DB.getInstance(this);
|
||||
try {
|
||||
@@ -256,7 +257,7 @@ public class ServiceUI extends IntentService {
|
||||
EntityOperation.queue(this, message, EntityOperation.MOVE, junk.id);
|
||||
|
||||
if (block_sender) {
|
||||
EntityRule rule = EntityRule.blockSender(this, message, junk, false);
|
||||
EntityRule rule = EntityRule.blockSender(this, message, junk, false, whitelist);
|
||||
rule.id = db.rule().insertRule(rule);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user