описал интерфейсную часть аутентификации, пока оставил без реализации

This commit is contained in:
2024-11-04 11:44:35 +03:00
parent d9967b69e8
commit 82b433c447
11 changed files with 107 additions and 28 deletions

5
src/auth/jwt.cpp Normal file
View File

@@ -0,0 +1,5 @@
//
// Created by vlad on 04.11.2024.
//
#include "jwt.h"

23
src/auth/jwt.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef JWT_H
#define JWT_H
#include <string>
#include "resources.h"
namespace http::auth::jwt {
class Jwt {
public:
static Jwt fromCookies(const std::string& cookie);
static Jwt fromString(const std::string& cookie);
static Jwt fromUser(const std::string& User);
bool isValid();
std::string getUsername();
std::string asCookie();
~Jwt();
};
}
#endif //JWT_H

View File

@@ -4,25 +4,74 @@
namespace http::auth {
/**
* Класс пользовательских разрешений,
*/
class UserPremision{};
* Класс пользователя, содержит логин/хеш_пароля/настройки пользователя/права.
* Хеш пароля представляется в виде строки
*/
class User {
private:
uint32_t perms;
/**
* Класс пользователя, содержит логин/хеш_пароля/настройки пользователя/права
*/
class User{};
public:
const std::string username;
std::string passwordHash;
/**
* Класс аутентификации. Управляет всеми сессиями, создает новые при логине, удаляет при логауте.
* @note Класс устанавливает заголовок 'Set-Cookie' в ответе, и этот заголовок должен дойти до пользователя!
*/
class AuthProvider {
User(const std::string& username, const std::string& passwordHash);
/**
* Проверить пароль на соответствие хешу
* @param pass
* @return
*/
bool checkPassword(const std::string& pass);
/**
* Установка пароля
* @param pass строка с исходным паролем
*/
void setPassword(const std::string& pass);
static constexpr uint32_t SUPERUSER = 0x0001;
static constexpr uint32_t WATCH_STATISTICS = 0x0002; // мониторинг модема
static constexpr uint32_t RESET_PACKET_STATISTICS = 0x0004; // сброс статистики пакетов
static constexpr uint32_t WATCH_SETTINGS = 0x0008; // просмотр настроек , если недоступно, то вкладки с настройками не будет
static constexpr uint32_t EDIT_SETTINGS = 0x0010; // редактирование настроек, установка параметров модулятора/демодулятора/dma/cinc
static constexpr uint32_t UPDATE_FIRMWARE = 0x0020; // обновление прошивки
/**
* Проверить, что у пользователя есть нужное право. Если это суперпользователь, то у него по умолчанию все права есть.
* @param p набор прав, из констант данного класса.
* @return
*/
bool checkPremisions(uint32_t p);
void setPremisions(uint32_t p);
void resetPremisions(uint32_t p);
~User();
};
class NeedAuentificationResource: public resource::BasicResource {};
/**
* Класс аутентификации. Управляет всеми сессиями, создает новые при логине, удаляет при логауте.
* @note Класс устанавливает заголовок 'Set-Cookie' в ответе, и этот заголовок должен дойти до пользователя!
*/
class AuthProvider {
public:
AuthProvider();
/**
* Авторизовать пользователя.
*
* @param rep
* @return true, в случае успешной авторизации
*/
bool doAuth(const std::string& username, const std::string& password, server::Reply& rep);
~AuthProvider();
};
class NeedAuentificationResource : public resource::BasicResource {
};
}
#endif //RESOURCES_H