This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 9b9c20ee8 [OPENMEETINGS-2835] user rights are properly checked on
appointment save
9b9c20ee8 is described below
commit 9b9c20ee8808efdde4efde2ced825852cc15e36e
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Sep 9 08:13:54 2026 +0700
[OPENMEETINGS-2835] user rights are properly checked on appointment save
---
.../db/dao/calendar/AppointmentDao.java | 4 +-
.../db/dto/calendar/AppointmentDTO.java | 45 ++++++++++++-------
.../db/dto/calendar/MeetingMemberDTO.java | 8 +++-
.../apache/openmeetings/db/dto/user/UserDTO.java | 13 +++++-
.../openmeetings/db/mapper/CalendarMapper.java | 4 +-
.../apache/openmeetings/util/CalendarHelper.java | 9 ++--
.../org/apache/openmeetings/web/TestCalendar.java | 2 +-
.../openmeetings/ws/TestCalendarService.java | 41 ++++++++++++++---
.../apache/openmeetings/ws/TestWebConverters.java | 11 -----
.../webservice/CalendarWebService.java | 19 +++++---
.../schema/AppointmentDTOListWrapper.java | 26 +----------
.../webservice/schema/AppointmentDTOWrapper.java | 38 ++++------------
.../util/AppointmentListMessageBodyWriter.java | 2 +-
.../util/AppointmentMessageBodyWriter.java | 2 +-
.../webservice/util/AppointmentParamConverter.java | 19 ++------
.../webservice/util/CalendarParamConverter.java | 51 ----------------------
.../webservice/util/OmParamConverterProvider.java | 5 +--
.../webservice/util/UserMessageBodyWriter.java | 2 +-
.../webservice/util/UserParamConverter.java | 6 +--
19 files changed, 127 insertions(+), 180 deletions(-)
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
index 1d7cca6df..a2d41e646 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -125,8 +125,8 @@ public class AppointmentDao implements
IDataProviderDao<Appointment>{
|| !CS.equals(a0.getTitle(),
a.getTitle())
|| !CS.equals(a0.getDescription(),
a.getDescription())
|| !CS.equals(a0.getLocation(),
a.getLocation())
- ||
!a0.getStart().getTime().equals(a.getStart())
- ||
!a0.getEnd().getTime().equals(a.getEnd());
+ || !a0.getStart().equals(a.getStart())
+ || !a0.getEnd().equals(a.getEnd());
List<MeetingMember> mmList = a.getMeetingMembers();
if (mmList != null){
for (MeetingMember mm : mmList) {
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
index f197924a2..297a2770f 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
@@ -18,12 +18,12 @@
*/
package org.apache.openmeetings.db.dto.calendar;
+import static org.apache.openmeetings.util.CalendarHelper.getISO;
+
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Calendar;
import java.util.Date;
import java.util.List;
-import java.util.TimeZone;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
@@ -34,8 +34,8 @@ import org.apache.openmeetings.db.dto.user.UserDTO;
import org.apache.openmeetings.db.entity.calendar.Appointment;
import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
import org.apache.openmeetings.db.entity.calendar.MeetingMember;
-import org.apache.openmeetings.db.util.TimezoneUtil;
+import com.github.openjson.JSONArray;
import com.github.openjson.JSONObject;
@XmlRootElement
@@ -45,8 +45,8 @@ public class AppointmentDTO implements Serializable {
private Long id;
private String title;
private String location;
- private Calendar start;
- private Calendar end;
+ private Date start;
+ private Date end;
private String description;
private UserDTO owner;
private Date inserted;
@@ -70,11 +70,8 @@ public class AppointmentDTO implements Serializable {
id = a.getId();
title = a.getTitle();
location = a.getLocation();
- TimeZone tz = TimezoneUtil.getTimeZone(a.getOwner());
- start = Calendar.getInstance(tz);
- start.setTime(a.getStart());
- end = Calendar.getInstance(tz);
- end.setTime(a.getEnd());
+ start = a.getStart();
+ end = a.getEnd();
description = a.getDescription();
owner = new UserDTO(a.getOwner());
inserted = a.getInserted();
@@ -118,19 +115,19 @@ public class AppointmentDTO implements Serializable {
this.location = location;
}
- public Calendar getStart() {
+ public Date getStart() {
return start;
}
- public void setStart(Calendar start) {
+ public void setStart(Date start) {
this.start = start;
}
- public Calendar getEnd() {
+ public Date getEnd() {
return end;
}
- public void setEnd(Calendar end) {
+ public void setEnd(Date end) {
this.end = end;
}
@@ -254,8 +251,26 @@ public class AppointmentDTO implements Serializable {
this.password = password;
}
+ public JSONObject toJson() {
+ JSONObject o = new JSONObject(this)
+ .put("start", getISO(start, owner.getTimeZoneId()))
+ .put("end", getISO(end, owner.getTimeZoneId()))
+ .put("inserted", getISO(inserted,
owner.getTimeZoneId()))
+ .put("updated", getISO(updated, owner.getTimeZoneId()));
+ if (meetingMembers != null && !meetingMembers.isEmpty()) {
+ JSONArray arr = new JSONArray();
+ for (MeetingMemberDTO m : meetingMembers) {
+ arr.put(m.toJson());
+ }
+ o.put("meetingMembers", arr);
+ } else {
+ o.remove("meetingMembers");
+ }
+ return o;
+ }
+
@Override
public String toString() {
- return new JSONObject(this).toString();
+ return toJson().toString();
}
}
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
index 0a5875132..48fdb2376 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
@@ -70,8 +70,14 @@ public class MeetingMemberDTO implements Serializable {
return m;
}
+ public JSONObject toJson() {
+ return new JSONObject()
+ .put("id", id)
+ .put("user", user.toJson());
+ }
+
@Override
public String toString() {
- return new JSONObject(this).toString();
+ return toJson().toString();
}
}
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
index dbd77aa15..8fe245d16 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
@@ -21,6 +21,7 @@ package org.apache.openmeetings.db.dto.user;
import static org.apache.openmeetings.db.util.DtoHelper.optEnum;
import static org.apache.openmeetings.db.util.DtoHelper.optEnumList;
import static org.apache.openmeetings.db.util.DtoHelper.optLong;
+import static org.apache.openmeetings.util.CalendarHelper.getISO;
import java.io.Serializable;
import java.util.ArrayList;
@@ -217,8 +218,18 @@ public class UserDTO implements Serializable {
return u;
}
+ public JSONObject toJson() {
+ JSONObject u = new JSONObject(this);
+ if (address != null) {
+ JSONObject a = u.getJSONObject("address");
+ a.put("inserted", getISO(address.getInserted(),
timeZoneId))
+ .put("updated", getISO(address.getUpdated(),
timeZoneId));
+ }
+ return u;
+ }
+
@Override
public String toString() {
- return new JSONObject(this).toString();
+ return toJson().toString();
}
}
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java
index ce69bcacd..e55d6dbad 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java
@@ -52,8 +52,8 @@ public class CalendarMapper {
a.setId(dto.getId());
a.setTitle(dto.getTitle());
a.setLocation(dto.getLocation());
- a.setStart(dto.getStart().getTime());
- a.setEnd(dto.getEnd().getTime());
+ a.setStart(dto.getStart());
+ a.setEnd(dto.getEnd());
a.setDescription(sanitize(dto.getDescription()));
a.setOwner(dto.getOwner() == null ? u :
userDao.get(dto.getOwner().getId()));
a.setInserted(dto.getInserted());
diff --git
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/CalendarHelper.java
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/CalendarHelper.java
index 1a5ee5989..c2ef25bfd 100644
---
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/CalendarHelper.java
+++
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/CalendarHelper.java
@@ -18,11 +18,11 @@
*/
package org.apache.openmeetings.util;
-import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@@ -47,8 +47,7 @@ public class CalendarHelper {
}
public static ZonedDateTime getZoneDateTime(Date d, String tzId) {
- long milli = (d == null ? new Date() : d).getTime();
- return Instant.ofEpochMilli(milli).atZone(getZoneId(tzId));
+ return ZonedDateTime.ofInstant((d == null ? new Date() :
d).toInstant(), getZoneId(tzId));
}
public static LocalDate getDate(Date d, String tzId) {
@@ -59,6 +58,10 @@ public class CalendarHelper {
return getZoneDateTime(d == null ? new Date() : d,
tzId).toLocalDateTime();
}
+ public static String getISO(Date d, String tzId) {
+ return d == null ? null : getZoneDateTime(d,
tzId).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
+ }
+
public static String formatMillis(long millis) {
long m = millis;
long hours = TimeUnit.MILLISECONDS.toHours(m);
diff --git
a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
index 1013cdb6c..22fc5538a 100644
---
a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
+++
b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
@@ -36,7 +36,7 @@ import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.util.tester.FormTester;
import org.junit.jupiter.api.Test;
-import org.wicketstuff.jquery.ui.calendar6.CalendarView;
+import org.wicketstuff.jquery.ui.calendar7.CalendarView;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
diff --git
a/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestCalendarService.java
b/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestCalendarService.java
index 255dacd25..a60c5b310 100644
---
a/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestCalendarService.java
+++
b/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestCalendarService.java
@@ -34,6 +34,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import java.util.stream.Stream;
import jakarta.ws.rs.core.Form;
@@ -55,7 +56,6 @@ import org.apache.openmeetings.db.entity.room.Room;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.mapper.CalendarMapper;
import org.apache.openmeetings.util.CalendarHelper;
-import org.apache.openmeetings.webservice.util.AppointmentParamConverter;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
@@ -190,6 +190,35 @@ class TestCalendarService extends AbstractWebServiceTest {
createApp("test");
}
+ @Test
+ void testUpdateWrongOwner() throws Exception {
+ JSONObject o1 = createAppointment("SOAP event");
+
+ String sid1 = loginNewUser();
+
+ Response resp1 = getClient(getCalendarUrl())
+ .path("/")
+ .query("sid", sid1)
+ .form(new Form().param("appointment",
o1.toString()));
+
+ assertNotNull(resp1, "Valid AppointmentDTO should be returned");
+ assertEquals(Response.Status.OK.getStatusCode(),
resp1.getStatus(), "Call should be successful");
+ AppointmentDTO dto = resp1.readEntity(AppointmentDTO.class);
+ assertNotNull(dto, "Valid DTO should be returned");
+ assertNotNull(dto.getId(), "DTO id should be valid");
+
+ JSONObject o2 = dto.toJson();
+ o2.put("title", "hijacked").put("owner", null);
+
+ String sid2 = loginNewUser();
+ Response resp2 = getClient(getCalendarUrl())
+ .path("/")
+ .query("sid", sid2)
+ .form(new Form().param("appointment",
o2.toString()));
+ assertNotNull(resp2, "Valid AppointmentDTO should be returned");
+
assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(),
resp2.getStatus(), "Call should NOT be successful");
+ }
+
@Test
void testDelete() {
ServiceResult sr = login();
@@ -204,9 +233,9 @@ class TestCalendarService extends AbstractWebServiceTest {
@Test
void testCreateWithOmMm() throws Exception {
JSONObject o = createAppointment("test")
- .put("meetingMembers", new JSONArray()
- .put(new
JSONObject().put("user", new JSONObject()
- .put("id",
1))));
+ .put("meetingMembers", new JSONArray(List.of(
+ new JSONObject(Map.of("user",
new JSONObject(Map.of("id", 1))))
+ )));
String uuid = randomUUID().toString();
User u = getUser(uuid);
@@ -265,7 +294,7 @@ class TestCalendarService extends AbstractWebServiceTest {
AppointmentDTO dto = createEventWithGuests(sid);
//try to change MM list
- JSONObject o1 = AppointmentParamConverter.json(dto)
+ JSONObject o1 = dto.toJson()
.put("meetingMembers", new JSONArray()
.put(new
JSONObject().put("user", new JSONObject()
.put("id",
1))));
@@ -295,7 +324,7 @@ class TestCalendarService extends AbstractWebServiceTest {
dto.getMeetingMembers().remove(initialList.size() - 1);
//try to change MM list
- JSONObject o = AppointmentParamConverter.json(dto);
+ JSONObject o = dto.toJson();
Response resp = getClient(getCalendarUrl())
.path("/")
.query("sid", sid)
diff --git
a/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestWebConverters.java
b/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestWebConverters.java
index ed3f4765a..2ac9382ff 100644
---
a/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestWebConverters.java
+++
b/openmeetings-web/src/test/java/org/apache/openmeetings/ws/TestWebConverters.java
@@ -24,11 +24,9 @@ import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZonedDateTime;
-import java.util.Calendar;
import java.util.Date;
import org.apache.openmeetings.db.dto.user.UserDTO;
-import org.apache.openmeetings.webservice.util.CalendarParamConverter;
import org.apache.openmeetings.webservice.util.DateParamConverter;
import org.junit.jupiter.api.Test;
@@ -48,15 +46,6 @@ class TestWebConverters {
, "Date should be parsed");
}
- @Test
- void testCalendarConverter() {
- CalendarParamConverter c = new CalendarParamConverter();
- assertEquals(null, c.fromString(null), "Null calendar should be
parsed");
- Calendar cal = Calendar.getInstance();
- cal.setTime(Date.from(LocalDate.of(2017, Month.JANUARY,
15).atStartOfDay(ZoneId.systemDefault()).toInstant()));
- assertEquals(cal, c.fromString("2017-01-15"), "Calendar should
be parsed");
- }
-
@Test
void testUserConverter() {
assertEquals(null, UserDTO.get((JSONObject)null), "Null UserDTO
should be parsed");
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
index 9fc1c2d68..17a9049b0 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
@@ -292,7 +292,7 @@ public class CalendarWebService extends BaseWebService {
@POST
@Path("/")
@Operation(
- description = "Create an appointment",
+ description = "Create/update an appointment",
responses = {
@ApiResponse(responseCode = "200",
description = "appointment saved",
content = @Content(schema =
@Schema(implementation = AppointmentDTOWrapper.class))),
@@ -304,7 +304,6 @@ public class CalendarWebService extends BaseWebService {
, @Parameter(required = true, description = "calendar
event") @FormParam("appointment") @WebParam(name="appointment") AppointmentDTO
appointment
) throws ServiceException
{
- //Seems to be create
log.debug("save SID: {}", sid);
return performCall(sid, sd -> {
@@ -313,9 +312,19 @@ public class CalendarWebService extends BaseWebService {
log.error("save: not authorized");
return false;
}
- return
AuthLevelUtil.hasWebServiceLevel(u.getRights())
- || appointment.getOwner() ==
null
- ||
appointment.getOwner().getId().equals(u.getId());
+ // short path
+ if
(AuthLevelUtil.hasWebServiceLevel(u.getRights())
+ || (appointment.getOwner() !=
null && appointment.getOwner().getId().equals(u.getId()))
+ || (appointment.getOwner() ==
null && appointment.getId() == null)
+ )
+ {
+ return true;
+ }
+ if (appointment.getOwner() == null &&
appointment.getId() != null) {
+ Appointment a =
dao.get(appointment.getId());
+ return
a.getOwner().getId().equals(u.getId());
+ }
+ return false;
}, sd -> {
User u = userDao.get(sd.getUserId());
Appointment a = calMapper.get(appointment, u);
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOListWrapper.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOListWrapper.java
index fff1a718f..407349fe2 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOListWrapper.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOListWrapper.java
@@ -53,18 +53,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
"deleted": false,
"email": "[email protected]",
"id": 1,
- "inserted": {
- "date": 29,
- "day": 0,
- "hours": 10,
- "minutes": 59,
- "month": 7,
- "ownerField": 1,
- "seconds": 49,
- "time": 1630191589000,
- "timezoneOffset": -720,
- "year": 121
- }
+ "inserted": "2021-09-19T10:59:49+1200"
},
"firstname": "firstname",
"id": 1,
@@ -89,18 +78,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
"deleted": false,
"email": "[email protected]",
"id": 1,
- "inserted": {
- "date": 29,
- "day": 0,
- "hours": 10,
- "minutes": 59,
- "month": 7,
- "ownerField": 1,
- "seconds": 49,
- "time": 1630191589000,
- "timezoneOffset": -720,
- "year": 121
- }
+ "inserted": "2021-09-19T10:59:49+1200"
},
"firstname": "firstname",
"id": 1,
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOWrapper.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOWrapper.java
index 9199ce9a8..f1beefba9 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOWrapper.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOWrapper.java
@@ -50,19 +50,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
"deleted": false,
"email": "[email protected]",
"id": 1,
- "inserted": {
- "date": 29,
- "day": 0,
- "hours": 10,
- "minutes": 59,
- "month": 7,
- "ownerField": 1,
- "seconds": 49,
- "time": 1630191589000,
- "timezoneOffset": -720,
- "year": 121
- }
- },
+ "inserted": "2021-09-19T10:59:49+1200"
+ },
"firstname": "firstname",
"id": 1,
"languageId": 1,
@@ -74,7 +63,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
"DASHBOARD",
"ADMIN",
"LOGIN "
- ],
+ ],
"timeZoneId": "Europe/Berlin",
"type": "USER"
}
@@ -86,19 +75,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
"deleted": false,
"email": "[email protected]",
"id": 1,
- "inserted": {
- "date": 29,
- "day": 0,
- "hours": 10,
- "minutes": 59,
- "month": 7,
- "ownerField": 1,
- "seconds": 49,
- "time": 1630191589000,
- "timezoneOffset": -720,
- "year": 121
- }
- },
+ "inserted": "2021-09-19T10:59:49+1200"
+ },
"firstname": "firstname",
"id": 1,
"languageId": 1,
@@ -110,10 +88,10 @@ import io.swagger.v3.oas.annotations.media.Schema;
"DASHBOARD",
"ADMIN",
"LOGIN"
- ],
+ ],
"timeZoneId": "Europe/Berlin",
"type": "USER"
- },
+ },
"passwordProtected": false,
"reminder": "ICAL",
"reminderEmailSend": false,
@@ -136,7 +114,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
"type": "CONFERENCE",
"waitModerator": false,
"waitRecording": false
- },
+ },
"start": "2021-09-23T11:31:00+1200",
"title": "New Event"
}
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
index 3765fcf3b..f3813495e 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
@@ -68,7 +68,7 @@ public class AppointmentListMessageBodyWriter implements
MessageBodyWriter<List<
Writer writer = new OutputStreamWriter(out, UTF_8);
JSONArray rr = new JSONArray();
for (AppointmentDTO dto : t) {
- rr.put(AppointmentParamConverter.json(dto));
+ rr.put(dto.toJson());
}
writer.write(new JSONObject().put(ROOT, rr).toString());
writer.flush();
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
index 42de63dc1..66e1f144f 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
@@ -57,7 +57,7 @@ public class AppointmentMessageBodyWriter implements
MessageBodyWriter<Appointme
throws IOException
{
Writer writer = new OutputStreamWriter(out, UTF_8);
- writer.write(new JSONObject().put(ROOT,
AppointmentParamConverter.json(t)).toString());
+ writer.write(new JSONObject().put(ROOT, t.toJson()).toString());
writer.flush();
}
}
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
index b557f1a8e..c1fd31217 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
@@ -20,9 +20,6 @@ package org.apache.openmeetings.webservice.util;
import static org.apache.openmeetings.db.util.DtoHelper.optEnum;
import static org.apache.openmeetings.db.util.DtoHelper.optLong;
-import static
org.apache.openmeetings.util.CalendarPatterns.ISO8601_FULL_FORMAT;
-
-import java.util.Date;
import jakarta.ws.rs.ext.ParamConverter;
@@ -49,9 +46,8 @@ public class AppointmentParamConverter implements
ParamConverter<AppointmentDTO>
a.setTitle(o.optString("title"));
a.setLocation(o.optString("location"));
a.setOwner(UserDTO.get(o.optJSONObject("owner")));
- String tzId = a.getOwner() == null ? null :
a.getOwner().getTimeZoneId();
- a.setStart(CalendarParamConverter.get(o.optString("start"),
tzId));
- a.setEnd(CalendarParamConverter.get(o.optString("end"), tzId));
+ a.setStart(DateParamConverter.get(o.optString("start")));
+ a.setEnd(DateParamConverter.get(o.optString("end")));
a.setDescription(o.optString("description"));
a.setInserted(DateParamConverter.get(o.optString("inserted")));
a.setUpdated(DateParamConverter.get(o.optString("updated")));
@@ -73,17 +69,8 @@ public class AppointmentParamConverter implements
ParamConverter<AppointmentDTO>
return a;
}
- public static JSONObject json(AppointmentDTO val) {
- Date i = val.getInserted(), u = val.getUpdated();
- return new JSONObject(val)
- .put("start",
ISO8601_FULL_FORMAT.format(val.getStart()))
- .put("end",
ISO8601_FULL_FORMAT.format(val.getEnd()))
- .put("inserted", i == null ? null :
ISO8601_FULL_FORMAT.format(i))
- .put("updated", u == null ? null :
ISO8601_FULL_FORMAT.format(u));
- }
-
@Override
public String toString(AppointmentDTO val) {
- return json(val).toString();
+ return val.toString();
}
}
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
deleted file mode 100644
index 31ee459be..000000000
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.webservice.util;
-
-import static
org.apache.openmeetings.util.CalendarPatterns.ISO8601_FULL_FORMAT;
-
-import java.util.Calendar;
-import java.util.TimeZone;
-
-import jakarta.ws.rs.ext.ParamConverter;
-
-import org.apache.wicket.util.string.Strings;
-
-public class CalendarParamConverter implements ParamConverter<Calendar> {
- public static Calendar get(String val, String tzId) {
- Calendar c = Strings.isEmpty(tzId) ? Calendar.getInstance() :
Calendar.getInstance(TimeZone.getTimeZone(tzId));
- c.setTime(DateParamConverter.get(val));
- return c;
- }
-
- @Override
- public Calendar fromString(String val) {
- if (Strings.isEmpty(val)) {
- return null;
- }
- Calendar c = Calendar.getInstance();
- c.setTime(DateParamConverter.get(val));
- return c;
- }
-
- @Override
- public String toString(Calendar val) {
- return ISO8601_FULL_FORMAT.format(val);
- }
-}
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
index ca5ae0c75..91f907e75 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
@@ -20,7 +20,6 @@ package org.apache.openmeetings.webservice.util;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.util.Calendar;
import java.util.Date;
import jakarta.ws.rs.ext.ParamConverter;
@@ -34,9 +33,7 @@ public class OmParamConverterProvider implements
ParamConverterProvider {
@SuppressWarnings("unchecked")
@Override
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type
genericType, Annotation[] annotations) {
- if (Calendar.class.isAssignableFrom(rawType)) {
- return (ParamConverter<T>)new CalendarParamConverter();
- } else if (Date.class.isAssignableFrom(rawType)) {
+ if (Date.class.isAssignableFrom(rawType)) {
return (ParamConverter<T>)new DateParamConverter();
} else if (AppointmentDTO.class.isAssignableFrom(rawType)) {
return (ParamConverter<T>)new
AppointmentParamConverter();
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserMessageBodyWriter.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserMessageBodyWriter.java
index 0ed1f7edd..bcb062cf0 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserMessageBodyWriter.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserMessageBodyWriter.java
@@ -57,7 +57,7 @@ public class UserMessageBodyWriter implements
MessageBodyWriter<UserDTO> {
throws IOException
{
Writer writer = new OutputStreamWriter(out, UTF_8);
- writer.write(new JSONObject().put(ROOT,
UserParamConverter.json(t)).toString());
+ writer.write(new JSONObject().put(ROOT, t.toJson()).toString());
writer.flush();
}
}
diff --git
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserParamConverter.java
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserParamConverter.java
index ec4bc8d43..01b27f342 100644
---
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserParamConverter.java
+++
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserParamConverter.java
@@ -36,12 +36,8 @@ public class UserParamConverter implements
ParamConverter<UserDTO> {
return UserDTO.get(o);
}
- public static JSONObject json(UserDTO val) {
- return new JSONObject(val);
- }
-
@Override
public String toString(UserDTO val) {
- return json(val).toString();
+ return val.toJson().toString();
}
}