]> git.defcon.no Git - hermes/blobdiff - api/user.php
backlog add
[hermes] / api / user.php
index c5926bcfe3992e14a940c3a4d874f5680c858640..e8099d9dfebcfbe479f840c277d043c5b8fe10b9 100644 (file)
@@ -1,4 +1,30 @@
 <?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');
@@ -52,9 +78,9 @@ token_auth();
 
                                // 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'
@@ -75,6 +101,40 @@ token_auth();
                        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 
@@ -101,20 +161,20 @@ token_auth();
                                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
@@ -209,9 +269,10 @@ token_auth();
                                        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' ) );
@@ -232,13 +293,13 @@ token_auth();
                                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
@@ -330,9 +391,10 @@ token_auth();
                                        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' ) );
@@ -342,9 +404,9 @@ token_auth();
                        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'
@@ -405,12 +467,12 @@ token_auth();
                                ( 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', $_POST) &&
@@ -530,9 +592,9 @@ token_auth();
                        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 ;)