X-Git-Url: https://git.defcon.no/?a=blobdiff_plain;f=api%2Fnumbers.php;fp=api%2Fnumbers.php;h=e9fc796e3881881625425699fadbf1205e609477;hb=220a8d4c07bfb4cb6be8122fda7dc6ceb0d1da8f;hp=0000000000000000000000000000000000000000;hpb=e9dd114b2570a41c4f517bdee270fbc2c791de92;p=hermes diff --git a/api/numbers.php b/api/numbers.php new file mode 100644 index 0000000..e9fc796 --- /dev/null +++ b/api/numbers.php @@ -0,0 +1,141 @@ + 'failed', 'cause' => 'error', 'detail' => 'Database connection failed.')); + exit; +} + +//************************************************************************************* + switch ( $_SERVER['PATH_INFO'] ) + { + case "/list": + // List all (distinct) phone MAC-adresses registered... + $limit = 0; + $random = false; + $search = null; + if ( array_key_exists('limit', $_GET ) && is_numeric( $_GET['limit'])) + $limit = $_GET['limit']; + + if ( array_key_exists('search', $_GET ) ) + $search = $_GET['search']; + else if ( array_key_exists('random', $_GET ) && (strtolower( $_GET['random'] ) === 'true')) + $random = true; + + $numbers = null; + + if ( $random ) + { + $numbers = get_random_numbers( $limit ); + } + else + { + $numbers = get_numbers ( $search, $limit ); + } + if ( $numbers ) + { + print json_encode( array( 'response' => 'ok', 'list' => $numbers )); + break; + } + + print json_encode( array( 'response' => 'failed', 'cause' => 'empty', 'detail' => 'Empty result.' )); + break; + case "/add_range": + if ( array_key_exists('start', $_GET) && array_key_exists('end', $_GET) ) + { + $start = $_GET['start']; + $end = sql_clean( $_GET['end'] ); + $result = add_range( $start, $end ); + if ( $result === 'ok' ) + { + print json_encode ( array( 'response' => 'ok') ); + } + else + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'rejected', 'detail' => $result ) ); + } + } + break; + case "/add": + // TODO: This should return better responses! + // Currently, it will fail with "invalid" + if ( array_key_exists('number', $_GET)) + { + $number = $_GET['number']; + + if (! verify_e164( $number ) ) + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'rejected', 'detail' => "Not a valid e164 number" )); + break; + } + if ( number_inpool( $number ) ) + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'exists', 'detail' => "Number is already in the pool" )); + break; + } + + $result = add_number( $number ); + if ( $result ) + { + print json_encode ( array( 'response' => 'ok', 'detail' => 'Added ' . $number, 'number' => $number ) ); + break; + } + else + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'rejected' )); + } + } + print json_encode ( array( 'response' => 'invalid') ); + break; + case "/remove": + if ( array_key_exists('number', $_GET)) + { + $number = $_GET['number']; + + if (! verify_e164( $number ) ) + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'rejected', 'detail' => "Not a valid e164 number" )); + break; + } + if ( !number_inpool( $number ) ) + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'nonexistant', 'detail' => "Number not in pool" )); + break; + } + if ( !remove_number ( $number ) ) + { + print json_encode ( array( 'response' => 'failed', 'cause' => 'dbfail', 'detail' => "Failed to remove number" )); + break; + } + print json_encode ( array( 'response' => 'ok', 'detail' => 'Removed ' . $number, 'number' => $number ) ); + break; + } + print json_encode ( array( 'response' => 'invalid') ); + break; + case "/inpool": + if ( array_key_exists('number', $_GET)) + { + $number = $_GET['number']; + if ( number_inpool( $number ) ) + print json_encode ( array( 'response' => 'ok', 'number' => $number ) ); + else + print json_encode ( array( 'response' => 'failed', 'cause' => 'nonexistant') ); + break; + } + default: + print json_encode ( array( 'response' => 'invalid') ); + } +mysql_close( $config['sql_link'] ); +?>