From 53bcb5c788e6b24bf8f6f631445b61a87c5f715f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 25 Sep 2016 14:51:16 +1300 Subject: Implement server statistics collection --- schema/changelog-3.8.xml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 304ac21d4..deab6603c 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -39,5 +39,32 @@ speedunit = 'kmh' + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 138c4ae9c215f2426ddb4b58cfbceb6a72e6259b Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 8 Oct 2016 15:29:36 +1300 Subject: Increase map URL column length --- schema/changelog-3.8.xml | 2 ++ 1 file changed, 2 insertions(+) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index deab6603c..1008b9b77 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -66,5 +66,7 @@ + + -- cgit v1.2.3 From c39342398677923c9fae7b1b86bb11914eafb847 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 8 Oct 2016 16:04:44 +1300 Subject: Add flag to force server settings --- schema/changelog-3.8.xml | 6 ++++++ src/org/traccar/model/Server.java | 10 ++++++++++ 2 files changed, 16 insertions(+) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 1008b9b77..e7aa1ad58 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -68,5 +68,11 @@ + + + + + + diff --git a/src/org/traccar/model/Server.java b/src/org/traccar/model/Server.java index b1557bf8f..0cd23865f 100644 --- a/src/org/traccar/model/Server.java +++ b/src/org/traccar/model/Server.java @@ -127,4 +127,14 @@ public class Server extends Extensible { this.twelveHourFormat = twelveHourFormat; } + private boolean forceSettings; + + public boolean getForceSettings() { + return forceSettings; + } + + public void setForceSettings(boolean forceSettings) { + this.forceSettings = forceSettings; + } + } -- cgit v1.2.3 From 47a5886d953ca511c425a0226ff0084696dc6a9e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 8 Oct 2016 16:34:52 +1300 Subject: Add coordinates format for user and server --- schema/changelog-3.8.xml | 7 +++++++ src/org/traccar/model/Server.java | 10 ++++++++++ src/org/traccar/model/User.java | 10 ++++++++++ 3 files changed, 27 insertions(+) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index e7aa1ad58..bc11d99ce 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -74,5 +74,12 @@ + + + + + + + diff --git a/src/org/traccar/model/Server.java b/src/org/traccar/model/Server.java index 0cd23865f..9a1552110 100644 --- a/src/org/traccar/model/Server.java +++ b/src/org/traccar/model/Server.java @@ -137,4 +137,14 @@ public class Server extends Extensible { this.forceSettings = forceSettings; } + private String coordinatesFormat; + + public String getCoordinatesFormat() { + return coordinatesFormat; + } + + public void setCoordinatesFormat(String coordinatesFormat) { + this.coordinatesFormat = coordinatesFormat; + } + } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index aa73cfcff..63aa3e641 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -130,6 +130,16 @@ public class User extends Extensible { this.twelveHourFormat = twelveHourFormat; } + private String coordinatesFormat; + + public String getCoordinatesFormat() { + return coordinatesFormat; + } + + public void setCoordinatesFormat(String coordinatesFormat) { + this.coordinatesFormat = coordinatesFormat; + } + private String password; public String getPassword() { -- cgit v1.2.3 From 62e5c4a5f2989a869daace462d575c7bd04e5bc5 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 8 Oct 2016 16:44:56 +1300 Subject: Rename column name --- schema/changelog-3.8.xml | 4 ++-- src/org/traccar/model/Server.java | 10 +++++----- src/org/traccar/model/User.java | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index bc11d99ce..be9df5410 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -75,10 +75,10 @@ - + - + diff --git a/src/org/traccar/model/Server.java b/src/org/traccar/model/Server.java index 9a1552110..b922c4340 100644 --- a/src/org/traccar/model/Server.java +++ b/src/org/traccar/model/Server.java @@ -137,14 +137,14 @@ public class Server extends Extensible { this.forceSettings = forceSettings; } - private String coordinatesFormat; + private String coordinateFormat; - public String getCoordinatesFormat() { - return coordinatesFormat; + public String getCoordinateFormat() { + return coordinateFormat; } - public void setCoordinatesFormat(String coordinatesFormat) { - this.coordinatesFormat = coordinatesFormat; + public void setCoordinateFormat(String coordinateFormat) { + this.coordinateFormat = coordinateFormat; } } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index 63aa3e641..59951718e 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -130,14 +130,14 @@ public class User extends Extensible { this.twelveHourFormat = twelveHourFormat; } - private String coordinatesFormat; + private String coordinateFormat; - public String getCoordinatesFormat() { - return coordinatesFormat; + public String getCoordinateFormat() { + return coordinateFormat; } - public void setCoordinatesFormat(String coordinatesFormat) { - this.coordinatesFormat = coordinatesFormat; + public void setCoordinateFormat(String coordinateFormat) { + this.coordinateFormat = coordinateFormat; } private String password; -- cgit v1.2.3 From 83ca0476167d91f16f18ae3cc532d56cd97f743e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 17 Oct 2016 12:08:04 +1300 Subject: Change attributes column length --- schema/changelog-3.8.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index be9df5410..7a2b1e4e0 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -61,7 +61,7 @@ - + @@ -81,5 +81,18 @@ + + + + + + + + + + + + + -- cgit v1.2.3 From f7a00616b14821203f89e63d9c887b3e98b9826e Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 20 Oct 2016 15:32:56 +0500 Subject: Extend device model with management info --- debug.xml | 14 ++++++++++++-- schema/changelog-3.8.xml | 13 +++++++++++++ src/org/traccar/model/Device.java | 40 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) (limited to 'schema/changelog-3.8.xml') diff --git a/debug.xml b/debug.xml index ad9e346c1..67b514d13 100644 --- a/debug.xml +++ b/debug.xml @@ -168,11 +168,21 @@ - INSERT INTO devices (name, uniqueId, groupId, attributes) VALUES (:name, :uniqueId, :groupId, :attributes) + INSERT INTO devices (name, uniqueId, groupId, attributes, phone, model, contact, type) + VALUES (:name, :uniqueId, :groupId, :attributes, :phone, :model, :contact, :type) - UPDATE devices SET name = :name, uniqueId = :uniqueId, groupId = :groupId, attributes = :attributes WHERE id = :id + UPDATE devices SET + name = :name, + uniqueId = :uniqueId, + groupId = :groupId, + attributes = :attributes, + phone = :phone, + model = :model, + contact = :contact, + type = :type + WHERE id = :id diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 7a2b1e4e0..dbf04df79 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -94,5 +94,18 @@ + + + + + + + + + + + + + diff --git a/src/org/traccar/model/Device.java b/src/org/traccar/model/Device.java index e90742836..47b8fb2a6 100644 --- a/src/org/traccar/model/Device.java +++ b/src/org/traccar/model/Device.java @@ -101,4 +101,44 @@ public class Device extends Extensible { public void setGeofenceIds(List geofenceIds) { this.geofenceIds = geofenceIds; } + + private String phone; + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + private String model; + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + private String contact; + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + private String type; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } } -- cgit v1.2.3 From 1756637b8727f592712950e12a99521e5f5c636e Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 21 Oct 2016 06:12:37 +0500 Subject: Rename type to category --- debug.xml | 6 +++--- schema/changelog-3.8.xml | 2 +- src/org/traccar/model/Device.java | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'schema/changelog-3.8.xml') diff --git a/debug.xml b/debug.xml index 67b514d13..d32d9eaf8 100644 --- a/debug.xml +++ b/debug.xml @@ -168,8 +168,8 @@ - INSERT INTO devices (name, uniqueId, groupId, attributes, phone, model, contact, type) - VALUES (:name, :uniqueId, :groupId, :attributes, :phone, :model, :contact, :type) + INSERT INTO devices (name, uniqueId, groupId, attributes, phone, model, contact, category) + VALUES (:name, :uniqueId, :groupId, :attributes, :phone, :model, :contact, :category) @@ -181,7 +181,7 @@ phone = :phone, model = :model, contact = :contact, - type = :type + category = :category WHERE id = :id diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index dbf04df79..780a2d029 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -104,7 +104,7 @@ - + diff --git a/src/org/traccar/model/Device.java b/src/org/traccar/model/Device.java index 47b8fb2a6..821984c47 100644 --- a/src/org/traccar/model/Device.java +++ b/src/org/traccar/model/Device.java @@ -132,13 +132,13 @@ public class Device extends Extensible { this.contact = contact; } - private String type; + private String category; - public String getType() { - return type; + public String getCategory() { + return category; } - public void setType(String type) { - this.type = type; + public void setCategory(String category) { + this.category = category; } } -- cgit v1.2.3 From af6c734879aa483efcc8150d5fdb704f40fb59cd Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 17 Nov 2016 22:48:33 +1300 Subject: Add user expiration and device limit --- schema/changelog-3.8.xml | 10 ++++++ setup/default.xml | 8 +++-- src/org/traccar/api/SecurityRequestFilter.java | 2 +- src/org/traccar/api/resource/DeviceResource.java | 7 ++++ src/org/traccar/api/resource/SessionResource.java | 2 +- src/org/traccar/api/resource/UserResource.java | 11 ++++--- src/org/traccar/database/PermissionsManager.java | 6 ++-- src/org/traccar/model/User.java | 40 +++++++++++++++++++++++ 8 files changed, 75 insertions(+), 11 deletions(-) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 780a2d029..ba591f192 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -107,5 +107,15 @@ + + + + + + + + + + diff --git a/setup/default.xml b/setup/default.xml index f50f3904f..a9d7684d4 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -62,8 +62,8 @@ - INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, attributes) - VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :attributes) + INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, attributes) + VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :attributes) @@ -78,6 +78,10 @@ longitude = :longitude, zoom = :zoom, twelveHourFormat = :twelveHourFormat, + coordinateFormat = :coordinateFormat, + disabled = :disabled, + expirationTime = :expirationTime, + deviceLimit = :deviceLimit, attributes = :attributes WHERE id = :id diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index fd4c77525..598e4566d 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -67,7 +67,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { try { String[] auth = decodeBasicAuth(authHeader); - User user = Context.getDataManager().login(auth[0], auth[1]); + User user = Context.getPermissionsManager().login(auth[0], auth[1]); if (user != null) { Context.getStatisticsManager().registerRequest(user.getId()); securityContext = new UserSecurityContext(new UserPrincipal(user.getId())); diff --git a/src/org/traccar/api/resource/DeviceResource.java b/src/org/traccar/api/resource/DeviceResource.java index f20ed86ad..0b389ede1 100644 --- a/src/org/traccar/api/resource/DeviceResource.java +++ b/src/org/traccar/api/resource/DeviceResource.java @@ -58,6 +58,13 @@ public class DeviceResource extends BaseResource { @POST public Response add(Device entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); + int deviceLimit = Context.getPermissionsManager().getUser(getUserId()).getDeviceLimit(); + if (deviceLimit != 0) { + int deviceCount = Context.getPermissionsManager().getDevicePermissions(getUserId()).size(); + if (deviceCount >= deviceLimit) { + throw new SecurityException("User device limit reached"); + } + } Context.getDeviceManager().addDevice(entity); Context.getDataManager().linkDevice(getUserId(), entity.getId()); Context.getPermissionsManager().refreshPermissions(); diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index 2847e41c1..a459186fe 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -64,7 +64,7 @@ public class SessionResource extends BaseResource { } } if (email != null && password != null) { - User user = Context.getDataManager().login(email, password); + User user = Context.getPermissionsManager().login(email, password); if (user != null) { userId = user.getId(); request.getSession().setAttribute(USER_ID_KEY, userId); diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index f0a8597cc..c6e84c918 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -60,13 +60,16 @@ public class UserResource extends BaseResource { @Path("{id}") @PUT public Response update(@PathParam("id") long id, User entity) throws SQLException { - if (entity.getAdmin()) { + User old = Context.getPermissionsManager().getUser(entity.getId()); + if (old.getExpirationTime() == null && entity.getExpirationTime() != null + || old.getExpirationTime() != null && !old.getExpirationTime().equals(entity.getExpirationTime()) + || old.getAdmin() != entity.getAdmin() + || old.getReadonly() != entity.getReadonly() + || old.getDisabled() != entity.getDisabled() + || old.getDeviceLimit() != entity.getDeviceLimit()) { Context.getPermissionsManager().checkAdmin(getUserId()); } else { Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); - if (!entity.getReadonly()) { - Context.getPermissionsManager().checkReadonly(entity.getId()); - } } Context.getPermissionsManager().updateUser(entity); if (Context.getNotificationManager() != null) { diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index b0ae504d0..e620d5334 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -217,11 +217,11 @@ public class PermissionsManager { public User login(String email, String password) throws SQLException { User user = dataManager.login(email, password); - if (user != null && users.get(user.getId()) != null) { + if (user != null && !user.getDisabled() && (user.getExpirationTime() == null + || user.getExpirationTime().getTime() > System.currentTimeMillis())) { return users.get(user.getId()); - } else { - return null; } + return null; } } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index aa0b33713..a36fa0e31 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -18,6 +18,8 @@ package org.traccar.model; import com.fasterxml.jackson.annotation.JsonIgnore; import org.traccar.helper.Hashing; +import java.util.Date; + public class User extends Extensible { private String name; @@ -140,6 +142,44 @@ public class User extends Extensible { this.coordinateFormat = coordinateFormat; } + private boolean disabled; + + public boolean getDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + + private Date expirationTime; + + public Date getExpirationTime() { + if (expirationTime != null) { + return new Date(expirationTime.getTime()); + } else { + return null; + } + } + + public void setExpirationTime(Date expirationTime) { + if (expirationTime != null) { + this.expirationTime = new Date(expirationTime.getTime()); + } else { + this.expirationTime = null; + } + } + + private int deviceLimit; + + public int getDeviceLimit() { + return deviceLimit; + } + + public void setDeviceLimit(int deviceLimit) { + this.deviceLimit = deviceLimit; + } + public String getPassword() { return null; } -- cgit v1.2.3 From c9b67d19132b687bea9130f39f13a5515b120e5e Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 18 Nov 2016 16:05:35 +0500 Subject: Implement users tokens --- schema/changelog-3.8.xml | 5 +++++ setup/default.xml | 5 +++-- src/org/traccar/api/resource/SessionResource.java | 6 ++++++ src/org/traccar/api/resource/UserResource.java | 3 ++- src/org/traccar/database/PermissionsManager.java | 26 +++++++++++++++++++++++ src/org/traccar/model/User.java | 25 ++++++++++++++++++++++ 6 files changed, 67 insertions(+), 3 deletions(-) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index ba591f192..f53673eae 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -116,6 +116,11 @@ + + + + + diff --git a/setup/default.xml b/setup/default.xml index a9d7684d4..e6d701f4c 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -62,8 +62,8 @@ - INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, attributes) - VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :attributes) + INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, token, attributes) + VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :token, :attributes) @@ -82,6 +82,7 @@ disabled = :disabled, expirationTime = :expirationTime, deviceLimit = :deviceLimit, + token = :token, attributes = :attributes WHERE id = :id diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index a61738c7e..6c5263123 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -69,6 +69,12 @@ public class SessionResource extends BaseResource { userId = user.getId(); request.getSession().setAttribute(USER_ID_KEY, userId); } + } else if (request.getParameter("token") != null) { + User user = Context.getPermissionsManager().getUserByToken(request.getParameter("token")); + if (user != null) { + userId = user.getId(); + request.getSession().setAttribute(USER_ID_KEY, userId); + } } } diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index c6e84c918..094de2812 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -66,7 +66,8 @@ public class UserResource extends BaseResource { || old.getAdmin() != entity.getAdmin() || old.getReadonly() != entity.getReadonly() || old.getDisabled() != entity.getDisabled() - || old.getDeviceLimit() != entity.getDeviceLimit()) { + || old.getDeviceLimit() != entity.getDeviceLimit() + || !old.getToken().equals(entity.getToken())) { Context.getPermissionsManager().checkAdmin(getUserId()); } else { Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 1c995a11d..269dfc7bf 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -29,6 +29,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -39,6 +40,7 @@ public class PermissionsManager { private volatile Server server; private final Map users = new ConcurrentHashMap<>(); + private final Map usersTokens = new HashMap<>(); private final Map> groupPermissions = new HashMap<>(); private final Map> devicePermissions = new HashMap<>(); @@ -81,10 +83,14 @@ public class PermissionsManager { public final void refreshUsers() { users.clear(); + usersTokens.clear(); try { server = dataManager.getServer(); for (User user : dataManager.getUsers()) { users.put(user.getId(), user); + if (user.getToken() != null) { + usersTokens.put(user.getId(), user.getToken()); + } } } catch (SQLException error) { Log.warning(error); @@ -210,18 +216,27 @@ public class PermissionsManager { public void addUser(User user) throws SQLException { dataManager.addUser(user); users.put(user.getId(), user); + if (user.getToken() != null) { + usersTokens.put(user.getId(), user.getToken()); + } refreshPermissions(); } public void updateUser(User user) throws SQLException { dataManager.updateUser(user); users.put(user.getId(), user); + if (user.getToken() != null) { + usersTokens.put(user.getId(), user.getToken()); + } else if (usersTokens.containsKey(user.getId())) { + usersTokens.remove(user.getId()); + } refreshPermissions(); } public void removeUser(long userId) throws SQLException { dataManager.removeUser(userId); users.remove(userId); + usersTokens.remove(userId); refreshPermissions(); } @@ -234,4 +249,15 @@ public class PermissionsManager { return null; } + public User getUserByToken(String token) { + if (usersTokens.containsValue(token)) { + for (Entry entry : usersTokens.entrySet()) { + if (entry.getValue().equals(token)) { + return users.get(entry.getKey()); + } + } + } + return null; + } + } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index a36fa0e31..816f49da9 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -180,6 +180,31 @@ public class User extends Extensible { this.deviceLimit = deviceLimit; } + private String token; + + public String getToken() { + return token; + } + + public void setToken(String token) { + if (token != null && !token.isEmpty()) { + if (validateToken(token)) { + this.token = token; + } else { + throw new IllegalArgumentException("Bad token"); + } + } else { + this.token = null; + } + } + + public static boolean validateToken(String token) { + if (token.length() < 16 || !token.matches("^[a-zA-Z0-9]+$")) { + return false; + } + return true; + } + public String getPassword() { return null; } -- cgit v1.2.3 From 1d05464285590776e3a526e1a1939035887ad47f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 20 Nov 2016 10:06:34 +1300 Subject: Remove unique token constraint --- schema/changelog-3.8.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'schema/changelog-3.8.xml') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index f53673eae..120ddf5cc 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -119,8 +119,12 @@ - - + + + + + + -- cgit v1.2.3