diff --git a/debian/control b/debian/control index 2b22640..e4c4231 100644 --- a/debian/control +++ b/debian/control @@ -32,6 +32,7 @@ Depends: gettext, libcatalyst-perl, liblocale-maketext-lexicon-perl, librpc-xml-perl, + libapache2-request-perl, ngcp-ossbss-billing (>= 2.0.2), ngcp-ossbss-voip (>= 3.0.0), ngcp-templates-www-csc, diff --git a/debian/ngcp-www-csc.install b/debian/ngcp-www-csc.install index 3c6e767..fca266f 100644 --- a/debian/ngcp-www-csc.install +++ b/debian/ngcp-www-csc.install @@ -1,5 +1,7 @@ csc.yml usr/share/ngcp-www-csc/lib/csc/ -lib usr/share/ngcp-www-csc/ +lib/csc usr/share/ngcp-www-csc/lib/ +lib/csc.pm usr/share/ngcp-www-csc/lib/ +lib/JitsiProvisioning.pm usr/share/perl5/Sipwise/ root usr/share/ngcp-www-csc/lib/csc/ script/csc_cgi.pl usr/share/ngcp-www-csc/script/ script/csc_fastcgi.pl usr/share/ngcp-www-csc/script/ diff --git a/debian/ngcp-www-csc.postinst b/debian/ngcp-www-csc.postinst index f19d5c6..f6ae08b 100644 --- a/debian/ngcp-www-csc.postinst +++ b/debian/ngcp-www-csc.postinst @@ -18,7 +18,7 @@ esac . /usr/share/debconf/confmodule # enable required modules -a2enmod ssl perl +a2enmod ssl perl apreq # enable optional modules a2enmod dump_io || echo "Missing some optional Apache module(s), ignoring." diff --git a/etc/apache.site b/etc/apache.site index 990a6fe..0dcff64 100644 --- a/etc/apache.site +++ b/etc/apache.site @@ -30,6 +30,13 @@ PerlSwitches -I/usr/share/ngcp-www-csc/lib PerlResponseHandler csc + + SetEnv no-gzip 1 + SetHandler perl-script + PerlResponseHandler Sipwise::JitsiProvisioning + Allow from all + + # requires module dumpio # LogLevel debug # DumpIOInput Off diff --git a/etc/csc.conf b/etc/csc.conf index 283cc36..c785f03 100644 --- a/etc/csc.conf +++ b/etc/csc.conf @@ -66,4 +66,11 @@ device="[% www_csc.main_menu.device %]" account="[% www_csc.main_menu.account %]" /> + + + diff --git a/lib/JitsiProvisioning.pm b/lib/JitsiProvisioning.pm new file mode 100644 index 0000000..c2495bc --- /dev/null +++ b/lib/JitsiProvisioning.pm @@ -0,0 +1,86 @@ +package Sipwise::JitsiProvisioning; + +use strict; +use warnings; + +use Apache2::Request; +use Apache2::RequestRec; +use Apache2::RequestIO; +use Apache2::Const; +use XML::Simple; + +my $config = '/etc/ngcp-www-csc/csc.conf'; + +my $cfg = XML::Simple->new()->XMLin($config) + or die "Failed to read config file '$config'"; + +sub handler { + my $r = shift; + my $req = Apache2::Request->new($r); + $r->content_type('text/plain'); + + my $uri = $req->param("user") || ''; + my ($user, $domain) = split /\@/, $uri; + my $pass = $req->param("pass"); + my $uuid = $req->param("uuid"); + + unless(defined $user && defined $domain && defined $pass && defined $uuid) { + $r->custom_response(Apache2::Const::NOT_FOUND, "invalid credentials"); + return Apache2::Const::NOT_FOUND; + } + + my $acc = 'accngcp'.$uuid.$user.$domain; + $acc =~ s/[^a-zA-Z0-9]//g; + my $server_ip = $domain; + my $server_port = 5061; + my $server_proto = 'TLS'; + my $xcap_proto = $config->{uaprovisioning}->{xcap}->{proto}; + my $xcap_ip = $config->{uaprovisioning}->{xcap}->{host}; + my $xcap_port = $config->{uaprovisioning}->{xcap}->{port}; + + my $config = <<"EOF"; +net.java.sip.communicator.impl.protocol.sip.$acc=$acc +net.java.sip.communicator.impl.protocol.sip.$acc.ACCOUNT_UID=SIP\:$user\@$domain +net.java.sip.communicator.impl.protocol.sip.$acc.PROTOCOL_NAME=SIP +net.java.sip.communicator.impl.protocol.sip.$acc.IS_ACCOUNT_DISABLED=false + +net.java.sip.communicator.impl.protocol.sip.$acc.USER_ID=$user\@$domain +net.java.sip.communicator.impl.protocol.sip.$acc.PASSWORD=$pass +net.java.sip.communicator.impl.protocol.sip.$acc.DISPLAY_NAME= + +net.java.sip.communicator.impl.protocol.sip.$acc.PROXY_AUTO_CONFIG=false +net.java.sip.communicator.impl.protocol.sip.$acc.PROXY_PORT=$server_port +net.java.sip.communicator.impl.protocol.sip.$acc.PROXY_ADDRESS=$server_ip +net.java.sip.communicator.impl.protocol.sip.$acc.SERVER_ADDRESS=$server_ip +net.java.sip.communicator.impl.protocol.sip.$acc.PREFERRED_TRANSPORT=$server_proto + +net.java.sip.communicator.impl.protocol.sip.$acc.VOICEMAIL_CHECK_URI=sip\:voicebox\@$domain +net.java.sip.communicator.impl.protocol.sip.$acc.VOICEMAIL_URI= + +net.java.sip.communicator.impl.protocol.sip.$acc.FORCE_P2P_MODE=false +net.java.sip.communicator.impl.protocol.sip.$acc.IS_PRESENCE_ENABLED=true +net.java.sip.communicator.impl.protocol.sip.$acc.XCAP_ENABLE=true +net.java.sip.communicator.impl.protocol.sip.$acc.XCAP_SERVER_URI=$xcap_proto\://$xcap_ip\:$xcap_port/xcap +net.java.sip.communicator.impl.protocol.sip.$acc.XCAP_USE_SIP_CREDETIALS=true +net.java.sip.communicator.impl.protocol.sip.$acc.SUBSCRIPTION_EXPIRATION=3600 + +net.java.sip.communicator.impl.protocol.sip.$acc.KEEP_ALIVE_INTERVAL=25 +net.java.sip.communicator.impl.protocol.sip.$acc.KEEP_ALIVE_METHOD=OPTIONS + +net.java.sip.communicator.impl.protocol.sip.$acc.DTMF_METHOD=AUTO_DTMF +net.java.sip.communicator.impl.protocol.sip.$acc.DEFAULT_ENCRYPTION=true +net.java.sip.communicator.impl.protocol.sip.$acc.DEFAULT_SIPZRTP_ATTRIBUTE=true +net.java.sip.communicator.impl.protocol.sip.$acc.POLLING_PERIOD=30 +net.java.sip.communicator.impl.protocol.sip.$acc.SAVP_OPTION=0 +net.java.sip.communicator.impl.protocol.sip.$acc.SDES_ENABLED=false +net.java.sip.communicator.impl.protocol.sip.$acc.ACCOUNT_ICON_PATH=resources/images/protocol/sip/sip32x32.png +net.java.sip.communicator.impl.protocol.sip.$acc.XIVO_ENABLE=false + +EOF + + $r->print($config); + return Apache2::Const::OK; +} + +1; +