Added option to disable attachments and groups on both client and server
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package envoy.server.data;
|
||||
|
||||
import static envoy.data.Message.MessageStatus.*;
|
||||
import static envoy.server.Startup.config;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@ -104,7 +105,7 @@ public class Message {
|
||||
sender = persistenceManager.getUserByID(message.getSenderID());
|
||||
recipient = persistenceManager.getContactByID(message.getRecipientID());
|
||||
forwarded = message.isForwarded();
|
||||
if (message.hasAttachment()) {
|
||||
if (config.isAttachmentSupportEnabled() && message.hasAttachment()) {
|
||||
final var messageAttachment = message.getAttachment();
|
||||
attachment = messageAttachment.getData();
|
||||
attachmentName = messageAttachment.getName();
|
||||
|
@ -33,6 +33,8 @@ public final class ServerConfig extends Config {
|
||||
put("featureLabel", "l-f", identity(), true);
|
||||
// enabling/ disabling several processors
|
||||
put("enableIssueReporting", "e-ir", Boolean::parseBoolean, true);
|
||||
put("enableGroups", "e-g", Boolean::parseBoolean, true);
|
||||
put("enableAttachments", "e-a", Boolean::parseBoolean, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -47,6 +49,18 @@ public final class ServerConfig extends Config {
|
||||
*/
|
||||
public Boolean isIssueReportingEnabled() { return (Boolean) items.get("enableIssueReporting").get(); }
|
||||
|
||||
/**
|
||||
* @return {@code true} if attachment support has been enabled
|
||||
* @since Envoy Client v0.3-alpha
|
||||
*/
|
||||
public Boolean isAttachmentSupportEnabled() { return (Boolean) items.get("enableAttachments").get(); }
|
||||
|
||||
/**
|
||||
* @return {@code true} if group support has been enabled
|
||||
* @since Envoy Client v0.3-alpha
|
||||
*/
|
||||
public Boolean isGroupSupportEnabled() { return (Boolean) items.get("enableGroups").get(); }
|
||||
|
||||
/**
|
||||
* @return the URL where issues should be uploaded to
|
||||
* @since Envoy Client v0.1-alpha
|
||||
|
@ -1,9 +1,12 @@
|
||||
package envoy.server.processors;
|
||||
|
||||
import static envoy.server.Startup.config;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import envoy.event.ElementOperation;
|
||||
import envoy.event.GroupCreation;
|
||||
import envoy.event.GroupCreationResult;
|
||||
import envoy.event.contact.ContactOperation;
|
||||
import envoy.server.data.Contact;
|
||||
import envoy.server.data.PersistenceManager;
|
||||
@ -14,7 +17,7 @@ import envoy.server.net.ObjectWriteProxy;
|
||||
* Project: <strong>envoy-server-standalone</strong><br>
|
||||
* File: <strong>GroupCreationProcessor.java</strong><br>
|
||||
* Created: <strong>26.03.2020</strong><br>
|
||||
*
|
||||
*
|
||||
* @author Maximilian Käfer
|
||||
* @since Envoy Server Standalone v0.1-beta
|
||||
*/
|
||||
@ -25,7 +28,10 @@ public final class GroupCreationProcessor implements ObjectProcessor<GroupCreati
|
||||
|
||||
@Override
|
||||
public void process(GroupCreation groupCreation, long socketID, ObjectWriteProxy writeProxy) {
|
||||
envoy.server.data.Group group = new envoy.server.data.Group();
|
||||
// Don't allow the creation of groups if manually disabled
|
||||
writeProxy.write(socketID, new GroupCreationResult(config.isGroupSupportEnabled()));
|
||||
if (!config.isGroupSupportEnabled()) return;
|
||||
final envoy.server.data.Group group = new envoy.server.data.Group();
|
||||
group.setName(groupCreation.get());
|
||||
group.setContacts(new HashSet<>());
|
||||
groupCreation.getInitialMemberIDs().stream().map(persistenceManager::getUserByID).forEach(group.getContacts()::add);
|
||||
|
@ -1,64 +1,78 @@
|
||||
package envoy.server.processors;
|
||||
|
||||
import static envoy.data.Message.MessageStatus.*;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collections;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.persistence.EntityExistsException;
|
||||
|
||||
import envoy.data.GroupMessage;
|
||||
import envoy.event.MessageStatusChange;
|
||||
import envoy.server.data.PersistenceManager;
|
||||
import envoy.server.net.ConnectionManager;
|
||||
import envoy.server.net.ObjectWriteProxy;
|
||||
import envoy.util.EnvoyLog;
|
||||
|
||||
/**
|
||||
* Project: <strong>envoy-server-standalone</strong><br>
|
||||
* File: <strong>GroupMessageProcessor.java</strong><br>
|
||||
* Created: <strong>18.04.2020</strong><br>
|
||||
*
|
||||
* @author Maximilian Käfer
|
||||
* @since Envoy Server Standalone v0.1-beta
|
||||
*/
|
||||
public final class GroupMessageProcessor implements ObjectProcessor<GroupMessage> {
|
||||
|
||||
private static final ConnectionManager connectionManager = ConnectionManager.getInstance();
|
||||
private static final PersistenceManager persistenceManager = PersistenceManager.getInstance();
|
||||
private static final Logger logger = EnvoyLog.getLogger(GroupCreationProcessor.class);
|
||||
|
||||
@Override
|
||||
public void process(GroupMessage groupMessage, long socketID, ObjectWriteProxy writeProxy) {
|
||||
groupMessage.nextStatus();
|
||||
|
||||
// Update statuses to SENT / RECEIVED depending on online status
|
||||
groupMessage.getMemberStatuses().replaceAll((memberID, status) -> connectionManager.isOnline(memberID) ? RECEIVED : SENT);
|
||||
|
||||
// Set status for sender to READ
|
||||
groupMessage.getMemberStatuses().replace(groupMessage.getSenderID(), READ);
|
||||
|
||||
// Increment the overall status to RECEIVED if necessary
|
||||
if (Collections.min(groupMessage.getMemberStatuses().values()) == RECEIVED) {
|
||||
groupMessage.nextStatus();
|
||||
|
||||
// Notify the sender of the status change
|
||||
writeProxy.write(socketID, new MessageStatusChange(groupMessage));
|
||||
}
|
||||
|
||||
// Deliver the message to the recipients that are online
|
||||
writeProxy.writeToOnlineContacts(
|
||||
persistenceManager.getGroupByID(groupMessage.getRecipientID())
|
||||
.getContacts()
|
||||
.stream()
|
||||
.filter(c -> c.getID() != groupMessage.getSenderID()),
|
||||
groupMessage);
|
||||
|
||||
try {
|
||||
PersistenceManager.getInstance().addMessage(new envoy.server.data.GroupMessage(groupMessage, Instant.now()));
|
||||
} catch (EntityExistsException e) {
|
||||
logger.warning("Received a groupMessage with an ID that already exists");
|
||||
}
|
||||
}
|
||||
}
|
||||
package envoy.server.processors;
|
||||
|
||||
import static envoy.data.Message.MessageStatus.*;
|
||||
import static envoy.server.Startup.config;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collections;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.persistence.EntityExistsException;
|
||||
|
||||
import envoy.data.GroupMessage;
|
||||
import envoy.event.MessageStatusChange;
|
||||
import envoy.event.NoAttachments;
|
||||
import envoy.server.data.PersistenceManager;
|
||||
import envoy.server.net.ConnectionManager;
|
||||
import envoy.server.net.ObjectWriteProxy;
|
||||
import envoy.util.EnvoyLog;
|
||||
|
||||
/**
|
||||
* Project: <strong>envoy-server-standalone</strong><br>
|
||||
* File: <strong>GroupMessageProcessor.java</strong><br>
|
||||
* Created: <strong>18.04.2020</strong><br>
|
||||
*
|
||||
* @author Maximilian Käfer
|
||||
* @since Envoy Server Standalone v0.1-beta
|
||||
*/
|
||||
public final class GroupMessageProcessor implements ObjectProcessor<GroupMessage> {
|
||||
|
||||
private static final ConnectionManager connectionManager = ConnectionManager.getInstance();
|
||||
private static final PersistenceManager persistenceManager = PersistenceManager.getInstance();
|
||||
private static final Logger logger = EnvoyLog.getLogger(GroupCreationProcessor.class);
|
||||
|
||||
@Override
|
||||
public void process(GroupMessage groupMessage, long socketID, ObjectWriteProxy writeProxy) {
|
||||
groupMessage.nextStatus();
|
||||
|
||||
// Update statuses to SENT / RECEIVED depending on online status
|
||||
groupMessage.getMemberStatuses().replaceAll((memberID, status) -> connectionManager.isOnline(memberID) ? RECEIVED : SENT);
|
||||
|
||||
// Set status for sender to READ
|
||||
groupMessage.getMemberStatuses().replace(groupMessage.getSenderID(), READ);
|
||||
|
||||
// Increment the overall status to RECEIVED if necessary
|
||||
if (Collections.min(groupMessage.getMemberStatuses().values()) == RECEIVED) {
|
||||
groupMessage.nextStatus();
|
||||
|
||||
// Notify the sender of the status change
|
||||
writeProxy.write(socketID, new MessageStatusChange(groupMessage));
|
||||
}
|
||||
|
||||
// message attachment will be automatically removed if disabled in config
|
||||
final var groupMessageServer = new envoy.server.data.GroupMessage(groupMessage, Instant.now());
|
||||
// Telling the server to reload the message without the attachment and telling
|
||||
// the client not to send anymore attachments
|
||||
if (!config.isAttachmentSupportEnabled() && groupMessage.hasAttachment()) {
|
||||
groupMessage = groupMessageServer.toCommon();
|
||||
writeProxy.write(socketID, new NoAttachments());
|
||||
}
|
||||
|
||||
// This is needed unfortunately because of f***ing lambda restrictions ("must be
|
||||
// fINaL oR EFfEcTivELy FiNAl")
|
||||
final var groupMessageCopy = groupMessage;
|
||||
// Deliver the message to the recipients that are online
|
||||
writeProxy.writeToOnlineContacts(
|
||||
persistenceManager.getGroupByID(groupMessageCopy.getRecipientID())
|
||||
.getContacts()
|
||||
.stream()
|
||||
.filter(c -> c.getID() != groupMessageCopy.getSenderID()),
|
||||
groupMessageCopy);
|
||||
|
||||
try {
|
||||
PersistenceManager.getInstance().addMessage(groupMessageServer);
|
||||
} catch (final EntityExistsException e) {
|
||||
logger.warning("Received a groupMessage with an ID that already exists");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package envoy.server.processors;
|
||||
|
||||
import static envoy.server.Startup.config;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -7,6 +9,7 @@ import javax.persistence.EntityExistsException;
|
||||
|
||||
import envoy.data.Message;
|
||||
import envoy.event.MessageStatusChange;
|
||||
import envoy.event.NoAttachments;
|
||||
import envoy.server.data.PersistenceManager;
|
||||
import envoy.server.net.ConnectionManager;
|
||||
import envoy.server.net.ObjectWriteProxy;
|
||||
@ -35,6 +38,11 @@ public final class MessageProcessor implements ObjectProcessor<Message> {
|
||||
|
||||
// Convert to server message
|
||||
final var serverMessage = new envoy.server.data.Message(message);
|
||||
// Telling the server to reload the message without the attachment
|
||||
if (!config.isAttachmentSupportEnabled() && message.hasAttachment()) {
|
||||
message = serverMessage.toCommon();
|
||||
writeProxy.write(socketID, new NoAttachments());
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
@ -54,7 +62,7 @@ public final class MessageProcessor implements ObjectProcessor<Message> {
|
||||
// Note that the exact time stamp might differ slightly
|
||||
writeProxy.write(socketID, new MessageStatusChange(message));
|
||||
}
|
||||
} catch (EntityExistsException e) {
|
||||
} catch (final EntityExistsException e) {
|
||||
logger.log(Level.WARNING, "Received " + message + " with an ID that already exists!");
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
enter-to-stop=true
|
||||
enableAttachments=true
|
||||
enableGroups=true
|
||||
enableIssueReporting=true
|
||||
# git.kske.dev config
|
||||
issueCreationURL=https://git.kske.dev/api/v1/repos/zdm/envoy/issues?access_token=6d8ec2a72d64cbaf6319434aa2e7caf0130701b3
|
||||
|
Reference in New Issue
Block a user