Compare commits

...

15 Commits

Author SHA1 Message Date
3c1769326f Move postman link 2024-08-10 14:15:20 +08:00
d6fa758482 Add configuration info 2024-08-10 14:14:39 +08:00
27c240a714 Add install instruction 2024-08-10 14:08:56 +08:00
44c7988429 Add description to API endpionts 2024-08-10 01:54:28 +08:00
19b02d7089 Add API documentation 2024-08-10 01:51:29 +08:00
cbd55cec2d Remove password hash from return data 2024-08-09 22:32:02 +05:00
913db80c30 Fix auth in User class 2024-08-09 22:31:15 +05:00
129c0c1264 Add authUser API endpoint 2024-08-09 22:02:25 +05:00
77b9785dc0 Fix createUser endpoint 2024-08-09 22:02:13 +05:00
fd91f7985d Fix updateUserInfo endpoint 2024-08-09 21:57:39 +05:00
e38bef492e Add updateUserInfo API endpoint 2024-08-09 21:56:25 +05:00
44cb07fe0b Fix getUser endpoint 2024-08-09 21:53:15 +05:00
0bcd0f8483 Add deleteUser API endpoint 2024-08-09 21:51:30 +05:00
755784a870 Fix createUser endpoint 2024-08-09 21:51:17 +05:00
b844041ea9 Add getUser API endpoint 2024-08-09 21:45:57 +05:00
7 changed files with 221 additions and 5 deletions

View File

@ -1,3 +1,77 @@
# test-php-rest-api-user
Тестовое задание REST API на PHP
**Тестовое задание REST API на PHP**
## Установка / Запуск
### Первый способ (простой)
1. Открыть корневую директорию сайта (в которой файл `installed`)
2. Открыть консоль в данной директории
3. Выполнить комманду `php -S 0.0.0.0:8888`
4. Теперь сайт доступен по адресу [http://localhost:8888](http://localhost:8888)
### Второй способ (сложнее)
1. Установить `nginx` и `php-fpm`
2. Поместить содержимое сайта в нужную директорию
3. Настроить **nginx** так, как этот делается для **Wordpress**
4. Теперь сайт доступен по адресу который указан в nginx (обычно это [http://localhost:80](http://localhost:80))
## Конфигурация
Все необходимое для настройки и конфигурации сайта находится в директории `config`
### `0000.root.php`
Содержит базовую информацию о сайте (не важную для API)
### `0001.db.php`
Содержит настройки подключения к Базе Данных
### `0005.user.php`
Содержит конфигурацию для работы с пользователями
## Документация API
### [Postman](https://www.postman.com/material-observer-62618807/workspace/public-data/collection/37579698-ff75f993-cc82-4704-aea4-612718b8a06b?action=share&creator=37579698)
### POST `/api/v1/createUser`
Создание пользователя
Параметр | Описание
--- | ---
login | Обязательное поле (1-32 символа)
password | Обязательное поле (от 8 символов)
### POST `/api/v1/authUser`
Авторизация и получение токена
Параметр | Описание
--- | ---
login | Обязательное поле (1-32 символа)
password | Обязательное поле (от 8 символов)
### GET `/api/v1/getUser`
Получение информации о пользователе
Параметр | Описание
--- | ---
login | Обязательное поле (1-32 символа)
### PATCH `/api/v1/updateUserInfo`
Обновление поля info у пользователя
Параметр | Описание
--- | ---
token | Обязательное поле (токен, который выдали при авторизации)
newInfo | Обязательное поле (без ограничений)
### DELETE `/api/v1/deleteUser`
Удаление пользователя
Параметр | Описание
--- | ---
token | Обязательное поле (токен, который выдали при авторизации)

View File

@ -74,11 +74,11 @@
return false;
$until = time() + self::$tokenLifetime;
$hash = hash('sha256', $login.'|'.$password.'|'.$until.'|'.self::$secret);
$hash = hash('sha256', $login.'|'.$user->password.'|'.$until.'|'.self::$secret);
self::updateOnline($login);
return implode('|', rtrim(strtr(base64_encode($login.'|'.$password.'|'.$until.'|'.$hash), '+/', '-_'), '='));
return rtrim(strtr(base64_encode($login.'|'.$user->password.'|'.$until.'|'.$hash), '+/', '-_'), '=');
}
public static function get($login) {

View File

@ -0,0 +1,36 @@
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(!isset($_REQUEST['login'])) {
$data = [
'error' => true,
'message' => 'Не передано поле login',
];
}
elseif(!isset($_REQUEST['password'])) {
$data = [
'error' => true,
'message' => 'Не передано поле password',
];
}
elseif(!$token = User::auth($_REQUEST['login'], $_REQUEST['password'])) {
$data = [
'error' => true,
'message' => 'Не вверно введены логин и/или пароль',
];
}
else {
$data = [
'error' => false,
'message' => 'Вход успешно совершен',
'data' => [
'token' => $token,
],
];
}
}
else {
$data = [
'error' => true,
'message' => 'Только POST метод',
];
}

View File

@ -1,12 +1,24 @@
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(strlen($password) < 8) {
if(!isset($_REQUEST['login'])) {
$data = [
'error' => true,
'message' => 'Не передано поле login',
];
}
elseif(!isset($_REQUEST['password'])) {
$data = [
'error' => true,
'message' => 'Не передано поле password',
];
}
elseif(strlen($_REQUEST['password']) < 8) {
$data = [
'error' => true,
'message' => 'Пароль должен иметь 8 символов минимум',
];
}
elseif(!User::create($login, $password)) {
elseif(!User::create($_REQUEST['login'], $_REQUEST['password'])) {
$data = [
'error' => true,
'message' => 'Пользователь с таким логином уже сужествует',

View File

@ -0,0 +1,27 @@
<?php
if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
if(!isset($_REQUEST['token'])) {
$data = [
'error' => true,
'message' => 'Не передано поле token',
];
}
elseif(!User::delete($_REQUEST['token'])) {
$data = [
'error' => true,
'message' => 'Невалидный токен',
];
}
else {
$data = [
'error' => false,
'message' => 'Пользователь удален',
];
}
}
else {
$data = [
'error' => true,
'message' => 'Только DELETE метод',
];
}

View File

@ -0,0 +1,33 @@
<?php
if($_SERVER['REQUEST_METHOD'] == 'GET') {
if(!isset($_REQUEST['login'])) {
$data = [
'error' => true,
'message' => 'Не передано поле login',
];
}
elseif(!$user = User::get($_REQUEST['login'])) {
$data = [
'error' => true,
'message' => 'Пользователь не существует',
];
}
else {
$data = [
'error' => false,
'data' => [
'id' => $user->id,
'login' => $user->login,
'info' => $user->info,
'reg_dt' => $user->reg_dt,
'online_dt' => $user->online_dt,
],
];
}
}
else {
$data = [
'error' => true,
'message' => 'Только метод GET',
];
}

View File

@ -0,0 +1,34 @@
<?php
if($_SERVER['REQUEST_METHOD'] == 'PATCH') {
if(!isset($_REQUEST['token'])) {
$data = [
'error' => true,
'message' => 'Не передано поле token',
];
}
elseif(!isset($_REQUEST['newInfo'])) {
$data = [
'error' => true,
'message' => 'Не передано поле newInfo',
];
}
elseif(!User::updateInfo($_REQUEST['token'], $_REQUEST['newInfo'])) {
$data = [
'error' => true,
'message' => 'Невалидный токен',
];
}
else {
$data = [
'error' => false,
'message' => 'Информация обновлена',
];
}
}
else {
$data = [
'error' => true,
'message' => 'Только PATCH метод',
];
}