mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
				synced 2025-10-30 02:12:32 +00:00 
			
		
		
		
	Fixes for subscriber service.
This commit is contained in:
		| @@ -78,14 +78,15 @@ namespace OpenWifi { | ||||
| 		    if(!CallToken.empty()) { | ||||
| 		        auto Client = UserCache_.get(CallToken); | ||||
| 		        if( Client.isNull() ) { | ||||
| 		            SecurityObjects::UserInfoAndPolicy UInfo2; | ||||
| 		            uint64_t RevocationDate=0; | ||||
| 		            if(StorageService()->GetToken(CallToken,UInfo2,RevocationDate)) { | ||||
| 		            SecurityObjects::WebToken   WT; | ||||
| 		            uint64_t                    RevocationDate=0; | ||||
|                     std::string                 UserId; | ||||
| 		            if(StorageService()->GetToken(CallToken, WT, UserId, RevocationDate)) { | ||||
| 		                if(RevocationDate!=0) | ||||
| 		                    return false; | ||||
| 		                Expired = (UInfo2.webtoken.created_ + UInfo2.webtoken.expires_in_) < time(nullptr); | ||||
| 		                if(StorageService()->GetUserById(UInfo2.userinfo.Id,UInfo.userinfo)) { | ||||
| 		                    UInfo.webtoken = UInfo2.webtoken; | ||||
| 		                Expired = (WT.created_ + WT.expires_in_) < time(nullptr); | ||||
| 		                if(StorageService()->GetUserById(UserId,UInfo.userinfo)) { | ||||
| 		                    UInfo.webtoken = WT; | ||||
| 		                    UserCache_.update(CallToken, UInfo); | ||||
| 		                    SessionToken = CallToken; | ||||
| 		                    return true; | ||||
| @@ -121,14 +122,15 @@ namespace OpenWifi { | ||||
|             if(!CallToken.empty()) { | ||||
|                 auto Client = SubUserCache_.get(CallToken); | ||||
|                 if( Client.isNull() ) { | ||||
|                     SecurityObjects::UserInfoAndPolicy UInfo2; | ||||
|                     uint64_t RevocationDate=0; | ||||
|                     if(StorageService()->GetSubToken(CallToken,UInfo2,RevocationDate)) { | ||||
|                     SecurityObjects::WebToken   WT; | ||||
|                     uint64_t                    RevocationDate=0; | ||||
|                     std::string                 UserId; | ||||
|                     if(StorageService()->GetSubToken(CallToken,WT, UserId, RevocationDate)) { | ||||
|                         if(RevocationDate!=0) | ||||
|                             return false; | ||||
|                         Expired = (UInfo2.webtoken.created_ + UInfo2.webtoken.expires_in_) < time(nullptr); | ||||
|                         if(StorageService()->GetSubUserById(UInfo2.userinfo.Id,UInfo.userinfo)) { | ||||
|                             UInfo.webtoken = UInfo2.webtoken; | ||||
|                         Expired = (WT.created_ + WT.expires_in_) < time(nullptr); | ||||
|                         if(StorageService()->GetSubUserById(UserId,UInfo.userinfo)) { | ||||
|                             UInfo.webtoken = WT; | ||||
|                             SubUserCache_.update(CallToken, UInfo); | ||||
|                             SessionToken = CallToken; | ||||
|                             return true; | ||||
| @@ -156,7 +158,7 @@ namespace OpenWifi { | ||||
|     } | ||||
|  | ||||
|     void AuthService::RevokeSubToken(std::string & Token) { | ||||
|         UserCache_.remove(Token); | ||||
|         SubUserCache_.remove(Token); | ||||
|         StorageService()->RevokeSubToken(Token); | ||||
|     } | ||||
|  | ||||
| @@ -631,57 +633,53 @@ namespace OpenWifi { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         std::string TToken{Token}; | ||||
|         if(StorageService()->IsTokenRevoked(TToken)) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         //  get the token from disk... | ||||
|         std::string TToken{Token}, UserId; | ||||
|         SecurityObjects::UserInfoAndPolicy UInfo; | ||||
|         SecurityObjects::WebToken   WT; | ||||
|         uint64_t RevocationDate=0; | ||||
|         if(StorageService()->GetToken(TToken, UInfo, RevocationDate)) { | ||||
|         if(StorageService()->GetToken(TToken, WT, UserId, RevocationDate)) { | ||||
|             if(RevocationDate!=0) | ||||
|                 return false; | ||||
|             Expired = (UInfo.webtoken.created_ + UInfo.webtoken.expires_in_) < std::time(nullptr); | ||||
|             if(StorageService()->GetUserById(UInfo.userinfo.Id,UInfo.userinfo)) { | ||||
|                 WebToken = UInfo.webtoken; | ||||
|             Expired = (WT.created_ + WT.expires_in_) < std::time(nullptr); | ||||
|             if(StorageService()->GetUserById(UserId,UInfo.userinfo)) { | ||||
|                 WebToken = WT; | ||||
|                 UserCache_.update(UInfo.webtoken.access_token_, UInfo); | ||||
|                 return true; | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|         return IsValidSubToken(Token, WebToken, UserInfo, Expired); | ||||
|     } | ||||
|  | ||||
|     bool AuthService::IsValidSubToken(const std::string &Token, SecurityObjects::WebToken &WebToken, SecurityObjects::UserInfo &UserInfo, bool & Expired) { | ||||
|         std::lock_guard G(Mutex_); | ||||
|         auto Now = std::time(nullptr); | ||||
|  | ||||
|         Expired = false; | ||||
|         auto Client = SubUserCache_.get(Token); | ||||
|         if(!Client.isNull()) { | ||||
|             Expired = (Client->webtoken.created_ + Client->webtoken.expires_in_) < std::time(nullptr); | ||||
|             Expired = (Client->webtoken.created_ + Client->webtoken.expires_in_) < Now ; | ||||
|             WebToken = Client->webtoken; | ||||
|             UserInfo = Client->userinfo; | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         std::string TToken{Token}; | ||||
|         if(StorageService()->IsSubTokenRevoked(TToken)) { | ||||
|         std::string TToken{Token}, UserId; | ||||
|         SecurityObjects::UserInfoAndPolicy UInfo; | ||||
|         SecurityObjects::WebToken   WT; | ||||
|         uint64_t                    RevocationDate=0; | ||||
|         if(StorageService()->GetSubToken(TToken, WT, UserId, RevocationDate)) { | ||||
|             if(RevocationDate!=0) | ||||
|                 return false; | ||||
|             Expired = (WT.created_ + WT.expires_in_) < std::time(nullptr); | ||||
|             if(StorageService()->GetSubUserById(UserId,UInfo.userinfo)) { | ||||
|                 WebToken = WT; | ||||
|                 UserCache_.update(UInfo.webtoken.access_token_, UInfo); | ||||
|                 return true; | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         //  get the token from disk... | ||||
|         SecurityObjects::UserInfoAndPolicy UInfo; | ||||
|         uint64_t RevocationDate=0; | ||||
|         if(StorageService()->GetSubToken(TToken, UInfo, RevocationDate)) { | ||||
|             if(RevocationDate!=0) | ||||
|                 return false; | ||||
|             Expired = (UInfo.webtoken.created_ + UInfo.webtoken.expires_in_) < std::time(nullptr); | ||||
|             if(StorageService()->GetSubUserById(UInfo.userinfo.Id,UInfo.userinfo)) { | ||||
|                 WebToken = UInfo.webtoken; | ||||
|                 SubUserCache_.update(UInfo.webtoken.access_token_, UInfo); | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -54,6 +54,8 @@ namespace OpenWifi::SecurityObjects { | ||||
|             return ADMIN; | ||||
|         else if (!Poco::icompare(U,"subscriber")) | ||||
|             return SUBSCRIBER; | ||||
|         else if (!Poco::icompare(U,"partner")) | ||||
|             return PARTNER; | ||||
|         else if (!Poco::icompare(U,"csr")) | ||||
|             return CSR; | ||||
|         else if (!Poco::icompare(U, "system")) | ||||
| @@ -72,6 +74,7 @@ namespace OpenWifi::SecurityObjects { | ||||
|             case ROOT: return "root"; | ||||
|             case ADMIN: return "admin"; | ||||
|             case SUBSCRIBER: return "subscriber"; | ||||
|             case PARTNER: return "partner"; | ||||
|             case CSR: return "csr"; | ||||
|             case SYSTEM: return "system"; | ||||
|             case INSTALLER: return "installer"; | ||||
|   | ||||
| @@ -43,7 +43,7 @@ namespace OpenWifi { | ||||
|         }; | ||||
|  | ||||
|         enum USER_ROLE { | ||||
|             UNKNOWN, ROOT, ADMIN, SUBSCRIBER, CSR, SYSTEM, INSTALLER, NOC, ACCOUNTING | ||||
|             UNKNOWN, ROOT, ADMIN, SUBSCRIBER, CSR, SYSTEM, INSTALLER, NOC, ACCOUNTING, PARTNER | ||||
|         }; | ||||
|  | ||||
|         USER_ROLE UserTypeFromString(const std::string &U); | ||||
|   | ||||
| @@ -131,14 +131,14 @@ namespace OpenWifi { | ||||
|         bool IsTokenRevoked( std::string & Token ); | ||||
|         bool CleanExpiredTokens(); | ||||
|         bool RevokeAllTokens( std::string & UserName ); | ||||
|         bool GetToken(std::string &Token, SecurityObjects::UserInfoAndPolicy &UInfo, uint64_t &RevocationDate); | ||||
|         bool GetToken(std::string &Token, SecurityObjects::WebToken &WT, std::string & UserId, uint64_t &RevocationDate); | ||||
|  | ||||
|         bool AddSubToken(std::string &UserId, std::string &Token, std::string &RefreshToken, std::string & TokenType, uint64_t Expires, uint64_t TimeOut); | ||||
|         bool RevokeSubToken( std::string & Token ); | ||||
|         bool IsSubTokenRevoked( std::string & Token ); | ||||
|         bool CleanExpiredSubTokens(); | ||||
|         bool RevokeAllSubTokens( std::string & UserName ); | ||||
|         bool GetSubToken(std::string &Token, SecurityObjects::UserInfoAndPolicy &UInfo, uint64_t &RevocationDate); | ||||
|         bool GetSubToken(std::string &Token, SecurityObjects::WebToken &WT, std::string & UserId, uint64_t &RevocationDate); | ||||
|  | ||||
|         /* | ||||
|          *  All ActionLinks functions | ||||
|   | ||||
| @@ -45,7 +45,7 @@ namespace OpenWifi { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     bool Storage::GetSubToken(std::string &Token, SecurityObjects::UserInfoAndPolicy &UInfo, uint64_t &RevocationDate) { | ||||
|     bool Storage::GetSubToken(std::string &Token, SecurityObjects::WebToken &WT, std::string & UserId, uint64_t &RevocationDate) { | ||||
|         try { | ||||
|  | ||||
|             Poco::Data::Session Sess = Pool_->get(); | ||||
| @@ -53,13 +53,13 @@ namespace OpenWifi { | ||||
|             RevocationDate = 0 ; | ||||
|             std::string St2{"SELECT " + AllSubTokensFieldsForSelect + " From SubTokens WHERE Token=?"}; | ||||
|             Select << ConvertParams(St2), | ||||
|             Poco::Data::Keywords::into(UInfo.webtoken.access_token_), | ||||
|             Poco::Data::Keywords::into(UInfo.webtoken.refresh_token_), | ||||
|             Poco::Data::Keywords::into(UInfo.webtoken.token_type_), | ||||
|             Poco::Data::Keywords::into(UInfo.userinfo.Id), | ||||
|             Poco::Data::Keywords::into(UInfo.webtoken.created_), | ||||
|             Poco::Data::Keywords::into(UInfo.webtoken.expires_in_), | ||||
|             Poco::Data::Keywords::into(UInfo.webtoken.idle_timeout_), | ||||
|             Poco::Data::Keywords::into(WT.access_token_), | ||||
|             Poco::Data::Keywords::into(WT.refresh_token_), | ||||
|             Poco::Data::Keywords::into(WT.token_type_), | ||||
|             Poco::Data::Keywords::into(UserId), | ||||
|             Poco::Data::Keywords::into(WT.created_), | ||||
|             Poco::Data::Keywords::into(WT.expires_in_), | ||||
|             Poco::Data::Keywords::into(WT.idle_timeout_), | ||||
|             Poco::Data::Keywords::into(RevocationDate), | ||||
|             Poco::Data::Keywords::use(Token); | ||||
|             Select.execute(); | ||||
| @@ -139,7 +139,7 @@ namespace OpenWifi { | ||||
|             Poco::Data::Session Sess = Pool_->get(); | ||||
|             Poco::Data::Statement Delete(Sess); | ||||
|  | ||||
|             std::string St2{"DELETE SubFrom Tokens WHERE Username=?"}; | ||||
|             std::string St2{"DELETE From SubTokens WHERE Username=?"}; | ||||
|             Delete << ConvertParams(St2), | ||||
|             Poco::Data::Keywords::use(UserId); | ||||
|             Delete.execute(); | ||||
|   | ||||
| @@ -42,7 +42,7 @@ namespace OpenWifi { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     bool Storage::GetToken(std::string &Token, SecurityObjects::UserInfoAndPolicy &UInfo, uint64_t &RevocationDate) { | ||||
|     bool Storage::GetToken(std::string &Token, SecurityObjects::WebToken &WT, std::string & UserId, uint64_t &RevocationDate) { | ||||
|         try { | ||||
|  | ||||
|             Poco::Data::Session Sess = Pool_->get(); | ||||
| @@ -50,17 +50,21 @@ namespace OpenWifi { | ||||
|             RevocationDate = 0 ; | ||||
|             std::string St2{"SELECT " + AllTokensFieldsForSelect + " From Tokens WHERE Token=?"}; | ||||
|             Select << ConvertParams(St2), | ||||
|                 Poco::Data::Keywords::into(UInfo.webtoken.access_token_), | ||||
|                 Poco::Data::Keywords::into(UInfo.webtoken.refresh_token_), | ||||
|                 Poco::Data::Keywords::into(UInfo.webtoken.token_type_), | ||||
|                 Poco::Data::Keywords::into(UInfo.userinfo.Id), | ||||
|                 Poco::Data::Keywords::into(UInfo.webtoken.created_), | ||||
|                 Poco::Data::Keywords::into(UInfo.webtoken.expires_in_), | ||||
|                 Poco::Data::Keywords::into(UInfo.webtoken.idle_timeout_), | ||||
|                 Poco::Data::Keywords::into(WT.access_token_), | ||||
|                 Poco::Data::Keywords::into(WT.refresh_token_), | ||||
|                 Poco::Data::Keywords::into(WT.token_type_), | ||||
|                 Poco::Data::Keywords::into(UserId), | ||||
|                 Poco::Data::Keywords::into(WT.created_), | ||||
|                 Poco::Data::Keywords::into(WT.expires_in_), | ||||
|                 Poco::Data::Keywords::into(WT.idle_timeout_), | ||||
|                 Poco::Data::Keywords::into(RevocationDate), | ||||
|                 Poco::Data::Keywords::use(Token); | ||||
|             Select.execute(); | ||||
|  | ||||
|             if(Select.rowsExtracted()!=1) | ||||
|                 return false; | ||||
|             return true; | ||||
|  | ||||
|         } catch (const Poco::Exception &E) { | ||||
|             Logger().log(E); | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 stephb9959
					stephb9959