You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/09/07 04:06:46 UTC

openmeetings git commit: [OPENMEETINGS-1693] user is now created using @Form parameters

Repository: openmeetings
Updated Branches:
  refs/heads/3.3.x 83cb67202 -> c1dc35ca5


[OPENMEETINGS-1693] user is now created using @Form parameters


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/c1dc35ca
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/c1dc35ca
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/c1dc35ca

Branch: refs/heads/3.3.x
Commit: c1dc35ca5333156e85571b181fd199bf8abbc1ef
Parents: 83cb672
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 7 11:06:38 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 7 11:06:38 2017 +0700

----------------------------------------------------------------------
 .../main/webapp/WEB-INF/classes/cxf-servlet.xml |  1 +
 .../test/webservice/AbstractWebServiceTest.java |  7 ++-
 .../test/webservice/TestUserService.java        |  5 +-
 .../openmeetings/webservice/UserWebService.java |  9 ++-
 .../util/OmParamConverterProvider.java          |  3 +
 .../webservice/util/UserMessageBodyWriter.java  | 63 ++++++++++++++++++++
 .../webservice/util/UserParamConverter.java     | 47 +++++++++++++++
 7 files changed, 128 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
index 6387bad..4475d20 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
@@ -57,6 +57,7 @@
 		<jaxrs:providers>
 			<bean id="appDtoMessageBodyWriter" class="org.apache.openmeetings.webservice.util.AppointmentMessageBodyWriter" />
 			<bean id="appDtoListMessageBodyWriter" class="org.apache.openmeetings.webservice.util.AppointmentListMessageBodyWriter" />
+			<bean id="userDtoMessageBodyWriter" class="org.apache.openmeetings.webservice.util.UserMessageBodyWriter" />
 			<bean id="omParamProvider" class="org.apache.openmeetings.webservice.util.OmParamConverterProvider"/>
 		</jaxrs:providers>
 	</jaxrs:server>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
index 5d90e04..846b7c2 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.test.webservice;
 
+import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
 import static org.apache.openmeetings.db.util.ApplicationHelper.getWicketTester;
 import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
 import static org.junit.Assert.assertEquals;
@@ -28,6 +29,8 @@ import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.UUID;
 
+import javax.ws.rs.core.Form;
+
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.cxf.jaxrs.client.WebClient;
@@ -125,8 +128,8 @@ public class AbstractWebServiceTest extends AbstractJUnitDefaults {
 		UserDTO user = getClient(USER_SERVICE_URL)
 				.path("/")
 				.query("sid", r.getMessage())
-				.query("user", dto.toString())
-				.query("confirm", false).post(null, UserDTO.class);
+				.type(APPLICATION_FORM_URLENCODED)
+				.post(new Form().param("user", dto.toString()).param("confirm", "" + false), UserDTO.class);
 		Assert.assertNotNull(user.getId());
 		u.setId(user.getId());
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestUserService.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestUserService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestUserService.java
index ddc9882..01861d3 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestUserService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestUserService.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.test.webservice;
 
+import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -102,8 +103,8 @@ public class TestUserService extends AbstractWebServiceTest {
 		UserDTO user = getClient(USER_SERVICE_URL)
 				.path("/")
 				.query("sid", r.getMessage())
-				.query("user", u.toString())
-				.query("confirm", false).post(null, UserDTO.class);
+				.type(APPLICATION_FORM_URLENCODED)
+				.post(new Form().param("user", u.toString()).param("confirm", "" + false), UserDTO.class);
 		assertNotNull("Valid UserDTO should be returned", user);
 		assertNotNull("Id should not be NULL", user.getId());
 		assertEquals("OM Call should be successful", u.getLogin(), user.getLogin());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
index 2fef310..e9ce939 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
@@ -46,6 +46,7 @@ import org.apache.cxf.feature.Features;
 import org.apache.openmeetings.IApplication;
 import org.apache.openmeetings.core.util.StrongPasswordValidator;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
 import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
 import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -160,8 +161,8 @@ public class UserWebService extends BaseWebService {
 	@Path("/")
 	public UserDTO add(
 			@WebParam(name="sid") @QueryParam("sid") String sid
-			, @WebParam(name="user") @QueryParam("user") UserDTO user
-			, @WebParam(name="confirm") @QueryParam("confirm") Boolean confirm
+			, @WebParam(name="user") @FormParam("user") UserDTO user
+			, @WebParam(name="confirm") @FormParam("confirm") Boolean confirm
 			) throws ServiceException
 	{
 		try {
@@ -203,8 +204,10 @@ public class UserWebService extends BaseWebService {
 						"", false, true, // generate SIP Data if the config is enabled
 						tz, confirm);
 
-				if (userId == null || userId < 0) {
+				if (userId == null) {
 					throw new ServiceException("Unknown error");
+				} else if (userId < 0) {
+					throw new ServiceException(getBean(ErrorDao.class).getMessage(userId, 1L));
 				}
 
 				User u = userDao.get(userId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
----------------------------------------------------------------------
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 2d328d5..52fafc7 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
@@ -27,6 +27,7 @@ import javax.ws.rs.ext.ParamConverter;
 import javax.ws.rs.ext.ParamConverterProvider;
 
 import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.user.UserDTO;
 
 public class OmParamConverterProvider implements ParamConverterProvider {
 
@@ -39,6 +40,8 @@ public class OmParamConverterProvider implements ParamConverterProvider {
 			return (ParamConverter<T>)new DateParamConverter();
 		} else if (AppointmentDTO.class.isAssignableFrom(rawType)) {
 			return (ParamConverter<T>)new AppointmentParamConverter();
+		} else if (UserDTO.class.isAssignableFrom(rawType)) {
+			return (ParamConverter<T>)new UserParamConverter();
 		}
 		return null;
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserMessageBodyWriter.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..efad818
--- /dev/null
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserMessageBodyWriter.java
@@ -0,0 +1,63 @@
+/*
+ * 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.webservice.util.UserParamConverter.ROOT;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+
+import com.github.openjson.JSONObject;
+
+@Provider
+@Produces({MediaType.APPLICATION_JSON})
+public class UserMessageBodyWriter implements MessageBodyWriter<UserDTO> {
+	@Override
+	public boolean isWriteable(Class<?> clazz, Type type, Annotation[] annotations, MediaType mediaType) {
+		return UserDTO.class.equals(type);
+	}
+
+	@Override
+	public long getSize(UserDTO t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+		return 0;
+	}
+
+	@Override
+	public void writeTo(UserDTO t, Class<?> type, Type genericType, Annotation[] annotations,
+			MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream out)
+			throws IOException, WebApplicationException
+	{
+		Writer writer = new PrintWriter(out);
+		writer.write(new JSONObject().put(ROOT, UserParamConverter.json(t)).toString());
+		writer.flush();
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/c1dc35ca/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserParamConverter.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..9ffde2e
--- /dev/null
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/UserParamConverter.java
@@ -0,0 +1,47 @@
+/*
+ * 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 javax.ws.rs.ext.ParamConverter;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+
+import com.github.openjson.JSONObject;
+
+public class UserParamConverter implements ParamConverter<UserDTO> {
+	public static final String ROOT = "userDTO";
+
+	@Override
+	public UserDTO fromString(String val) {
+		JSONObject o = new JSONObject(val);
+		if (o.has(ROOT)) {
+			o = o.getJSONObject(ROOT);
+		}
+		return UserDTO.get(o);
+	}
+
+	public static JSONObject json(UserDTO val) {
+		return new JSONObject(val);
+	}
+
+	@Override
+	public String toString(UserDTO val) {
+		return json(val).toString();
+	}
+}