mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
synced 2025-10-29 18:02:29 +00:00
Adding avatars and preferences for subs.
This commit is contained in:
@@ -88,13 +88,17 @@ add_executable( owsec
|
||||
src/RESTAPI/RESTAPI_system_endpoints_handler.cpp src/RESTAPI/RESTAPI_system_endpoints_handler.h
|
||||
src/RESTAPI/RESTAPI_asset_server.cpp src/RESTAPI/RESTAPI_asset_server.h
|
||||
src/RESTAPI/RESTAPI_avatar_handler.cpp src/RESTAPI/RESTAPI_avatar_handler.h
|
||||
src/RESTAPI/RESTAPI_subavatar_handler.cpp src/RESTAPI/RESTAPI_subavatar_handler.h
|
||||
src/RESTAPI/RESTAPI_email_handler.cpp src/RESTAPI/RESTAPI_email_handler.h
|
||||
src/RESTAPI/RESTAPI_sms_handler.cpp src/RESTAPI/RESTAPI_sms_handler.h
|
||||
src/RESTAPI/RESTAPI_suboauth2_handler.h src/RESTAPI/RESTAPI_suboauth2_handler.cpp
|
||||
src/RESTAPI/RESTAPI_subuser_handler.h src/RESTAPI/RESTAPI_subuser_handler.cpp
|
||||
src/RESTAPI/RESTAPI_subusers_handler.h src/RESTAPI/RESTAPI_subusers_handler.cpp
|
||||
src/RESTAPI/RESTAPI_validate_sub_token_handler.cpp src/RESTAPI/RESTAPI_validate_sub_token_handler.h
|
||||
src/RESTAPI/RESTAPI_Routers.cpp
|
||||
src/RESTAPI/RESTAPI_submfa_handler.cpp src/RESTAPI/RESTAPI_submfa_handler.h
|
||||
src/RESTAPI/RESTAPI_preferences.cpp src/RESTAPI/RESTAPI_preferences.h
|
||||
src/RESTAPI/RESTAPI_subpreferences.cpp src/RESTAPI/RESTAPI_subpreferences.h
|
||||
src/RESTAPI/RESTAPI_routers.cpp
|
||||
src/Daemon.h src/Daemon.cpp
|
||||
src/SpecialUserHelpers.h
|
||||
src/AuthService.h src/AuthService.cpp
|
||||
@@ -106,11 +110,15 @@ add_executable( owsec
|
||||
src/SMS_provider.cpp src/SMS_provider.h
|
||||
src/SMS_provider_twilio.cpp src/SMS_provider_twilio.h
|
||||
src/ActionLinkManager.cpp src/ActionLinkManager.h
|
||||
src/ACLProcessor.h src/RESTAPI/RESTAPI_preferences.cpp src/RESTAPI/RESTAPI_preferences.h
|
||||
src/ACLProcessor.h
|
||||
src/framework/OpenWifiTypes.h
|
||||
src/RESTAPI/RESTAPI_submfa_handler.cpp src/RESTAPI/RESTAPI_submfa_handler.h
|
||||
src/storage/orm_users.cpp src/storage/orm_users.h
|
||||
src/storage/orm_tokens.cpp src/storage/orm_tokens.h src/storage/orm_preferences.cpp src/storage/orm_preferences.h src/storage/orm_actionLinks.cpp src/storage/orm_actionLinks.h src/storage/orm_avatar.cpp src/storage/orm_avatar.h src/SpecialUserHelpers.h src/RESTAPI/RESTAPI_db_helpers.h)
|
||||
src/storage/orm_tokens.cpp src/storage/orm_tokens.h
|
||||
src/storage/orm_preferences.cpp src/storage/orm_preferences.h
|
||||
src/storage/orm_actionLinks.cpp src/storage/orm_actionLinks.h
|
||||
src/storage/orm_avatar.cpp src/storage/orm_avatar.h
|
||||
src/SpecialUserHelpers.h
|
||||
src/RESTAPI/RESTAPI_db_helpers.h)
|
||||
|
||||
if(NOT SMALL_BUILD)
|
||||
target_link_libraries(owsec PUBLIC
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
void RESTAPI_preferences::DoPut() {
|
||||
|
||||
SecurityObjects::Preferences P;
|
||||
|
||||
auto RawObject = ParseStream();
|
||||
|
||||
@@ -11,10 +11,12 @@
|
||||
#include "RESTAPI/RESTAPI_system_endpoints_handler.h"
|
||||
#include "RESTAPI/RESTAPI_asset_server.h"
|
||||
#include "RESTAPI/RESTAPI_avatar_handler.h"
|
||||
#include "RESTAPI/RESTAPI_subavatar_handler.h"
|
||||
#include "RESTAPI/RESTAPI_email_handler.h"
|
||||
#include "RESTAPI/RESTAPI_sms_handler.h"
|
||||
#include "RESTAPI/RESTAPI_validate_token_handler.h"
|
||||
#include "RESTAPI/RESTAPI_preferences.h"
|
||||
#include "RESTAPI/RESTAPI_subpreferences.h"
|
||||
#include "RESTAPI/RESTAPI_suboauth2_handler.h"
|
||||
#include "RESTAPI/RESTAPI_subuser_handler.h"
|
||||
#include "RESTAPI/RESTAPI_subusers_handler.h"
|
||||
@@ -34,9 +36,11 @@ namespace OpenWifi {
|
||||
RESTAPI_system_endpoints_handler,
|
||||
RESTAPI_action_links,
|
||||
RESTAPI_avatar_handler,
|
||||
RESTAPI_subavatar_handler,
|
||||
RESTAPI_email_handler,
|
||||
RESTAPI_sms_handler,
|
||||
RESTAPI_preferences,
|
||||
RESTAPI_subpreferences,
|
||||
RESTAPI_suboauth2_handler,
|
||||
RESTAPI_subuser_handler,
|
||||
RESTAPI_subusers_handler,
|
||||
@@ -49,15 +53,16 @@ namespace OpenWifi {
|
||||
return RESTAPI_Router_I<
|
||||
RESTAPI_users_handler,
|
||||
RESTAPI_user_handler,
|
||||
RESTAPI_subuser_handler,
|
||||
RESTAPI_subusers_handler,
|
||||
RESTAPI_system_command,
|
||||
RESTAPI_action_links,
|
||||
RESTAPI_validate_token_handler,
|
||||
RESTAPI_validate_sub_token_handler,
|
||||
RESTAPI_sms_handler,
|
||||
RESTAPI_preferences,
|
||||
RESTAPI_subpreferences,
|
||||
RESTAPI_suboauth2_handler,
|
||||
RESTAPI_subuser_handler,
|
||||
RESTAPI_suboauth2_handler,
|
||||
RESTAPI_subusers_handler,
|
||||
RESTAPI_submfa_handler
|
||||
>(Path, Bindings, L, S, TransactionId);
|
||||
}
|
||||
79
src/RESTAPI/RESTAPI_subavatar_handler.cpp
Normal file
79
src/RESTAPI/RESTAPI_subavatar_handler.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-07-15.
|
||||
//
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
#include "RESTAPI_subavatar_handler.h"
|
||||
#include "StorageService.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "framework/RESTAPI_protocol.h"
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
void SubAvatarPartHandler::handlePart(const Poco::Net::MessageHeader &Header, std::istream &Stream) {
|
||||
FileType_ = Header.get(RESTAPI::Protocol::CONTENTTYPE, RESTAPI::Protocol::UNSPECIFIED);
|
||||
if (Header.has(RESTAPI::Protocol::CONTENTDISPOSITION)) {
|
||||
std::string Disposition;
|
||||
Poco::Net::NameValueCollection Parameters;
|
||||
Poco::Net::MessageHeader::splitParameters(Header[RESTAPI::Protocol::CONTENTDISPOSITION], Disposition, Parameters);
|
||||
Name_ = Parameters.get(RESTAPI::Protocol::NAME, RESTAPI::Protocol::UNNAMED);
|
||||
}
|
||||
Poco::CountingInputStream InputStream(Stream);
|
||||
Poco::StreamCopier::copyStream(InputStream, OutputStream_);
|
||||
Length_ = OutputStream_.str().size();
|
||||
};
|
||||
|
||||
void RESTAPI_subavatar_handler::DoPost() {
|
||||
std::string Id = UserInfo_.userinfo.Id;
|
||||
SecurityObjects::UserInfo UInfo;
|
||||
|
||||
std::stringstream SS;
|
||||
SubAvatarPartHandler partHandler(Id, Logger_, SS);
|
||||
Poco::Net::HTMLForm form(*Request, Request->stream(), partHandler);
|
||||
Poco::JSON::Object Answer;
|
||||
|
||||
if (!partHandler.Name().empty() && partHandler.Length()< MicroService::instance().ConfigGetInt("openwifi.avatar.maxsize",2000000)) {
|
||||
Answer.set(RESTAPI::Protocol::AVATARID, Id);
|
||||
Answer.set(RESTAPI::Protocol::ERRORCODE, 0);
|
||||
Logger_.information(Poco::format("Uploaded avatar: %s Type: %s", partHandler.Name(), partHandler.ContentType()));
|
||||
StorageService()->SubAvatarDB().SetAvatar(UserInfo_.userinfo.email,
|
||||
Id, SS.str(), partHandler.ContentType(), partHandler.Name());
|
||||
StorageService()->SubDB().SetAvatar(Id,"1");
|
||||
} else {
|
||||
Answer.set(RESTAPI::Protocol::AVATARID, Id);
|
||||
Answer.set(RESTAPI::Protocol::ERRORCODE, 13);
|
||||
Answer.set(RESTAPI::Protocol::ERRORTEXT, "Avatar upload could not complete.");
|
||||
}
|
||||
ReturnObject(Answer);
|
||||
}
|
||||
|
||||
void RESTAPI_subavatar_handler::DoGet() {
|
||||
std::string Id = GetBinding(RESTAPI::Protocol::ID, "");
|
||||
if (Id.empty()) {
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
std::string Type, Name, AvatarContent;
|
||||
if (!StorageService()->SubAvatarDB().GetAvatar(UserInfo_.userinfo.email, Id, AvatarContent, Type, Name)) {
|
||||
return NotFound();
|
||||
}
|
||||
return SendFileContent(AvatarContent, Type, Name);
|
||||
}
|
||||
|
||||
void RESTAPI_subavatar_handler::DoDelete() {
|
||||
std::string Id = GetBinding(RESTAPI::Protocol::ID, "");
|
||||
|
||||
if(UserInfo_.userinfo.userRole!=SecurityObjects::ROOT && Id!=UserInfo_.userinfo.Id) {
|
||||
return UnAuthorized(RESTAPI::Errors::InsufficientAccessRights, ACCESS_DENIED);
|
||||
}
|
||||
|
||||
if (!StorageService()->SubAvatarDB().DeleteAvatar(UserInfo_.userinfo.email, Id)) {
|
||||
return NotFound();
|
||||
}
|
||||
StorageService()->SubDB().SetAvatar(Id,"");
|
||||
OK();
|
||||
}
|
||||
}
|
||||
51
src/RESTAPI/RESTAPI_subavatar_handler.h
Normal file
51
src/RESTAPI/RESTAPI_subavatar_handler.h
Normal file
@@ -0,0 +1,51 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-07-15.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class SubAvatarPartHandler : public Poco::Net::PartHandler {
|
||||
public:
|
||||
SubAvatarPartHandler(std::string Id, Poco::Logger &Logger, std::stringstream & ofs) :
|
||||
Id_(std::move(Id)),
|
||||
Logger_(Logger),
|
||||
OutputStream_(ofs){
|
||||
}
|
||||
void handlePart(const Poco::Net::MessageHeader &Header, std::istream &Stream);
|
||||
[[nodiscard]] uint64_t Length() const { return Length_; }
|
||||
[[nodiscard]] std::string &Name() { return Name_; }
|
||||
[[nodiscard]] std::string &ContentType() { return FileType_; }
|
||||
|
||||
private:
|
||||
uint64_t Length_ = 0;
|
||||
std::string FileType_;
|
||||
std::string Name_;
|
||||
std::string Id_;
|
||||
Poco::Logger &Logger_;
|
||||
std::stringstream &OutputStream_;
|
||||
};
|
||||
|
||||
class RESTAPI_subavatar_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_subavatar_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer &Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
Poco::Net::HTTPRequest::HTTP_POST,
|
||||
Poco::Net::HTTPRequest::HTTP_DELETE,
|
||||
Poco::Net::HTTPRequest::HTTP_OPTIONS},
|
||||
Server,
|
||||
TransactionId,
|
||||
Internal) {}
|
||||
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/subavatar/{id}"}; };
|
||||
|
||||
void DoGet() final;
|
||||
void DoPost() final;
|
||||
void DoDelete() final;
|
||||
void DoPut() final {};
|
||||
|
||||
};
|
||||
}
|
||||
36
src/RESTAPI/RESTAPI_subpreferences.cpp
Normal file
36
src/RESTAPI/RESTAPI_subpreferences.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-11-16.
|
||||
//
|
||||
|
||||
#include "RESTAPI_subpreferences.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
void RESTAPI_subpreferences::DoGet() {
|
||||
SecurityObjects::Preferences P;
|
||||
Poco::JSON::Object Answer;
|
||||
StorageService()->SubPreferencesDB().GetPreferences(UserInfo_.userinfo.Id, P);
|
||||
P.to_json(Answer);
|
||||
ReturnObject(Answer);
|
||||
}
|
||||
|
||||
void RESTAPI_subpreferences::DoPut() {
|
||||
|
||||
SecurityObjects::Preferences P;
|
||||
|
||||
auto RawObject = ParseStream();
|
||||
if(!P.from_json(RawObject)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
||||
}
|
||||
|
||||
P.id = UserInfo_.userinfo.Id;
|
||||
P.modified = std::time(nullptr);
|
||||
StorageService()->SubPreferencesDB().SetPreferences(P);
|
||||
|
||||
Poco::JSON::Object Answer;
|
||||
P.to_json(Answer);
|
||||
ReturnObject(Answer);
|
||||
}
|
||||
|
||||
}
|
||||
27
src/RESTAPI/RESTAPI_subpreferences.h
Normal file
27
src/RESTAPI/RESTAPI_subpreferences.h
Normal file
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-11-16.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_subpreferences : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_subpreferences(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer &Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
Poco::Net::HTTPRequest::HTTP_PUT,
|
||||
Poco::Net::HTTPRequest::HTTP_OPTIONS},
|
||||
Server,
|
||||
TransactionId,
|
||||
Internal) {}
|
||||
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/subpreferences"}; };
|
||||
void DoGet() final;
|
||||
void DoPut() final;
|
||||
void DoPost() final {};
|
||||
void DoDelete() final {};
|
||||
};
|
||||
}
|
||||
@@ -60,8 +60,8 @@ namespace OpenWifi {
|
||||
|
||||
AuthService()->DeleteSubUserFromCache(Id);
|
||||
StorageService()->SubTokenDB().RevokeAllTokens(TargetUser.email);
|
||||
StorageService()->PreferencesDB().DeleteRecord("id",Id);
|
||||
|
||||
StorageService()->SubPreferencesDB().DeleteRecord("id", Id);
|
||||
StorageService()->SubAvatarDB().DeleteRecord("id", Id);
|
||||
Logger_.information(Poco::format("User '%s' deleted by '%s'.",Id,UserInfo_.userinfo.email));
|
||||
OK();
|
||||
}
|
||||
|
||||
@@ -27,16 +27,20 @@ namespace OpenWifi {
|
||||
SubTokenDB_ = std::make_unique<OpenWifi::BaseTokenDB>("SubTokens", "stk", dbType_,*Pool_, Logger(), SubTokenCache_.get(), false);
|
||||
|
||||
PreferencesDB_ = std::make_unique<OpenWifi::PreferencesDB>("Preferences", "pre", dbType_,*Pool_, Logger());
|
||||
SubPreferencesDB_ = std::make_unique<OpenWifi::PreferencesDB>("SubPreferences", "prs", dbType_,*Pool_, Logger());
|
||||
ActionLinksDB_ = std::make_unique<OpenWifi::ActionLinkDB>("Actions", "act", dbType_,*Pool_, Logger());
|
||||
AvatarDB_ = std::make_unique<OpenWifi::AvatarDB>("Avatars", "ava", dbType_,*Pool_, Logger());
|
||||
SubAvatarDB_ = std::make_unique<OpenWifi::AvatarDB>("SubAvatars", "avs", dbType_,*Pool_, Logger());
|
||||
|
||||
UserDB_->Create();
|
||||
SubDB_->Create();
|
||||
UserTokenDB_->Create();
|
||||
SubTokenDB_->Create();
|
||||
PreferencesDB_->Create();
|
||||
ActionLinksDB_->Create();
|
||||
PreferencesDB_->Create();
|
||||
SubPreferencesDB_->Create();
|
||||
AvatarDB_->Create();
|
||||
SubAvatarDB_->Create();
|
||||
|
||||
OpenWifi::SpecialUserHelpers::InitializeDefaultUser();
|
||||
|
||||
|
||||
@@ -45,8 +45,10 @@ namespace OpenWifi {
|
||||
OpenWifi::BaseTokenDB & UserTokenDB() { return *UserTokenDB_; }
|
||||
OpenWifi::BaseTokenDB & SubTokenDB() { return *SubTokenDB_; }
|
||||
OpenWifi::PreferencesDB & PreferencesDB() { return *PreferencesDB_; }
|
||||
OpenWifi::PreferencesDB & SubPreferencesDB() { return *SubPreferencesDB_; }
|
||||
OpenWifi::ActionLinkDB & ActionLinksDB() { return *ActionLinksDB_; }
|
||||
OpenWifi::AvatarDB & AvatarDB() { return *AvatarDB_; }
|
||||
OpenWifi::AvatarDB & SubAvatarDB() { return *SubAvatarDB_; }
|
||||
|
||||
private:
|
||||
|
||||
@@ -55,8 +57,10 @@ namespace OpenWifi {
|
||||
std::unique_ptr<OpenWifi::BaseTokenDB> UserTokenDB_;
|
||||
std::unique_ptr<OpenWifi::BaseTokenDB> SubTokenDB_;
|
||||
std::unique_ptr<OpenWifi::PreferencesDB> PreferencesDB_;
|
||||
std::unique_ptr<OpenWifi::PreferencesDB> SubPreferencesDB_;
|
||||
std::unique_ptr<OpenWifi::ActionLinkDB> ActionLinksDB_;
|
||||
std::unique_ptr<OpenWifi::AvatarDB> AvatarDB_;
|
||||
std::unique_ptr<OpenWifi::AvatarDB> SubAvatarDB_;
|
||||
|
||||
std::unique_ptr<OpenWifi::UserCache> UserCache_;
|
||||
std::unique_ptr<OpenWifi::UserCache> SubCache_;
|
||||
|
||||
Reference in New Issue
Block a user