Register allmost works
This commit is contained in:
1 parent
56d6fc176d
commit
b80b058249
6 files changed
+97
-30
No files matched your search
@@ -9,9 +9,10 @@
|
||||
* Response:
|
||||
*
|
||||
* {
|
||||
* "phone":" 42345678",
|
||||
* "phone": "+4742345678",
|
||||
* "membership_status": 1, // 0 - ikke medlem, 1 - medlem, 2 - aktiv
|
||||
* "expires": "2015-04-23",
|
||||
* "memberid": "4331",
|
||||
* "cardno": "12345",
|
||||
* "firstName": "Jon",
|
||||
* "lastName": "Hansen",
|
||||
@@ -40,7 +41,6 @@ if(!isset($_GET['phone'])) {
|
||||
}
|
||||
$phone = $_GET['phone'];
|
||||
$phone = clean_phonenumber($phone);
|
||||
// todo you are here
|
||||
if( !valid_phonenumber($phone) ) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'Not a phone number', 'query' => $_GET));
|
||||
@@ -56,26 +56,17 @@ if(DB :: isError($conn)) {
|
||||
echo json_encode(array('error' => 'Could not connect to DB'));
|
||||
die();
|
||||
}
|
||||
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
|
||||
|
||||
/* Search in phone number table for phone number */
|
||||
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
|
||||
$phone = $conn->escapeSimple($phone);
|
||||
$sql = "SELECT user_id FROM din_userphonenumber WHERE number='$phone'";
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) {
|
||||
set_response_code(500);
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
// empty?
|
||||
if( $res->numRows() == 0) {
|
||||
$user_id = getUseridFromPhone($phone);
|
||||
if( $user_id === false ) {
|
||||
echo json_encode( array('result' => 'No matching users'));
|
||||
die();
|
||||
}
|
||||
$res->fetchInto($row);
|
||||
|
||||
/* Get and format user */
|
||||
$user = get_user($row['user_id']);
|
||||
$user = get_user($user_id);
|
||||
|
||||
/* Add back phone number from query */
|
||||
$user['phone'] = $phone;
|
||||
|
||||
@@ -62,17 +62,24 @@ if($data === NULL) {
|
||||
}
|
||||
|
||||
/* Validate supplied data */
|
||||
$required_keys = array('firstname', 'lastname', 'phone', 'email');
|
||||
$valid_keys = array('firstname', 'lastname', 'phone', 'email');
|
||||
|
||||
foreach($required_keys as $key) {
|
||||
foreach($valid_keys as $key) {
|
||||
if(!array_key_exists($key, $data)) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'missing required field \''.$key.'\''));
|
||||
die();
|
||||
}
|
||||
}
|
||||
var_dump($data);
|
||||
foreach($data as $key => $value) {
|
||||
if(!in_array($key, $valid_keys)) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'unknown field \''.$key.'\''));
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
$data['phone'] = clean_phonenumber($data['phone']);
|
||||
if( !valid_phonenumber($data['phone']) ) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'Not a phone number:'.$data['phone']));
|
||||
@@ -83,6 +90,17 @@ if( !valid_email($data['email']) ) {
|
||||
echo json_encode(array('error' => 'Not an email: '.$data['email']));
|
||||
die();
|
||||
}
|
||||
|
||||
/* Connect to database */
|
||||
$options = array( 'debug' => 2, 'portability' => DB_PORTABILITY_ALL );
|
||||
$conn = DB::connect(getDSN(), $options);
|
||||
if(DB :: isError($conn)) {
|
||||
echo $conn->toString();
|
||||
set_response_code(500);
|
||||
echo json_encode(array('error' => 'Could not connect to DB'));
|
||||
die();
|
||||
}
|
||||
|
||||
/* Existing user? */
|
||||
if( getUseridFromEmail($data['email']) !== false) {
|
||||
set_response_code(409);
|
||||
@@ -94,6 +112,18 @@ if( getUseridFromPhone($data['phone']) !== false ) {
|
||||
echo json_encode(array('error' => 'Existing user with phone: '.$data['phone']));
|
||||
die();
|
||||
}
|
||||
/* validate firstname and lastname */
|
||||
if( strlen($data['firstname']) < 2) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'Too short firstname: '.$data['firstname']));
|
||||
die();
|
||||
}
|
||||
if( strlen($data['lastname']) < 2) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'Too short lastname: '.$data['lastname']));
|
||||
die();
|
||||
}
|
||||
|
||||
|
||||
/* Create user */
|
||||
$user_id = add_user($data);
|
||||
@@ -102,7 +132,7 @@ $user_id = add_user($data);
|
||||
$user = get_user($user_id);
|
||||
|
||||
/* Return encrypted user object */
|
||||
//echo json_encode($user);
|
||||
echo json_encode($user);
|
||||
//echo $crypt->encrypt(json_encode($user));
|
||||
|
||||
?>
|
||||
@@ -8,22 +8,45 @@ function set_response_code($code) {
|
||||
}
|
||||
header('X-Ignore-This: something', true, $code);
|
||||
}
|
||||
function generate_username($data) {
|
||||
// TODO improve this, not unique enough
|
||||
$firstname = preg_replace('/[^\w]/', '', $data['firstname']);
|
||||
$firstname = substr(strtolower($firstname), 0, 6);
|
||||
|
||||
$lastname = preg_replace('/[^\w]/', '', $data['lastname']);
|
||||
$lastname = substr(strtolower($lastname), 0, 3);
|
||||
return $firstname.$lastname.substr(uniqid(), -3);
|
||||
}
|
||||
function add_user($data) {
|
||||
global $conn;
|
||||
|
||||
/* TODO validate input */
|
||||
echo json_encode( array('error' => 'not implemented' ) );
|
||||
die();
|
||||
/* User table */
|
||||
$phone = $data['phone'];
|
||||
unset($data['phone']);
|
||||
$data['username'] = generate_username($data);
|
||||
$cols = array_keys($data);
|
||||
$values = array_values($data);
|
||||
$sth = $conn->autoPrepare("din_user", $cols, DB_AUTOQUERY_INSERT);
|
||||
|
||||
// TODO $cols from data
|
||||
$sql = 'INSERT INTO din_user ('.implode($cols, ",").') VALUES ()';
|
||||
|
||||
$res = $conn->query($sql);
|
||||
$res = $conn->execute($sth, $values);
|
||||
if( DB::isError($res) ) {
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
|
||||
$user_id = get_user_id_by_username($data['username']);
|
||||
|
||||
/* Phonenumber table */
|
||||
$sth = $conn->autoPrepare("din_userphonenumber", array('user_id', 'number'), DB_AUTOQUERY_INSERT);
|
||||
$res = $conn->execute($sth, array($user_id, $phone));
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
|
||||
return $user_id;
|
||||
}
|
||||
|
||||
/* Get user object with group ids and membership status */
|
||||
@@ -68,12 +91,24 @@ function get_user($user_id) {
|
||||
|
||||
return $user;
|
||||
}
|
||||
function get_user_id_by_username($username) {
|
||||
global $conn;
|
||||
|
||||
$sql = "SELECT id FROM din_user WHERE username='$username'";
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) {
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
$res->fetchInto($data);
|
||||
var_dump($data);
|
||||
return $data['id'];
|
||||
}
|
||||
function clean_phonenumber($pn) {
|
||||
var_dump($pn);
|
||||
$pn = preg_replace('/[^0-9\+]/', '', $pn); // remove everything except valid chars
|
||||
$pn = preg_replace('/^00/','+', $pn); // replace starting 00 with +
|
||||
// norwegian phone numbers
|
||||
if( strlen($pn === 8) && ($pn[0] === "4" || $pn[1] === "9") ) {
|
||||
if( strlen($pn) === 8 && ($pn[0] === "4" || $pn[0] === "9") ) {
|
||||
$pn = "+47".$pn;
|
||||
}
|
||||
return $pn;
|
||||
@@ -83,6 +118,6 @@ function valid_phonenumber($phone) {
|
||||
return preg_match('/^\+?\d{8,15}$/i', $phone);
|
||||
}
|
||||
function valid_email($email) {
|
||||
return preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email);
|
||||
return filter_var($email, FILTER_VALIDATE_EMAIL);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
function generate_username($data) {
|
||||
/* Clean non ascii chars */
|
||||
$firstname = preg_replace('/[^\w]/', '', $data['firstname']);
|
||||
$firstname = substr(strtolower($firstname), 0, 6);
|
||||
|
||||
$lastname = preg_replace('/[^\w]/', '', $data['lastname']);
|
||||
$lastname = substr(strtolower($lastname), 0, 3);
|
||||
return $firstname.$lastname.uniqid();
|
||||
}
|
||||
var_dump(generate_username(array('firstname' => "Nikolai R", "lastname" => "Kristiansen")));
|
||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"firstname": "Test",
|
||||
"lastname": "Testesen",
|
||||
"email": "asdfasdfz@asdf.com",
|
||||
"phone": "48105887"
|
||||
"email": "assdadfzaaa2ggzasdaaz@aaaa222asdaasdf.com",
|
||||
"phone": "48115899"
|
||||
}
|
||||
Reference in new issue
Block a user