diff --git a/inside/User.php b/inside/User.php index a6d0702..c815e45 100644 --- a/inside/User.php +++ b/inside/User.php @@ -34,6 +34,8 @@ class User { var $conn; + var $fromSnappOrder; + function User($id = NULL, $data = NULL) { $this->__construct($id, $data); } diff --git a/inside/functions.php b/inside/functions.php index a0a30cb..39fc4a8 100644 --- a/inside/functions.php +++ b/inside/functions.php @@ -314,7 +314,11 @@ function handle_error($errno, $errstr, $errfile, $errline, $errcontext) { } function error($msg) { - Errors :: addError($msg); + if(class_exists('Errors')) { + Errors :: addError($msg); + } else { + var_dump($msg); + } } function notify($msg) { diff --git a/snapporder/api/query.php b/snapporder/api/query.php index 4f196a6..b29a257 100644 --- a/snapporder/api/query.php +++ b/snapporder/api/query.php @@ -36,7 +36,7 @@ if(!isset($_GET['phone'])) { die(); } $phone = $_GET['phone']; -if(!is_numeric($phone) || strlen($phone) !== 8 ) { +if( !valid_phonenumber($phone) ) { set_response_code(400); echo json_encode(array('error' => 'Not a phone number', 'query' => $_GET)); die(); @@ -68,42 +68,13 @@ if( $res->numRows() == 0) { die(); } $res->fetchInto($row); -$user_id = $row['user_id']; -/* Get user object with group ids and membership status */ -$cols = array('id', 'firstname', 'lastname', 'email', 'expires', 'cardno'); -$sql = "SELECT ".implode($cols, ",").",GROUP_CONCAT(group_id) AS group_ids,expires > NOW() OR expires IS NULL AS is_member FROM din_user AS u, din_usergrouprelationship AS ug WHERE u.id=$user_id AND u.id=ug.user_id GROUP BY user_id"; -$res = $conn->query($sql); -if( DB::isError($res) ) { - echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) ); - die(); -} -$res->fetchInto($user); +/* Get and format user */ +$user = get_user($row['user_id']); -/* Membership status according to spec. - * Status codes: - * 0 - Registered - * 1 - Member - * 2 - Active member - */ -$groups = explode(",", $user['group_ids']); -$user['membership_status'] = 0; - -if($user['is_member'] !== "0") { - // Group id mappings 1:dns-alle, 2: dns-aktiv, 3:administrator, 4+:orgunits/special groups - if(in_array("2", $groups)) { - $user['membership_status'] = 2; - } else { - $user['membership_status'] = 1; - } -} /* Add back phone number from query */ $user['phone'] = $phone; -/* Clean up user object */ -unset($user['is_member']); -unset($user['group_ids']); - /* Return encrypted user object */ echo json_encode($user); //echo $crypt->encrypt(json_encode($user)); diff --git a/snapporder/api/register.php b/snapporder/api/register.php index 0093dcd..93860a2 100644 --- a/snapporder/api/register.php +++ b/snapporder/api/register.php @@ -1,6 +1,20 @@ decrypt($crypt->encrypt("lol"))); +/* Validate request */ +$body = file_get_contents('php://input'); +if(strlen($body) === 0) { + set_response_code(400); + echo json_encode(array('error' => 'Invalid request')); + die(); +} + +/* Decrypt body */ +// TODO enable +//$crypt = new CryptoHelper(SNAP_IV, SNAP_KEY); +//$body = $crypt->decrypt($body); +$data = (array) json_decode($body); +if($data === NULL) { + set_response_code(400); + echo json_encode(array('error' => 'Can\'t decode body')); + die(); +} + +/* Validate supplied data */ +$required_keys = array('firstname', 'lastname', 'phone', 'email'); + +foreach($required_keys as $key) { + if(!array_key_exists($key, $data)) { + set_response_code(400); + echo json_encode(array('error' => 'missing required field \''.$key.'\'')); + die(); + } +} +// TODO validate phonenumber +// TODO validate email +// TODO look at getUseridFromPhone in inside/functions.php +// TODO when $fromSnappOrder is sent to User-constructor... +// ...then work around requirements for username, password, birthdate, address + +/* Create user */ +//$new_user = new User(NULL, $data); + +/* Get and format user */ +//$user = get_user($new_user->id); + +/* Add back phone number from query */ +//$user['phone'] = $phone; + +/* Return encrypted user object */ +//echo json_encode($user); +//echo $crypt->encrypt(json_encode($user)); + ?> diff --git a/snapporder/lib/functions.php b/snapporder/lib/functions.php index 8435cf4..4a53434 100644 --- a/snapporder/lib/functions.php +++ b/snapporder/lib/functions.php @@ -1,4 +1,5 @@ NOW() OR expires IS NULL AS is_member FROM din_user AS u, din_usergrouprelationship AS ug WHERE u.id=$user_id AND u.id=ug.user_id GROUP BY user_id"; + $res = $conn->query($sql); + if( DB::isError($res) ) { + echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) ); + die(); + } + $res->fetchInto($user); + + /* Membership status according to spec. + * Status codes: + * 0 - Registered + * 1 - Member + * 2 - Active member + */ + $groups = explode(",", $user['group_ids']); + $user['membership_status'] = 0; + + if($user['is_member'] !== "0") { + // Group id mappings 1:dns-alle, 2: dns-aktiv, 3:administrator, 4+:orgunits/special groups + if(in_array("2", $groups)) { + $user['membership_status'] = 2; + } else { + $user['membership_status'] = 1; + } + } + /* Clean up user object */ + unset($user['is_member']); + unset($user['group_ids']); + + return $user; +} +function valid_phonenumber($phone) { + return is_numeric($phone) && strlen($phone) === 8; +} + ?> diff --git a/snapporder/tests/integration.sh b/snapporder/tests/integration.sh new file mode 100755 index 0000000..7eefc52 --- /dev/null +++ b/snapporder/tests/integration.sh @@ -0,0 +1,5 @@ +#!/bin/sh +HOST="http://inside.dev" +curl -XPOST -H"Content-type: application/json" --data-binary @testuser.json $HOST/snapporder/api/register.php + + diff --git a/snapporder/tests/testuser.json b/snapporder/tests/testuser.json new file mode 100644 index 0000000..0b2080e --- /dev/null +++ b/snapporder/tests/testuser.json @@ -0,0 +1,6 @@ +{ + "firstname": "Test", + "lastname": "Testesen", + "email": "asdf@asdf.com", + "phone": "48105886" +}