<?php
+/*
+# Copyright (c) 2012, Gjøvik University College
+# All rights reserved.
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the Gjøvik University College nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY Gjøvik University College ''AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL Gjøvik University College BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
require_once('config.php');
require_once('lib/auth_base.php');
require_once('lib/user_functions.php');
// user: authentication username, SIP-username without domain component
// domain: Domain/realm of the user. username + '@' + domain == SIP address.
- if ( array_key_exists('user', $_GET) ||
- ( array_key_exists('username', $_GET) && array_key_exists('domain', $_GET )))
+ if ( array_key_exists('user', $_POST) ||
+ ( array_key_exists('username', $_POST) && array_key_exists('domain', $_POST )))
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
// Now, do funky stuff.
/*
- Test if user exists in both 'kamailio.subscribers' and 'provision.users'
+ Test if user exists in both 'kamailio.subscribers' and 'hermes.users'
* Return 'response' => 'ok', 'type' => 'local', 'user' => complete user object.
- Test if user exists in 'provision.user' only
+ Test if user exists in 'hermes.user' only
* Return 'response' => 'ok', 'type' => 'remote', 'user' => complete user object.
If user does is neither local nor remote
* Return 'response' => 'failed' with 'cause' => 'nonexistant'
else
print json_encode ( array( 'response' => 'invalid') );
break;
+
+ case "/location":
+ if ( array_key_exists('user', $_POST) ||
+ ( array_key_exists('username', $_POST) && array_key_exists('domain', $_POST )))
+ {
+ $username = "";
+ $domain = "";
+ if ( array_key_exists('username', $_POST) )
+ {
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
+ }
+ else
+ {
+ $user = split_sipaddress($_POST['user']);
+ if ( !$user )
+ {
+ print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
+ break;
+ }
+ list ( $username, $domain ) = $user;
+ }
+ $location = get_locations( $username, $domain );
+ if ( $location == null )
+ {
+ print json_encode( array( 'response' => 'failed', 'cause' => 'offline' ));
+ break;
+ }
+ print json_encode( array( 'response' => 'ok', 'locations' => $location ));
+ }
+ else
+ print json_encode ( array( 'response' => 'invalid') );
+ break;
+
case "/list":
/*
Simply list all users in user@domain format
* SQL SELECT CONCAT() WHERE CONCAT() must be used *shrug*
*/
$search = null;
- if ( array_key_exists ( 'search', $_GET ) )
- $search = $_GET['search']; // TODO: Add some sanitation and input validation!
+ if ( array_key_exists ( 'search', $_POST ) )
+ $search = $_POST['search']; // TODO: Add some sanitation and input validation!
$list = list_users( $search );
print json_encode( array( 'response' => 'ok', 'list' => $list ));
break;
email
Verify that domain is local (lookup in the 'kamailio.domain' table.
- Verify that the username is available (nonexistant for domain in kamilio.subscribers (and provision.users?))
+ Verify that the username is available (nonexistant for domain in kamilio.subscribers (and hermes.users?))
* Autocreate password
* Add username, domain, email and created password to the 'kamailio.subscriber' table
- * Get the registrar+port, proxy+port from the 'provision.servers' table.
+ * Get the registrar+port, proxy+port from the 'hermes.servers' table.
* standard dialplan from configuration.
- * Add to the 'provision.users' table:
+ * Add to the 'hermes.users' table:
username -> username
password -> generated password
displayname -> displayname
domain -> domain
- registrar -> provision.servers.registrar
- r_port -> provision.servers.r_port
- proxy -> provision.servers.proxy
- p_port -> provision.servers.p_port
+ registrar -> hermes.servers.registrar
+ r_port -> hermes.servers.r_port
+ proxy -> hermes.servers.proxy
+ p_port -> hermes.servers.p_port
authid -> username
dialplan -> standard dialplan
linetext -> username
*/
// Test required parameters:
if (
- ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) ) || array_key_exists('user', $_GET) )
- && array_key_exists( 'displayname', $_GET )
- && array_key_exists( 'email', $_GET ) )
+ ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) ) || array_key_exists('user', $_POST) )
+ && array_key_exists( 'displayname', $_POST )
+ && array_key_exists( 'email', $_POST ) )
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
}
$password = generate_password();
- $displayname = $_GET['displayname'];
- $email = $_GET['email'];
+ $displayname = $_POST['displayname'];
+ $email = $_POST['email'];
if ( !is_kamailio_domain( $domain ) )
{
delete_provision_user( $username, $domain );
// Give errormessage, and quit.
print json_encode( array( 'response' => 'failed', 'cause' => 'dbfail', 'detail' => 'Failed to read recently added data. Operations rolled back' ) );
-
+ break;
}
print json_encode( array( 'response' => 'ok', 'user' => $userdata ));
+ break;
}
else
print json_encode( array( 'response' => 'invalid', 'cause' => 'parameters' ) );
linetext
Verify that the domain is not a local kamailio domain (REMOTE user..)
- Verify that the username+domain is not already registered in 'provision.users'.
+ Verify that the username+domain is not already registered in 'hermes.users'.
* If r_port is empty, set to 5060
* If proxy/port is empty, set to registrar/port
* If authid is empty, set to username
* If dialplan is empty, set to standard dialplan
* If linetext is empty, set to username@domain
- * Add to the 'provision.users' table:
+ * Add to the 'hermes.users' table:
username -> username
password -> supplied password
displayname -> displayname
// Test required parameters:
if (
- ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) ) || array_key_exists('user', $_GET) )
- && array_key_exists( 'displayname', $_GET )
- && array_key_exists( 'password', $_GET )
- && array_key_exists( 'registrar', $_GET ) )
+ ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) ) || array_key_exists('user', $_POST) )
+ && array_key_exists( 'displayname', $_POST )
+ && array_key_exists( 'password', $_POST )
+ && array_key_exists( 'registrar', $_POST ) )
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
list ( $username, $domain ) = $user;
}
- $password = $_GET['password'];
- $displayname = $_GET['displayname'];
- $registrar = $_GET['registrar'];
- $r_port = ( array_key_exists('r_port', $_GET) ) ? $_GET['r_port'] : 5060;
+ $password = $_POST['password'];
+ $displayname = $_POST['displayname'];
+ $registrar = $_POST['registrar'];
+ $r_port = ( array_key_exists('r_port', $_POST) ) ? $_POST['r_port'] : 5060;
- $proxy = ( array_key_exists('proxy', $_GET) ) ? $_GET['proxy'] : $registrar;
- $p_port = ( array_key_exists('p_port', $_GET) ) ? $_GET['p_port'] : $r_port;
- $authid = ( array_key_exists('authid', $_GET) ) ? $_GET['authid'] : $username;
- $dialplan = ( array_key_exists('dialplan', $_GET) ) ? $_GET['dialplan'] : $config['standard_dialplan'];
- $linetext = ( array_key_exists('linetext', $_GET) ) ? $_GET['linetext'] : $username . '@' . $domain;
+ $proxy = ( array_key_exists('proxy', $_POST) ) ? $_POST['proxy'] : $registrar;
+ $p_port = ( array_key_exists('p_port', $_POST) ) ? $_POST['p_port'] : $r_port;
+ $authid = ( array_key_exists('authid', $_POST) ) ? $_POST['authid'] : $username;
+ $dialplan = ( array_key_exists('dialplan', $_POST) ) ? $_POST['dialplan'] : $config['standard_dialplan'];
+ $linetext = ( array_key_exists('linetext', $_POST) ) ? $_POST['linetext'] : $username . '@' . $domain;
if ( is_kamailio_domain( $domain ) )
{
delete_provision_user( $username, $domain );
// Give errormessage, and quit.
print json_encode( array( 'response' => 'failed', 'cause' => 'dbfail', 'detail' => 'Failed to read recently added data. Operations rolled back' ) );
-
+ break;
}
print json_encode( array( 'response' => 'ok', 'user' => $userdata ));
+ break;
}
else
print json_encode( array( 'response' => 'invalid', 'cause' => 'parameters' ) );
Required parameters should be...
( username & domain ) | user
- * Verify that no associations/relations exist in 'provision.phones'
- * Verify that the user exists in 'provision.users'
- * Remove from 'provision.users'
+ * Verify that no associations/relations exist in 'hermes.phones'
+ * Verify that the user exists in 'hermes.users'
+ * Remove from 'hermes.users'
* Test to see of user exists in 'kamailio.subscriber'.
* Remove from 'kamailio.subscribers'
* Return response' => 'ok', 'type' => 'local'
* If no such user exists, return 'response' => 'failed' with 'cause' => 'nonexistant'
* On other failures, return 'response' => 'failed' with 'cause' => 'error' (may set 'detail' => 'message')
*/
- if ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) )
- || array_key_exists('user', $_GET) )
+ if ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) )
+ || array_key_exists('user', $_POST) )
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
( username & domain ) | user
password
- * Verify that no associations/relations exist in 'provision.phones'
+ * Verify that no associations/relations exist in 'hermes.phones'
* Verify that the user exists ...
- * Test to see of user exists in 'provision.users'
+ * Test to see of user exists in 'hermes.users'
* Test to see of user exists in 'kamailio.subscriber'.
* If no such user exists, return 'response' => 'failed' with 'cause' => 'nonexistant'
- * Update user passwords in 'provision' and 'kamailio' as appropriate
+ * Update user passwords in 'hermes' and 'kamailio' as appropriate
* On other failures, return 'response' => 'failed' with 'cause' => 'error' (may set 'detail' => 'message')
*/
- if ( array_key_exists('password', $_GET) &&
- ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) )
- || array_key_exists('user', $_GET) ))
+ if ( array_key_exists('password', $_POST) &&
+ ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) )
+ || array_key_exists('user', $_POST) ))
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
}
list ( $username, $domain ) = $user;
}
- $password = $_GET['password'];
+ $password = $_POST['password'];
// Check compatibility of password? TODO...
// Fetch old password for rollback? TODO...
( username & domain ) | user
email
*/
- if ( array_key_exists('email', $_GET) &&
- ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) )
- || array_key_exists('user', $_GET) ))
+ if ( array_key_exists('email', $_POST) &&
+ ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) )
+ || array_key_exists('user', $_POST) ))
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
}
list ( $username, $domain ) = $user;
}
- $email = $_GET['email'];
+ $email = $_POST['email'];
// Check for user in kamailio
if ( is_kamailio_subscriber( $username, $domain ) )
Required parameters should be...
( username & domain ) | user
- * Verify that no associations/relations exist in 'provision.phones'
+ * Verify that no associations/relations exist in 'hermes.phones'
* Verify that the user exists ...
- * Test to see of user exists in 'provision.users'
+ * Test to see of user exists in 'hermes.users'
* Test to see of user exists in 'kamailio.subscriber'.
* If no such user exists, return 'response' => 'failed' with 'cause' => 'nonexistant'
* Get update parameters, and change as appropriate ;)
* On other failures, return 'response' => 'failed' with 'cause' => 'error' (may set 'detail' => 'message')
*/
- if ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) )
- || array_key_exists('user', $_GET) )
+ if ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) )
+ || array_key_exists('user', $_POST) )
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );
$params = array('displayname', 'dialplan', 'linetext', 'registrar', 'r_port', 'proxy', 'p_port');
foreach ( $params as $p )
{
- if ( array_key_exists($p, $_GET ) )
+ if ( array_key_exists($p, $_POST ) )
{
- $data = $_GET[$p];
+ $data = $_POST[$p];
$t = update_provision_data($p, $username, $domain, $data);
if ( $t != true )
{
print json_encode( array( 'response' => 'invalid', 'cause' => 'parameters' ) );
break;
case "/available":
- if ( ( array_key_exists( 'username', $_GET) && array_key_exists( 'domain', $_GET ) )
- || array_key_exists('user', $_GET) )
+ if ( ( array_key_exists( 'username', $_POST) && array_key_exists( 'domain', $_POST ) )
+ || array_key_exists('user', $_POST) )
{
$username = "";
$domain = "";
- if ( array_key_exists('username', $_GET) )
+ if ( array_key_exists('username', $_POST) )
{
- $username = $_GET['username'];
- $domain = $_GET['domain'];
+ $username = $_POST['username'];
+ $domain = $_POST['domain'];
}
else
{
- $user = split_sipaddress($_GET['user']);
+ $user = split_sipaddress($_POST['user']);
if ( !$user )
{
print json_encode ( array( 'response' => 'failed', 'cause' => 'invalid', 'detail' => 'Invalid SIP address') );