Skip to content

Commit 5097486

Browse files
author
Mircea Carasel
committed
UC-4439: Add config support for Zoiper soft phone
-use spring mongo data support for both jitsi and zoiper (made the access solution available in sipXcommons) -hook in sipxconfig authentication manager to provide authentication via sipxconfig layer -update jitsi provisioning to use sipXcommons classes and add dedicated code -zoiper db access using spring data -zoiper rest controller (spring) to produce provisioning XML -zoiper webapp to send provisioning xml via HTTP(s) -https support via apache proxy -zoiper phone plugin (phone settings UI pages) -build support
1 parent 8764865 commit 5097486

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+3564
-182
lines changed

mak/modules.mk

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ sipx_core = \
3737
sipXyard \
3838
sipXrelease \
3939
sipXjitsi \
40+
sipXzoiper \
4041
sipXecs
4142

4243
#additional configure options for sipXresiprocate package

sipXcom/sipxcom.spec.in

+1
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ Requires: sipxsqa-server >= %version
138138
Requires: sipxunidata >= %version
139139
Requires: sipxcallqueue
140140
Requires: sipxjitsi >= %version
141+
Requires: sipxzoiper >= %version
141142

142143
Obsoletes: %{name}-doc
143144
Obsoletes: epel-release

sipXcommons/src/common.am

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ commons_PKGS = \
4848
spring-security-core \
4949
spring-security-ldap \
5050
spring-security-web \
51+
spring-web \
52+
spring-webmvc \
5153
joda-time \
5254
hazelcast-all \
5355
reflections \

sipXjitsi/webapp/src/org/sipxcom/sipxconfig/pojo/Entity.java sipXcommons/src/main/java/org/sipfoundry/commons/mongo/Entity.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/**
2-
* Copyright (C) 2015 sipXcom, certain elements licensed under a Contributor Agreement.
2+
* Copyright (C) 2017 sipXcom, certain elements licensed under a Contributor Agreement.
33
* Contributors retain copyright to elements licensed under a Contributor Agreement.
44
* Licensed to the User under the LGPL license.
55
*/
6-
package org.sipxcom.sipxconfig.pojo;
6+
package org.sipfoundry.commons.mongo;
77

88
import java.util.List;
99

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
/**
2-
* Copyright (C) 2015 sipXcom, certain elements licensed under a Contributor Agreement.
2+
* Copyright (C) 2017 sipXcom, certain elements licensed under a Contributor Agreement.
33
* Contributors retain copyright to elements licensed under a Contributor Agreement.
44
* Licensed to the User under the LGPL license.
55
*/
6-
package org.sipxcom.sipxconfig.provision.dao;
6+
package org.sipfoundry.commons.mongo;
77

8-
import org.sipxcom.sipxconfig.pojo.Entity;
98
import org.springframework.data.mongodb.repository.MongoRepository;
109

