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;
+