diff --git a/public/api/User.php b/public/api/User.php index fbcded5..0e935e0 100644 --- a/public/api/User.php +++ b/public/api/User.php @@ -24,7 +24,10 @@ class User { } } else if (password_verify($password, $user['password'])) { $this->db->execute('UPDATE users SET last_login=' . time() . ' WHERE id=' . $user['id']); - return $this->generateUserToken($user['id'], $user['current_dictionary']); + return array( + 'token' => $this->generateUserToken($user['id'], $user['current_dictionary']), + 'user' => $this->getUserData($user['id']), + ); } } return false; @@ -60,13 +63,57 @@ VALUES (?, ?, ?, ?, ?, '. time() .')'; $new_dictionary = $this->dictionary->create($new_user_id); if ($new_dictionary !== false) { - return $this->generateUserToken($new_user_id, $new_dictionary); + return array( + 'token' => $this->generateUserToken($new_user_id, $new_dictionary), + 'user' => $this->getUserData($new_user_id), + ); } } return false; } + public function setUserData ($token, $user_data) { + $token_data = $this->token->decode($token); + if ($token_data !== false) { + $query = 'UPDATE users SET email=?, public_name=?, username=?, allow_email=?, use_ipa=? WHERE id=?'; + $properties = array( + $user_data['email'], + $user_data['publicName'], + $user_data['username'], + $user_data['allowEmail'], + $user_data['useIPAPronunciation'], + $user_id, + ); + $update_success = $this->db->execute($query, $properties); + if ($update_success) { + return array( + 'token' => $token, + 'userData' => $user_data, + ); + } + } + + return false; + } + + public function getUserData ($user_id) { + $query = 'SELECT * FROM users WHERE id=?'; + $stmt = $this->db->query($query, array($user_id)); + $user = $stmt->fetch(); + if ($stmt && $user) { + return array( + 'email' => $user['email'], + 'username' => $user['username'], + 'publicName' => $user['public_name'], + 'allowEmails' => $user['allow_email'] == 1 ? true : false, + 'useIPAPronunciation' => $user['use_ipa'] == 1 ? true : false, + ); + } + + return false; + } + public function createNewDictionary ($token) { $user_data = $this->token->decode($token); if ($user_data !== false) { diff --git a/public/api/index.php b/public/api/index.php index 79b6e04..e684dca 100644 --- a/public/api/index.php +++ b/public/api/index.php @@ -12,10 +12,10 @@ switch ($action) { case 'login': { if (isset($request['email']) && isset($request['password'])) { $user = new User(); - $token = $user->logIn($request['email'], $request['password']); - if ($token !== false) { + $user_data = $user->logIn($request['email'], $request['password']); + if ($user_data !== false) { return Response::json(array( - 'data' => $token, + 'data' => $user_data, 'error' => false, ), 200); } @@ -33,10 +33,10 @@ switch ($action) { if (isset($request['email']) && isset($request['password'])) { $user = new User(); if (!$user->emailExists($request['email'])) { - $token = $user->create($request['email'], $request['password'], $request['userData']); - if ($token !== false) { + $user_data = $user->create($request['email'], $request['password'], $request['userData']); + if ($user_data !== false) { return Response::json(array( - 'data' => $token, + 'data' => $user_data, 'error' => false, ), 201); } @@ -103,6 +103,26 @@ switch ($action) { 'error' => true, ), 403); } + case 'set-user-data': { + if ($token !== false && isset($request['userData'])) { + $user = new User(); + $updated_user = $user->setUserData($token, $request['userData']); + if ($updated_user !== false) { + return Response::json(array( + 'data' => $updated_user, + 'error' => false, + ), 200); + } + return Response::json(array( + 'data' => 'Could not set user data: missing data', + 'error' => true, + ), 400); + } + return Response::json(array( + 'data' => 'Could not get dictionaries: no token provided', + 'error' => true, + ), 403); + } case 'create-new-dictionary': { if ($token !== false) { $user = new User();