Repository: openmeetings
Updated Branches:
  refs/heads/4.0.x db75fdbca -> ff2db5d44


[OPENMEETINGS-1805] possibility to allow rest calls from specific addresses is 
added


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

Branch: refs/heads/4.0.x
Commit: ff2db5d4416f4573d9b32e493022b3f70c24f587
Parents: db75fdb
Author: Maxim Solodovnik <[email protected]>
Authored: Tue Dec 26 15:44:09 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Tue Dec 26 15:44:09 2017 +0700

----------------------------------------------------------------------
 .../db/dao/basic/ConfigurationDao.java          | 10 ++++
 .../installation/ImportInitvalues.java          |  2 +
 .../util/OpenmeetingsVariables.java             | 10 ++++
 .../main/webapp/WEB-INF/classes/cxf-servlet.xml |  3 ++
 .../webservice/util/AllowOriginProvider.java    | 51 ++++++++++++++++++++
 5 files changed, 76 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ff2db5d4/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 27bc446..c370666 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -42,6 +42,7 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_KEYCODE_
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_BITRATE;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_RATE;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REST_ALLOW_ORIGIN;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_APP_NAME;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
@@ -68,6 +69,7 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setDefaultLang;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setExtProcessTtl;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.setGaCode;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setMaxUploadSize;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setRestAllowOrigin;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setRoomSettings;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.setSipEnabled;
 
@@ -346,6 +348,9 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
                        case CONFIG_DEFAULT_TIMEZONE:
                                reloadTimezone();
                                break;
+                       case CONFIG_REST_ALLOW_ORIGIN:
+                               reloadRestAllowOrigin();
+                               break;
                }
                return entity;
        }
@@ -413,6 +418,10 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
                OpenmeetingsVariables.setDefaultTimezone(defaultTzName);
        }
 
+       private void reloadRestAllowOrigin() {
+               setRestAllowOrigin(getString(CONFIG_REST_ALLOW_ORIGIN, null));
+       }
+
        public void reinit() {
                reloadMaxUpload();
                reloadCrypt();
@@ -424,6 +433,7 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
                reloadAudioRate();
                reloadAudioBitrate();
                reloadTimezone();
+               reloadRestAllowOrigin();
                reloadRoomSettings();
        }
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ff2db5d4/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 4cfde7b..cc66f0c 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -70,6 +70,7 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_SOAP;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REMINDER_MESSAGE;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REPLY_TO_ORGANIZER;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REST_ALLOW_ORIGIN;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
@@ -337,6 +338,7 @@ public class ImportInitvalues {
                addCfg(list, CONFIG_REMINDER_MESSAGE, null, 
Configuration.Type.string, "Reminder message to notify about upcoming 
appointment, generated message will be used if not set", VER_2_0);
                addCfg(list, CONFIG_MP4_AUDIO_RATE, 
String.valueOf(getAudioRate()), Configuration.Type.number, "Audio sampling rate 
(in Hz) for MP4 video", "4.0.1");
                addCfg(list, CONFIG_MP4_AUDIO_BITRATE, 
String.valueOf(getAudioBitrate()), Configuration.Type.string, "Audio bitrate 
for MP4 video", "4.0.1");
+               addCfg(list, CONFIG_REST_ALLOW_ORIGIN, null, 
Configuration.Type.string, "List of addresses browser Ajax REST requests are 
allowed from", "4.0.2");
                return list;
        }
        public void loadConfiguration(InstallationConfig cfg) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ff2db5d4/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
index a3fb710..b17fbcd 100644
--- 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
+++ 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -92,6 +92,7 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_REMINDER_MESSAGE = "reminder.message";
        public static final String CONFIG_MP4_AUDIO_RATE = "mp4.audio.rate";
        public static final String CONFIG_MP4_AUDIO_BITRATE = 
"mp4.audio.bitrate";
+       public static final String CONFIG_REST_ALLOW_ORIGIN = 
"rest.allow.origin";
 
        public static final String HEADER_XFRAME_SAMEORIGIN = "SAMEORIGIN";
        public static final String HEADER_CSP_SELF = "default-src 'self'; 
style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 
'unsafe-eval'; img-src 'self' data:;";
@@ -129,6 +130,7 @@ public class OpenmeetingsVariables {
        private static int audioRate = 22050;
        private static String audioBitrate = "32k";
        private static String defaultTimezone = "Europe/Berlin";
+       private static String restAllowOrigin = null;
 
        private OpenmeetingsVariables() {}
 
@@ -255,4 +257,12 @@ public class OpenmeetingsVariables {
        public static void setDefaultTimezone(String timezone) {
                defaultTimezone = timezone;
        }
+
+       public static String getRestAllowOrigin() {
+               return restAllowOrigin;
+       }
+
+       public static void setRestAllowOrigin(String allowOrigin) {
+               restAllowOrigin = allowOrigin;
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ff2db5d4/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 7fcf407..eb52f5b 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
@@ -55,6 +55,9 @@
                        <bean id="userDtoMessageBodyWriter" 
class="org.apache.openmeetings.webservice.util.UserMessageBodyWriter" />
                        <bean id="omParamProvider" 
class="org.apache.openmeetings.webservice.util.OmParamConverterProvider"/>
                </jaxrs:providers>
+               <jaxrs:outInterceptors>
+                       <bean id="allowOriginProvider" 
class="org.apache.openmeetings.webservice.util.AllowOriginProvider"/>
+               </jaxrs:outInterceptors>
        </jaxrs:server>
        <jaxws:endpoint id="calendarServiceWS" address="/CalendarService" 
implementor="#calendarWebService"/>
        <jaxws:endpoint id="errorServiceWS" address="/ErrorService" 
implementor="#errorWebService" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ff2db5d4/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AllowOriginProvider.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AllowOriginProvider.java
 
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AllowOriginProvider.java
new file mode 100644
index 0000000..f238102
--- /dev/null
+++ 
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AllowOriginProvider.java
@@ -0,0 +1,51 @@
+/*
+ * 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.OpenmeetingsVariables.getRestAllowOrigin;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
+import org.apache.wicket.util.string.Strings;
+
+public class AllowOriginProvider extends AbstractOutDatabindingInterceptor {
+       public AllowOriginProvider() {
+               super(Phase.MARSHAL);
+       }
+
+       @Override
+       public void handleMessage(Message outMessage) {
+               final String allowOrigin = getRestAllowOrigin();
+               if (!Strings.isEmpty(allowOrigin)) {
+                       @SuppressWarnings("unchecked")
+                       Map<String, List<String>> headers = (Map<String, 
List<String>>)outMessage.get(Message.PROTOCOL_HEADERS);
+                       if (headers == null) {
+                               headers = new 
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+                               outMessage.put(Message.PROTOCOL_HEADERS, 
headers);
+                       }
+                       headers.put("Access-Control-Allow-Origin", 
Arrays.asList(allowOrigin));
+               }
+       }
+}

Reply via email to