/?p=api'
$ curl -d '{"cmd":"getApiKey","user":"admin","pw":"admin"}' '
/?p=api'
$ curl -d '{"key":"","cmd":"getRoom"}' '/?p=api'
$ curl -d '{"key":"","cmd":"sendmessage","uid":"23","text":"test message"}' '/?p=api'
Methods without key:
--------------------
getVersion
Description:
Returns API version.
Parameters:
nothing
Return Example:
{"status":"success","version": "1"}
getApiKey
Description:
Returns API Key version.
Parameters:
user (string)
pw (string)
Return Example:
{"status":"success","Key":"1234567890123456789012"}
Methods with Key:
-----------------
getRoom
Description:
Returns a list of all Rooms (no id set) or details of a single Room (requested id)
Parameters:
id (integer) - Room ID
Return Example:
[{"RID":"1"},{"RID":"23"},{"RID":"42"}]
{"RID":"1","Name":"Room Name","Man":null,"FromPentabarf":"","show":"Y","Number":"0"}
getAngelType
Description:
Returns a list of all Angel Types (no id set) or details of a single Angel Type (requested id)
Parameters:
id (integer) - Type ID
Return Example:
[{"id":"8"},{"id":"9"}]
{"id":"9","name":"Angeltypes 2","restricted":"0"}
getUser
Description:
Returns a list of all Users (no id set) or details of a single User (requested id)
Parameters:
id (integer) - User ID
Return Example:
[{"UID":"1"},{"UID":"23"},{"UID":"42"}]
{"UID":"1","Nick":"admin","Name":"Gates","Vorname":"Bill","Telefon":"","DECT":"","Handy":"","email":"","ICQ":"","jabber":"","Avatar":"115"}
getShift
Description:
Returns a list of all Shifte (no id set, filter is optional) or details of a single Shift (requested id)
Parameters:
id (integer) - Shift ID
filterRoom (Array of integer) - Array of Room IDs (optional, for list request)
filterTask (Array of integer) - Array if Task (optional, for list request)
filterOccupancy (integer) - Occupancy state: (optional, for list request)
1 occupied
2 free
3 occupied and free
Return Example:
[{"SID":"1"},{"SID":"2"},{"SID":"3"}]
{"SID":"10","start":"1388264400","end":"1388271600","RID":"1","name":"Shift 1","URL":null,"PSID":null,\
"ShiftEntry":[{"TID":"8","UID":"4","freeloaded":"0"}],
"NeedAngels":[{"TID":"8","count":"1","restricted":"0","taken":1},{"TID":"9","count":"2","restricted":"0","taken":0}]}
getMessage
Description:
Returns a list of all Messages (no id set) or details of a single Message (requested id)
Parameters:
id (integer) - Message ID
Return Example:
[{"id":"1"},{"id":"2"},{"id":"3"}]
{"id":"3","Datum":"1388247583","SUID":"23","RUID":"42","isRead":"N","Text":"message text"}
sendMessage
Description:
send a Message to an other angel
Parameters:
uid (integer) - User ID of the reciever
text (string) - Message Text
Return Example:
{"status":"success"}
************************************************************************************************/
/**
* General API Controller
*/
function api_controller() {
global $user, $DataJson;
header("Content-Type: application/json; charset=utf-8");
// decode JSON request
$input = file_get_contents("php://input");
$input = json_decode($input, true);
$_REQUEST = $input;
// get command
$cmd = '';
if (isset($_REQUEST['cmd']))
$cmd = strtolower($_REQUEST['cmd']);
// decode commands, without key
switch ($cmd) {
case 'getversion':
getVersion();
die(json_encode($DataJson));
break;
case 'getapikey':
getApiKey();
die(json_encode($DataJson));
break;
}
// get API KEY
if (isset($_REQUEST['key']) && preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key']))
$key = $_REQUEST['key'];
else
die(json_encode(array(
'status' => 'failed',
'error' => 'Missing parameter "key".'
)));
// check API key
$user = User_by_api_key($key);
if ($user === false)
die(json_encode(array(
'status' => 'failed',
'error' => 'Unable to find user'
)));
if ($user == null)
die(json_encode(array(
'status' => 'failed',
'error' => 'Key invalid.'
)));
// decode command
switch ($cmd) {
case 'getroom':
getRoom();
break;
case 'getangeltype':
getAngelType();
break;
case 'getuser':
// TODO Dataleak! Only coordinators are allowed to see so much user informations.
//getUser();
break;
case 'getshift':
getShift();
break;
case 'getmessage':
// TODO Dataleak!
//getMessage();
break;
case 'sendmessage':
sendMessage();
break;
default:
$DataJson = array(
'status' => 'failed',
'error' => 'Unknown Command "' . $cmd . '"'
);
}
// check
if ($DataJson === false) {
$DataJson = array(
'status' => 'failed',
'error' => 'DataJson === false'
);
} elseif ($DataJson == null) {
$DataJson = array(
'status' => 'failed',
'error' => 'DataJson == null'
);
}
echo json_encode($DataJson);
die();
}
/**
* Get Version of API
*/
function getVersion() {
global $DataJson;
$DataJson = array(
'status' => 'success',
'Version' => 1
);
}
/**
* Get API Key
*/
function getApiKey() {
global $DataJson;
if (! isset($_REQUEST['user'])) {
$DataJson = array(
'status' => 'failed',
'error' => 'Missing parameter "user".'
);
} elseif (! isset($_REQUEST['pw'])) {
$DataJson = array(
'status' => 'failed',
'error' => 'Missing parameter "pw".'
);
} else {
$Erg = sql_select("SELECT `UID`, `Passwort`, `api_key` FROM `User` WHERE `Nick`='" . sql_escape($_REQUEST['user']) . "'");
if (count($Erg) == 1) {
$Erg = $Erg[0];
if (verify_password($_REQUEST['pw'], $Erg["Passwort"], $Erg["UID"])) {
$key = $Erg["api_key"];
$DataJson = array(
'status' => 'success',
'Key' => $key
);
} else {
$DataJson = array(
'status' => 'failed',
'error' => 'PW wrong'
);
}
} else {
$DataJson = array(
'status' => 'failed',
'error' => 'User not found.'
);
}
}
sleep(1);
}
/**
* Get Room
*/
function getRoom() {
global $DataJson;
if (isset($_REQUEST['id'])) {
$DataJson = Room($_REQUEST['id']);
} else {
$DataJson = Room_ids();
}
}
/**
* Get AngelType
*/
function getAngelType() {
global $DataJson;
if (isset($_REQUEST['id'])) {
$DataJson = AngelType($_REQUEST['id']);
} else {
$DataJson = AngelType_ids();
}
}
/**
* Get User
*/
function getUser() {
global $DataJson;
if (isset($_REQUEST['id'])) {
$DataJson = mUser_Limit($_REQUEST['id']);
} else {
$DataJson = User_ids();
}
}
/**
* Get Shift
*/
function getShift() {
global $DataJson;
if (isset($_REQUEST['id'])) {
$DataJson = Shift($_REQUEST['id']);
} else {
$DataJson = Shifts_filtered();
}
}
/**
* @TODO: Why are ALL messages of ALL users returned? Data leak. It is not checked if this is my message!
* Get Message
*/
function getMessage() {
global $DataJson;
if (isset($_REQUEST['id'])) {
$DataJson = Message($_REQUEST['id']);
} else {
$DataJson = Message_ids();
}
}
/**
* Send Message
*/
function sendMessage() {
global $DataJson;
if (! isset($_REQUEST['uid'])) {
$DataJson = array(
'status' => 'failed',
'error' => 'Missing parameter "uid".'
);
} elseif (! isset($_REQUEST['text'])) {
$DataJson = array(
'status' => 'failed',
'error' => 'Missing parameter "text".'
);
} else {
if (Message_send($_REQUEST['uid'], $_REQUEST['text']) === true) {
$DataJson = array(
'status' => 'success'
);
} else {
$DataJson = array(
'status' => 'failed',
'error' => 'Transmitting was terminated with an Error.'
);
}
}
}
?>