11-
public interface UserRepository extends MongoRepository<Entity, String> {
10+
public interface EntityRepository extends MongoRepository<Entity, String> {
1211
public Entity findByUid(String uid);
1312
public Entity findOneByEntAndModelAndPhLinesContaining(String ent, String model, String uid);
1413
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Copyright (C) 2017 sipXcom, certain elements licensed under a Contributor Agreement.
3+
* Contributors retain copyright to elements licensed under a Contributor Agreement.
4+
* Licensed to the User under the LGPL license.
5+
*/
6+
package org.sipfoundry.commons.mongo;
7+
8+
import java.io.FileInputStream;
9+
import java.util.Properties;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
12+
13+
import com.mongodb.Mongo;
14+
import com.mongodb.MongoClient;
15+
import com.mongodb.MongoClientURI;
16+
17+
public class SipXAbstractMongoConfiguration extends AbstractMongoConfiguration {
18+
19+
public static final String DATABASE_NAME = "imdb";
20+
public static final String CONFIG_GILE = "/mongo-client.ini";
21+
public static final String CONNECTION_URL_KEY = "connectionUrl";
22+
23+
@Override
24+
protected String getDatabaseName() {
25+
return DATABASE_NAME;
26+
}
27+
28+
@Override
29+
@Bean
30+
public Mongo mongo() throws Exception {
31+
String mongoClientIni = this.getClass().getResource(CONFIG_GILE).getFile();
32+
Properties prop = new Properties();
33+
FileInputStream input = new FileInputStream(mongoClientIni);
34+
prop.load(input);
35+
String connString = prop.getProperty(CONNECTION_URL_KEY);
36+
return new MongoClient(new MongoClientURI(connString));
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Copyright (C) 2017 sipXcom, certain elements licensed under a Contributor Agreement.
3+
* Contributors retain copyright to elements licensed under a Contributor Agreement.
4+
* Licensed to the User under the LGPL license.
5+
*/
6+
package org.sipfoundry.commons.security;
7+
8+
import javax.servlet.ServletContext;
9+
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.context.ApplicationContext;
12+
import org.springframework.security.authentication.ProviderManager;
13+
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
14+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
15+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
16+
import org.springframework.web.context.support.WebApplicationContextUtils;
17+
18+
public class SipXWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
19+
20+
@Autowired
21+
private ServletContext context;
22+
23+
private static String SIPXCONFIG_PATH = "/sipxconfig";
24+
25+
private static String AUTHENTICATION_MANAGER = "authenticationManager";
26+
27+
@Override
28+
protected void configure(HttpSecurity http) throws Exception {
29+
http
30+
.csrf().disable()
31+
.authorizeRequests()
32+
.anyRequest().authenticated()
33+
.and()
34+
.httpBasic();
35+
}
36+
37+
@Autowired
38+
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
39+
ServletContext sipxconfigCtx = context.getContext(SIPXCONFIG_PATH);
40+
ApplicationContext webContext = WebApplicationContextUtils
41+
.getRequiredWebApplicationContext(sipxconfigCtx);
42+
ProviderManager authManager = (ProviderManager) webContext.getBean(AUTHENTICATION_MANAGER);
43+
auth.parentAuthenticationManager(authManager);
44+
}
45+
}

sipXconfig/etc/sipxpbx/sipxconfig-jetty.xml

+11-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,17 @@
5757
<Set name="tempDirectory"><SystemProperty name="jetty.tmp.dir"/>/jitsiprov</Set>
5858
</New>
5959
</Arg>
60-
</Call>
60+
</Call>
61+
<Call name="addHandler">
62+
<Arg>
63+
<New class="org.eclipse.jetty.webapp.WebAppContext">
64+
<Set name="contextPath">/zoiperprov</Set>
65+
<Set name="war"><SystemProperty name="jetty.lib.dir"/>/sipxZoiperProv.war</Set>
66+
<Set name="extractWAR">true</Set>
67+
<Set name="tempDirectory"><SystemProperty name="jetty.tmp.dir"/>/zoiperprov</Set>
68+
</New>
69+
</Arg>
70+
</Call>
6171
</Ref>
6272

6373
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">

sipXconfig/etc/sipxpbx/sipxconfig/sipxconfig-apache.conf

+5
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ ProxyTimeout 240
5252
ProxyPassReverse http://127.0.0.1:12000/jitsiprov
5353
</Location>
5454

55+
<Location /zoiperprov>
56+
ProxyPass http://127.0.0.1:12000/zoiperprov
57+
ProxyPassReverse http://127.0.0.1:12000/zoiperprov
58+
</Location>
59+
5560
Listen 8090
5661
CoreDumpDirectory $(sipx.SIPX_LOGDIR)
5762
Alias /phone/profile/docroot/ "$(sipx.SIPX_VARDIR)/configserver/phone/profile/docroot/"

sipXjitsi/webapp/src/org/sipxcom/sipxconfig/pojo/MongoUserDetails.java

-55
This file was deleted.

sipXjitsi/webapp/src/org/sipxcom/sipxconfig/provision/MongoConfig.java

+2-35
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,12 @@
55
*/
66
package org.sipxcom.sipxconfig.provision;
77

8-
import java.io.FileInputStream;
9-
import java.util.Properties;
10-
11-
import org.apache.commons.logging.Log;
12-
import org.apache.commons.logging.LogFactory;
13-
import org.springframework.context.annotation.Bean;
8+
import org.sipfoundry.commons.mongo.SipXAbstractMongoConfiguration;
149
import org.springframework.context.annotation.Configuration;
15-
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
1610
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
1711

18-
import com.mongodb.Mongo;
19-
import com.mongodb.MongoClient;
20-
import com.mongodb.MongoClientURI;
21-
2212
@Configuration
2313
@EnableMongoRepositories
24-
public class MongoConfig extends AbstractMongoConfiguration {
25-
26-
private static final Log LOG = LogFactory.getLog(MongoConfig.class);
27-
28-
public static final String DATABASE_NAME = "imdb";
29-
public static final String CONFIG_GILE = "/mongo-client.ini";
30-
public static final String CONNECTION_URL_KEY = "connectionUrl";
31-
32-
@Override
33-
protected String getDatabaseName() {
34-
return DATABASE_NAME;
35-
}
14+
public class MongoConfig extends SipXAbstractMongoConfiguration {
3615

37-
@Override
38-
@Bean
39-
public Mongo mongo() throws Exception {
40-
String mongoClientIni = this.getClass().getResource(CONFIG_GILE).getFile();
41-
LOG.info("Mongo configuration file: " + mongoClientIni);
42-
Properties prop = new Properties();
43-
FileInputStream input = new FileInputStream(mongoClientIni);
44-
prop.load(input);
45-
String connString = prop.getProperty(CONNECTION_URL_KEY);
46-
LOG.debug("Mongo connection string: " + connString);
47-
return new MongoClient(new MongoClientURI(connString));
48-
}
4916
}

sipXjitsi/webapp/src/org/sipxcom/sipxconfig/provision/MongoUserDetailsService.java

-43
This file was deleted.

sipXjitsi/webapp/src/org/sipxcom/sipxconfig/provision/ProvisioningController.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import org.apache.commons.lang.StringUtils;
1414
import org.apache.commons.logging.Log;
1515
import org.apache.commons.logging.LogFactory;
16+
import org.sipfoundry.commons.mongo.Entity;
1617
import org.sipfoundry.sipxconfig.security.UserDetailsImpl;
17-
import org.sipxcom.sipxconfig.pojo.Entity;
18-
import org.sipxcom.sipxconfig.provision.dao.UserRepository;
18+
import org.sipxcom.sipxconfig.provision.dao.JitsiEntityRepository;
1919
import org.springframework.beans.factory.annotation.Autowired;
2020
import org.springframework.security.core.Authentication;
2121
import org.springframework.stereotype.Controller;
@@ -31,7 +31,7 @@ public class ProvisioningController {
3131
private static final String JITSI_CONF = "/jitsi/jitsiconf.properties";
3232

3333
@Autowired
34-
private UserRepository repository;
34+
private JitsiEntityRepository repository;
3535

3636
@RequestMapping(value = "/provisioning", method = RequestMethod.POST)
3737
@ResponseBody

sipXjitsi/webapp/src/org/sipxcom/sipxconfig/provision/SecurityConfig.java

+5-39
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,15 @@
55
*/
66
package org.sipxcom.sipxconfig.provision;
77

8-
import javax.servlet.ServletContext;
8+
import org.sipfoundry.commons.security.SipXWebSecurityConfigurerAdapter;
99

10-
import org.springframework.beans.factory.annotation.Autowired;
11-
import org.springframework.context.ApplicationContext;
1210
import org.springframework.context.annotation.Configuration;
13-
import org.springframework.security.authentication.ProviderManager;
14-
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
15-
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
16-
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
11+
1712
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
18-
import org.springframework.web.context.support.WebApplicationContextUtils;
13+
1914

2015
@Configuration
2116
@EnableWebMvcSecurity
22-
public class SecurityConfig extends WebSecurityConfigurerAdapter {
23-
24-
@Autowired
25-
private MongoUserDetailsService userDetailsService;
26-
27-
@Autowired
28-
private ServletContext context;
29-
30-
private static String SIPXCONFIG_PATH = "/sipxconfig";
31-
32-
private static String AUTHENTICATION_MANAGER = "authenticationManager";
33-
34-
@Override
35-
protected void configure(HttpSecurity http) throws Exception {
36-
http
37-
.csrf().disable()
38-
.authorizeRequests()
39-
.anyRequest().authenticated()
40-
.and()
41-
.httpBasic();
42-
}
43-
44-
@Autowired
45-
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
46-
ServletContext sipxconfigCtx = context.getContext(SIPXCONFIG_PATH);
47-
ApplicationContext webContext = WebApplicationContextUtils
48-
.getRequiredWebApplicationContext(sipxconfigCtx);
49-
ProviderManager authManager = (ProviderManager) webContext.getBean(AUTHENTICATION_MANAGER);
50-
auth.parentAuthenticationManager(authManager);
51-
//auth.userDetailsService(userDetailsService);
52-
}
17+
public class SecurityConfig extends SipXWebSecurityConfigurerAdapter {
18+
5319
}

0 commit comments

Comments
 (0)