mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
synced 2025-10-30 02:12:32 +00:00
adding logout/login recording.
This commit is contained in:
@@ -118,7 +118,7 @@ add_executable( owsec
|
||||
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/RESTAPI/RESTAPI_db_helpers.h src/storage/orm_logins.cpp src/storage/orm_logins.h)
|
||||
|
||||
if(NOT SMALL_BUILD)
|
||||
target_link_libraries(owsec PUBLIC
|
||||
|
||||
@@ -186,6 +186,7 @@ namespace OpenWifi {
|
||||
try {
|
||||
auto tToken{Token};
|
||||
StorageService()->UserTokenDB().DeleteRecord("token",tToken);
|
||||
StorageService()->LoginDB().AddLogout(Token);
|
||||
} catch (const Poco::Exception &E) {
|
||||
Logger().log(E);
|
||||
}
|
||||
@@ -197,6 +198,7 @@ namespace OpenWifi {
|
||||
try {
|
||||
auto tToken{Token};
|
||||
StorageService()->SubTokenDB().DeleteRecord("token",tToken);
|
||||
StorageService()->SubLoginDB().AddLogout(Token);
|
||||
} catch (const Poco::Exception &E) {
|
||||
Logger().log(E);
|
||||
}
|
||||
@@ -249,6 +251,7 @@ namespace OpenWifi {
|
||||
StorageService()->UserTokenDB().AddToken(UInfo.userinfo.id, UInfo.webtoken.access_token_,
|
||||
UInfo.webtoken.refresh_token_, UInfo.webtoken.token_type_,
|
||||
UInfo.webtoken.expires_in_, UInfo.webtoken.idle_timeout_);
|
||||
StorageService()->LoginDB().AddLogin(UInfo.userinfo.id, UInfo.userinfo.email,UInfo.webtoken.access_token_ );
|
||||
}
|
||||
|
||||
void AuthService::CreateSubToken(const std::string & UserName, SecurityObjects::UserInfoAndPolicy &UInfo)
|
||||
@@ -272,6 +275,7 @@ namespace OpenWifi {
|
||||
StorageService()->SubTokenDB().AddToken(UInfo.userinfo.id, UInfo.webtoken.access_token_,
|
||||
UInfo.webtoken.refresh_token_, UInfo.webtoken.token_type_,
|
||||
UInfo.webtoken.expires_in_, UInfo.webtoken.idle_timeout_);
|
||||
StorageService()->SubLoginDB().AddLogin(UInfo.userinfo.id, UInfo.userinfo.email,UInfo.webtoken.access_token_ );
|
||||
}
|
||||
|
||||
bool AuthService::SetPassword(const std::string &NewPassword, SecurityObjects::UserInfo & UInfo) {
|
||||
|
||||
@@ -585,5 +585,12 @@ namespace OpenWifi::SecurityObjects {
|
||||
return false;
|
||||
}
|
||||
|
||||
void LoginRecordInfo::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj,"sessionId",sessionId);
|
||||
field_to_json(Obj,"userId",userId);
|
||||
field_to_json(Obj,"email",email);
|
||||
field_to_json(Obj,"login",login);
|
||||
field_to_json(Obj,"logout",logout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -292,5 +292,14 @@ namespace OpenWifi {
|
||||
Poco::Data::LOB<char> avatar;
|
||||
};
|
||||
|
||||
struct LoginRecordInfo {
|
||||
std::string sessionId;
|
||||
std::string userId;
|
||||
std::string email;
|
||||
uint64_t login=0;
|
||||
uint64_t logout=0;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ namespace OpenWifi {
|
||||
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());
|
||||
LoginDB_ = std::make_unique<OpenWifi::LoginDB>("Logins", "lin", dbType_,*Pool_, Logger());
|
||||
SubLoginDB_ = std::make_unique<OpenWifi::LoginDB>("SubLogins", "lis", dbType_,*Pool_, Logger());
|
||||
|
||||
UserDB_->Create();
|
||||
SubDB_->Create();
|
||||
@@ -41,6 +43,8 @@ namespace OpenWifi {
|
||||
SubPreferencesDB_->Create();
|
||||
AvatarDB_->Create();
|
||||
SubAvatarDB_->Create();
|
||||
LoginDB_->Create();
|
||||
SubLoginDB_->Create();
|
||||
|
||||
OpenWifi::SpecialUserHelpers::InitializeDefaultUser();
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "storage/orm_preferences.h"
|
||||
#include "storage/orm_actionLinks.h"
|
||||
#include "storage/orm_avatar.h"
|
||||
#include "storage/orm_logins.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -49,6 +50,8 @@ namespace OpenWifi {
|
||||
OpenWifi::ActionLinkDB & ActionLinksDB() { return *ActionLinksDB_; }
|
||||
OpenWifi::AvatarDB & AvatarDB() { return *AvatarDB_; }
|
||||
OpenWifi::AvatarDB & SubAvatarDB() { return *SubAvatarDB_; }
|
||||
OpenWifi::LoginDB & LoginDB() { return *LoginDB_; }
|
||||
OpenWifi::LoginDB & SubLoginDB() { return *SubLoginDB_; }
|
||||
|
||||
private:
|
||||
|
||||
@@ -61,6 +64,8 @@ namespace OpenWifi {
|
||||
std::unique_ptr<OpenWifi::ActionLinkDB> ActionLinksDB_;
|
||||
std::unique_ptr<OpenWifi::AvatarDB> AvatarDB_;
|
||||
std::unique_ptr<OpenWifi::AvatarDB> SubAvatarDB_;
|
||||
std::unique_ptr<OpenWifi::LoginDB> LoginDB_;
|
||||
std::unique_ptr<OpenWifi::LoginDB> SubLoginDB_;
|
||||
|
||||
std::unique_ptr<OpenWifi::UserCache> UserCache_;
|
||||
std::unique_ptr<OpenWifi::UserCache> SubCache_;
|
||||
|
||||
71
src/storage/orm_logins.cpp
Normal file
71
src/storage/orm_logins.cpp
Normal file
@@ -0,0 +1,71 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-01-05.
|
||||
//
|
||||
|
||||
#include "orm_logins.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
static ORM::FieldVec LoginDB_Fields{
|
||||
ORM::Field{"session", 64, true},
|
||||
ORM::Field{"userId", ORM::FieldType::FT_TEXT},
|
||||
ORM::Field{"email", ORM::FieldType::FT_TEXT},
|
||||
ORM::Field{"login", ORM::FieldType::FT_BIGINT},
|
||||
ORM::Field{"logout", ORM::FieldType::FT_BIGINT}
|
||||
};
|
||||
|
||||
static ORM::IndexVec MakeIndices(const std::string & shortname) {
|
||||
return ORM::IndexVec{
|
||||
{std::string(shortname + "_userid_index"),
|
||||
ORM::IndexEntryVec{
|
||||
{std::string("userId"),
|
||||
ORM::Indextype::ASC}}}
|
||||
};
|
||||
}
|
||||
|
||||
LoginDB::LoginDB( const std::string &TableName, const std::string &Shortname ,OpenWifi::DBType T,
|
||||
Poco::Data::SessionPool &P, Poco::Logger &L) :
|
||||
DB(T, TableName.c_str(), LoginDB_Fields, MakeIndices(Shortname), P, L, Shortname.c_str()) {
|
||||
}
|
||||
|
||||
static std::string MakeSessionId(const std::string & token) {
|
||||
return MicroService::instance().CreateHash(token);
|
||||
}
|
||||
|
||||
void LoginDB::AddLogin( const std::string & userId, const std::string & email, const std::string &token) {
|
||||
SecurityObjects::LoginRecordInfo R;
|
||||
|
||||
R.sessionId = MakeSessionId(token);
|
||||
R.userId = userId;
|
||||
R.email = email;
|
||||
R.login = std::time(nullptr);
|
||||
R.logout = 0;
|
||||
CreateRecord(R);
|
||||
}
|
||||
|
||||
void LoginDB::AddLogout(const std::string &token) {
|
||||
auto Session = MakeSessionId(token);
|
||||
SecurityObjects::LoginRecordInfo R;
|
||||
|
||||
if(GetRecord("session", Session, R)) {
|
||||
R.logout = std::time(nullptr);
|
||||
UpdateRecord("session", Session, R);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template<> void ORM::DB<OpenWifi::LoginInfoRecordTuple, OpenWifi::SecurityObjects::LoginRecordInfo>::Convert(OpenWifi::LoginInfoRecordTuple &R, OpenWifi::SecurityObjects::LoginRecordInfo &P ) {
|
||||
P.sessionId = R.get<0>();
|
||||
P.userId = R.get<1>();
|
||||
P.email = R.get<2>();
|
||||
P.login = R.get<3>();
|
||||
P.logout = R.get<4>();
|
||||
}
|
||||
|
||||
template<> void ORM::DB<OpenWifi::LoginInfoRecordTuple, OpenWifi::SecurityObjects::LoginRecordInfo>::Convert(OpenWifi::SecurityObjects::LoginRecordInfo &P, OpenWifi::LoginInfoRecordTuple &R ) {
|
||||
R.set<0>(P.sessionId);
|
||||
R.set<1>(P.userId);
|
||||
R.set<2>(P.email);
|
||||
R.set<3>(P.login);
|
||||
R.set<4>(P.logout);
|
||||
}
|
||||
30
src/storage/orm_logins.h
Normal file
30
src/storage/orm_logins.h
Normal file
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-01-05.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/orm.h"
|
||||
#include "RESTObjects/RESTAPI_SecurityObjects.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
typedef Poco::Tuple<
|
||||
std::string, // SessionId
|
||||
std::string, // UserID
|
||||
std::string, // UserEMail
|
||||
uint64_t, // login = 0;
|
||||
uint64_t // logout = 0;
|
||||
> LoginInfoRecordTuple;
|
||||
typedef std::vector <LoginInfoRecordTuple> LoginInfoRecordTupleList;
|
||||
|
||||
class LoginDB : public ORM::DB<LoginInfoRecordTuple, SecurityObjects::LoginRecordInfo> {
|
||||
public:
|
||||
LoginDB( const std::string &name, const std::string &shortname, OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
||||
|
||||
void AddLogin(const std::string & id, const std::string & email, const std::string &token);
|
||||
void AddLogout(const std::string &token);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user