mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
synced 2025-11-01 11:17:51 +00:00
Signed-off-by: stephb9959 <stephane.bourque@gmail.com>
This commit is contained in:
@@ -88,7 +88,7 @@ namespace OpenWifi {
|
|||||||
uint64_t RevocationDate=0;
|
uint64_t RevocationDate=0;
|
||||||
std::string UserId;
|
std::string UserId;
|
||||||
if(StorageService()->UserTokenDB().GetToken(CallToken, UI.webtoken, UserId, RevocationDate) && UI.webtoken.refresh_token_==RefreshToken) {
|
if(StorageService()->UserTokenDB().GetToken(CallToken, UI.webtoken, UserId, RevocationDate) && UI.webtoken.refresh_token_==RefreshToken) {
|
||||||
auto now = OpenWifi::Now();
|
auto now = Utils::Now();
|
||||||
|
|
||||||
// Create a new token
|
// Create a new token
|
||||||
auto NewToken = GenerateTokenHMAC( UI.webtoken.access_token_, CUSTOM);
|
auto NewToken = GenerateTokenHMAC( UI.webtoken.access_token_, CUSTOM);
|
||||||
@@ -126,7 +126,7 @@ namespace OpenWifi {
|
|||||||
uint64_t RevocationDate=0;
|
uint64_t RevocationDate=0;
|
||||||
std::string UserId;
|
std::string UserId;
|
||||||
if(StorageService()->SubTokenDB().GetToken(CallToken, UI.webtoken, UserId, RevocationDate) && UI.webtoken.refresh_token_==RefreshToken) {
|
if(StorageService()->SubTokenDB().GetToken(CallToken, UI.webtoken, UserId, RevocationDate) && UI.webtoken.refresh_token_==RefreshToken) {
|
||||||
auto now = OpenWifi::Now();
|
auto now = Utils::Now();
|
||||||
|
|
||||||
// Create a new token
|
// Create a new token
|
||||||
auto NewToken = GenerateTokenHMAC( UI.webtoken.access_token_, CUSTOM);
|
auto NewToken = GenerateTokenHMAC( UI.webtoken.access_token_, CUSTOM);
|
||||||
@@ -162,7 +162,7 @@ namespace OpenWifi {
|
|||||||
poco_debug(Logger(), fmt::format("TokenValidation failed for TID={} Token={}", TID, Utils::SanitizeToken(CallToken)));
|
poco_debug(Logger(), fmt::format("TokenValidation failed for TID={} Token={}", TID, Utils::SanitizeToken(CallToken)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto now=OpenWifi::Now();
|
auto now=Utils::Now();
|
||||||
Expired = (WT.created_ + WT.expires_in_) < now;
|
Expired = (WT.created_ + WT.expires_in_) < now;
|
||||||
if(StorageService()->UserDB().GetUserById(UserId,UInfo.userinfo)) {
|
if(StorageService()->UserDB().GetUserById(UserId,UInfo.userinfo)) {
|
||||||
UInfo.webtoken = WT;
|
UInfo.webtoken = WT;
|
||||||
@@ -227,7 +227,7 @@ namespace OpenWifi {
|
|||||||
poco_debug(Logger(), fmt::format("TokenValidation failed for TID={} Token={}", TID, Utils::SanitizeToken(CallToken)));
|
poco_debug(Logger(), fmt::format("TokenValidation failed for TID={} Token={}", TID, Utils::SanitizeToken(CallToken)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto now=OpenWifi::Now();
|
auto now=Utils::Now();
|
||||||
Expired = (WT.created_ + WT.expires_in_) < now;
|
Expired = (WT.created_ + WT.expires_in_) < now;
|
||||||
if(StorageService()->SubDB().GetUserById(UserId,UInfo.userinfo)) {
|
if(StorageService()->SubDB().GetUserById(UserId,UInfo.userinfo)) {
|
||||||
UInfo.webtoken = WT;
|
UInfo.webtoken = WT;
|
||||||
@@ -314,7 +314,7 @@ namespace OpenWifi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] std::string AuthService::GenerateTokenHMAC(const std::string & UserName, [[maybe_unused]] ACCESS_TYPE Type) {
|
[[nodiscard]] std::string AuthService::GenerateTokenHMAC(const std::string & UserName, [[maybe_unused]] ACCESS_TYPE Type) {
|
||||||
std::string Identity(UserName + ":" + fmt::format("{}",OpenWifi::Now()) + ":" + std::to_string(rand()));
|
std::string Identity(UserName + ":" + fmt::format("{}",Utils::Now()) + ":" + std::to_string(rand()));
|
||||||
HMAC_.update(Identity);
|
HMAC_.update(Identity);
|
||||||
return Poco::DigestEngine::digestToHex(HMAC_.digest());
|
return Poco::DigestEngine::digestToHex(HMAC_.digest());
|
||||||
}
|
}
|
||||||
@@ -530,14 +530,14 @@ namespace OpenWifi {
|
|||||||
UInfo.webtoken.errorCode = 1;
|
UInfo.webtoken.errorCode = 1;
|
||||||
return PASSWORD_ALREADY_USED;
|
return PASSWORD_ALREADY_USED;
|
||||||
}
|
}
|
||||||
UInfo.userinfo.lastPasswordChange = OpenWifi::Now();
|
UInfo.userinfo.lastPasswordChange = Utils::Now();
|
||||||
UInfo.userinfo.changePassword = false;
|
UInfo.userinfo.changePassword = false;
|
||||||
UInfo.userinfo.modified = OpenWifi::Now();
|
UInfo.userinfo.modified = Utils::Now();
|
||||||
StorageService()->UserDB().UpdateUserInfo(AUTHENTICATION_SYSTEM, UInfo.userinfo.id,UInfo.userinfo);
|
StorageService()->UserDB().UpdateUserInfo(AUTHENTICATION_SYSTEM, UInfo.userinfo.id,UInfo.userinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// so we have a good password, password up date has taken place if need be, now generate the token.
|
// so we have a good password, password up date has taken place if need be, now generate the token.
|
||||||
UInfo.userinfo.lastLogin=OpenWifi::Now();
|
UInfo.userinfo.lastLogin=Utils::Now();
|
||||||
StorageService()->UserDB().SetLastLogin(UInfo.userinfo.id);
|
StorageService()->UserDB().SetLastLogin(UInfo.userinfo.id);
|
||||||
CreateToken(UserName, UInfo );
|
CreateToken(UserName, UInfo );
|
||||||
|
|
||||||
@@ -575,14 +575,14 @@ namespace OpenWifi {
|
|||||||
UInfo.webtoken.errorCode = 1;
|
UInfo.webtoken.errorCode = 1;
|
||||||
return PASSWORD_ALREADY_USED;
|
return PASSWORD_ALREADY_USED;
|
||||||
}
|
}
|
||||||
UInfo.userinfo.lastPasswordChange = OpenWifi::Now();
|
UInfo.userinfo.lastPasswordChange = Utils::Now();
|
||||||
UInfo.userinfo.changePassword = false;
|
UInfo.userinfo.changePassword = false;
|
||||||
UInfo.userinfo.modified = OpenWifi::Now();
|
UInfo.userinfo.modified = Utils::Now();
|
||||||
StorageService()->SubDB().UpdateUserInfo(AUTHENTICATION_SYSTEM, UInfo.userinfo.id,UInfo.userinfo);
|
StorageService()->SubDB().UpdateUserInfo(AUTHENTICATION_SYSTEM, UInfo.userinfo.id,UInfo.userinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// so we have a good password, password update has taken place if need be, now generate the token.
|
// so we have a good password, password update has taken place if need be, now generate the token.
|
||||||
UInfo.userinfo.lastLogin=OpenWifi::Now();
|
UInfo.userinfo.lastLogin=Utils::Now();
|
||||||
StorageService()->SubDB().SetLastLogin(UInfo.userinfo.id);
|
StorageService()->SubDB().SetLastLogin(UInfo.userinfo.id);
|
||||||
CreateSubToken(UserName, UInfo );
|
CreateSubToken(UserName, UInfo );
|
||||||
|
|
||||||
@@ -715,7 +715,7 @@ namespace OpenWifi {
|
|||||||
A.action = OpenWifi::SecurityObjects::LinkActions::VERIFY_EMAIL;
|
A.action = OpenWifi::SecurityObjects::LinkActions::VERIFY_EMAIL;
|
||||||
A.userId = UInfo.id;
|
A.userId = UInfo.id;
|
||||||
A.id = MicroServiceCreateUUID();
|
A.id = MicroServiceCreateUUID();
|
||||||
A.created = OpenWifi::Now();
|
A.created = Utils::Now();
|
||||||
A.expires = A.created + 24*60*60;
|
A.expires = A.created + 24*60*60;
|
||||||
A.userAction = true;
|
A.userAction = true;
|
||||||
StorageService()->ActionLinksDB().CreateAction(A);
|
StorageService()->ActionLinksDB().CreateAction(A);
|
||||||
@@ -730,7 +730,7 @@ namespace OpenWifi {
|
|||||||
A.action = OpenWifi::SecurityObjects::LinkActions::SUB_VERIFY_EMAIL;
|
A.action = OpenWifi::SecurityObjects::LinkActions::SUB_VERIFY_EMAIL;
|
||||||
A.userId = UInfo.id;
|
A.userId = UInfo.id;
|
||||||
A.id = MicroServiceCreateUUID();
|
A.id = MicroServiceCreateUUID();
|
||||||
A.created = OpenWifi::Now();
|
A.created = Utils::Now();
|
||||||
A.expires = A.created + 24*60*60;
|
A.expires = A.created + 24*60*60;
|
||||||
A.userAction = false;
|
A.userAction = false;
|
||||||
StorageService()->ActionLinksDB().CreateAction(A);
|
StorageService()->ActionLinksDB().CreateAction(A);
|
||||||
@@ -750,7 +750,7 @@ namespace OpenWifi {
|
|||||||
if(StorageService()->UserTokenDB().GetToken(TToken, WT, UserId, RevocationDate)) {
|
if(StorageService()->UserTokenDB().GetToken(TToken, WT, UserId, RevocationDate)) {
|
||||||
if(RevocationDate!=0)
|
if(RevocationDate!=0)
|
||||||
return false;
|
return false;
|
||||||
Expired = (WT.created_ + WT.expires_in_) < OpenWifi::Now();
|
Expired = (WT.created_ + WT.expires_in_) < Utils::Now();
|
||||||
if(StorageService()->UserDB().GetUserById(UserId,UserInfo)) {
|
if(StorageService()->UserDB().GetUserById(UserId,UserInfo)) {
|
||||||
WebToken = WT;
|
WebToken = WT;
|
||||||
return true;
|
return true;
|
||||||
@@ -769,7 +769,7 @@ namespace OpenWifi {
|
|||||||
if(StorageService()->SubTokenDB().GetToken(TToken, WT, UserId, RevocationDate)) {
|
if(StorageService()->SubTokenDB().GetToken(TToken, WT, UserId, RevocationDate)) {
|
||||||
if(RevocationDate!=0)
|
if(RevocationDate!=0)
|
||||||
return false;
|
return false;
|
||||||
Expired = (WT.created_ + WT.expires_in_) < OpenWifi::Now();
|
Expired = (WT.created_ + WT.expires_in_) < Utils::Now();
|
||||||
if(StorageService()->SubDB().GetUserById(UserId,UserInfo)) {
|
if(StorageService()->SubDB().GetUserById(UserId,UserInfo)) {
|
||||||
WebToken = WT;
|
WebToken = WT;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace OpenWifi {
|
|||||||
{
|
{
|
||||||
Poco::Net::WebSocket WS(*Request, *Response);
|
Poco::Net::WebSocket WS(*Request, *Response);
|
||||||
auto Id = MicroServiceCreateUUID();
|
auto Id = MicroServiceCreateUUID();
|
||||||
UI_WebSocketClientServer()->NewClient(WS,Id,UserInfo_.userinfo.email);
|
UI_WebSocketClientServer()->NewClient(WS,Id,UserInfo_.userinfo.email, TransactionId_);
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
std::cout << "Cannot create websocket client..." << std::endl;
|
std::cout << "Cannot create websocket client..." << std::endl;
|
||||||
|
|||||||
@@ -23,12 +23,12 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
void UI_WebSocketClientServer::NewClient(Poco::Net::WebSocket & WS, const std::string &Id, const std::string &UserName ) {
|
void UI_WebSocketClientServer::NewClient(Poco::Net::WebSocket & WS, const std::string &Id, const std::string &UserName, std::uint64_t TID ) {
|
||||||
|
|
||||||
std::lock_guard G(LocalMutex_);
|
std::lock_guard G(LocalMutex_);
|
||||||
auto Client = std::make_unique<UI_WebSocketClientInfo>(WS,Id, UserName);
|
auto Client = std::make_unique<UI_WebSocketClientInfo>(WS,Id, UserName);
|
||||||
auto ClientSocket = Client->WS_->impl()->sockfd();
|
auto ClientSocket = Client->WS_->impl()->sockfd();
|
||||||
|
TID_ = TID;
|
||||||
Client->WS_->setNoDelay(true);
|
Client->WS_->setNoDelay(true);
|
||||||
Client->WS_->setKeepAlive(true);
|
Client->WS_->setKeepAlive(true);
|
||||||
Client->WS_->setBlocking(false);
|
Client->WS_->setBlocking(false);
|
||||||
@@ -233,9 +233,9 @@ namespace OpenWifi {
|
|||||||
#endif
|
#endif
|
||||||
if (Tokens.size() == 2 &&
|
if (Tokens.size() == 2 &&
|
||||||
#if defined(TIP_SECURITY_SERVICE)
|
#if defined(TIP_SECURITY_SERVICE)
|
||||||
AuthService()->IsAuthorized(Tokens[1], Client->second->UserInfo_, 0, Expired)) {
|
AuthService()->IsAuthorized(Tokens[1], Client->second->UserInfo_, TID_, Expired)) {
|
||||||
#else
|
#else
|
||||||
AuthClient()->IsAuthorized(Tokens[1], Client->second->UserInfo_, 0, Expired, Contacted)) {
|
AuthClient()->IsAuthorized(Tokens[1], Client->second->UserInfo_, TID_, Expired, Contacted)) {
|
||||||
#endif
|
#endif
|
||||||
Client->second->Authenticated_ = true;
|
Client->second->Authenticated_ = true;
|
||||||
Client->second->UserName_ = Client->second->UserInfo_.userinfo.email;
|
Client->second->UserName_ = Client->second->UserInfo_.userinfo.email;
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace OpenWifi {
|
|||||||
void Stop() override;
|
void Stop() override;
|
||||||
void run() override;
|
void run() override;
|
||||||
Poco::Net::SocketReactor & Reactor() { return Reactor_; }
|
Poco::Net::SocketReactor & Reactor() { return Reactor_; }
|
||||||
void NewClient(Poco::Net::WebSocket &WS, const std::string &Id, const std::string &UserName);
|
void NewClient(Poco::Net::WebSocket &WS, const std::string &Id, const std::string &UserName, std::uint64_t TID);
|
||||||
void SetProcessor(UI_WebSocketClientProcessor *F);
|
void SetProcessor(UI_WebSocketClientProcessor *F);
|
||||||
[[nodiscard]] inline bool GeoCodeEnabled() const { return GeoCodeEnabled_; }
|
[[nodiscard]] inline bool GeoCodeEnabled() const { return GeoCodeEnabled_; }
|
||||||
[[nodiscard]] inline std::string GoogleApiKey() const { return GoogleApiKey_; }
|
[[nodiscard]] inline std::string GoogleApiKey() const { return GoogleApiKey_; }
|
||||||
@@ -113,6 +113,7 @@ namespace OpenWifi {
|
|||||||
NotificationTypeIdVec NotificationTypes_;
|
NotificationTypeIdVec NotificationTypes_;
|
||||||
Poco::JSON::Object NotificationTypesJSON_;
|
Poco::JSON::Object NotificationTypesJSON_;
|
||||||
std::vector<ClientList::iterator> ToBeRemoved_;
|
std::vector<ClientList::iterator> ToBeRemoved_;
|
||||||
|
std::uint64_t TID_=0;
|
||||||
|
|
||||||
UI_WebSocketClientServer() noexcept;
|
UI_WebSocketClientServer() noexcept;
|
||||||
void EndConnection(ClientList::iterator Client);
|
void EndConnection(ClientList::iterator Client);
|
||||||
|
|||||||
Reference in New Issue
Block a user