aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/api/resource
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2023-03-26 06:54:29 -0700
committerAnton Tananaev <anton@traccar.org>2023-03-26 06:54:29 -0700
commit3082f7b3e5bfd00ec6f6801222060dfc0d10b7e0 (patch)
tree688ca698b70bb18aa79bf0f0434923857c26dca4 /src/main/java/org/traccar/api/resource
parente6960c3d49025eb63243052e4c7aedde9955fe40 (diff)
downloadtrackermap-server-3082f7b3e5bfd00ec6f6801222060dfc0d10b7e0.tar.gz
trackermap-server-3082f7b3e5bfd00ec6f6801222060dfc0d10b7e0.tar.bz2
trackermap-server-3082f7b3e5bfd00ec6f6801222060dfc0d10b7e0.zip
Implement group commands
Diffstat (limited to 'src/main/java/org/traccar/api/resource')
-rw-r--r--src/main/java/org/traccar/api/resource/CommandResource.java20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/main/java/org/traccar/api/resource/CommandResource.java b/src/main/java/org/traccar/api/resource/CommandResource.java
index 3460cf6e0..7ba1ee2b4 100644
--- a/src/main/java/org/traccar/api/resource/CommandResource.java
+++ b/src/main/java/org/traccar/api/resource/CommandResource.java
@@ -23,8 +23,10 @@ import org.traccar.BaseProtocol;
import org.traccar.ServerManager;
import org.traccar.api.ExtendedObjectResource;
import org.traccar.database.CommandsManager;
+import org.traccar.helper.model.DeviceUtil;
import org.traccar.model.Command;
import org.traccar.model.Device;
+import org.traccar.model.Group;
import org.traccar.model.Position;
import org.traccar.model.Typed;
import org.traccar.model.User;
@@ -104,7 +106,7 @@ public class CommandResource extends ExtendedObjectResource<Command> {
@POST
@Path("send")
- public Response send(Command entity) throws Exception {
+ public Response send(Command entity, @QueryParam("groupId") long groupId) throws Exception {
if (entity.getId() > 0) {
permissionsService.checkPermission(baseClass, getUserId(), entity.getId());
long deviceId = entity.getDeviceId();
@@ -114,11 +116,19 @@ public class CommandResource extends ExtendedObjectResource<Command> {
} else {
permissionsService.checkRestriction(getUserId(), UserRestrictions::getLimitCommands);
}
- permissionsService.checkPermission(Device.class, getUserId(), entity.getDeviceId());
- if (!commandsManager.sendCommand(entity)) {
- return Response.accepted(entity).build();
+ boolean result = true;
+ if (groupId > 0) {
+ permissionsService.checkPermission(Group.class, getUserId(), groupId);
+ var devices = DeviceUtil.getAccessibleDevices(storage, getUserId(), List.of(), List.of(groupId));
+ for (Device device : devices) {
+ entity.setDeviceId(device.getId());
+ result = result && commandsManager.sendCommand(entity);
+ }
+ } else {
+ permissionsService.checkPermission(Device.class, getUserId(), entity.getDeviceId());
+ result = commandsManager.sendCommand(entity);
}
- return Response.ok(entity).build();
+ return result ? Response.ok(entity).build() : Response.accepted(entity).build();
}
@GET