66 */
77
88#include " aos/iam/permhandler.hpp"
9+ #include " aos/common/crypto/utils.hpp"
910#include " aos/common/tools/uuid.hpp"
1011#include " log.hpp"
1112
@@ -15,6 +16,15 @@ namespace aos::iam::permhandler {
1516 * Public
1617 **********************************************************************************************************************/
1718
19+ Error PermHandler::Init (crypto::RandomItf& randomProvider)
20+ {
21+ LOG_DBG () << " Init perm handler" ;
22+
23+ mRandomProvider = &randomProvider;
24+
25+ return ErrorEnum::eNone;
26+ }
27+
1828RetWithError<StaticString<cSecretLen>> PermHandler::RegisterInstance (
1929 const InstanceIdent& instanceIdent, const Array<FunctionServicePermissions>& instancePermissions)
2030{
@@ -30,7 +40,10 @@ RetWithError<StaticString<cSecretLen>> PermHandler::RegisterInstance(
3040 return {secret};
3141 }
3242
33- secret = GenerateSecret ();
43+ Tie (secret, err) = GenerateSecret ();
44+ if (!err.IsNone ()) {
45+ return {{}, AOS_ERROR_WRAP (err)};
46+ }
3447
3548 err = AddSecret (secret, instanceIdent, instancePermissions);
3649 if (!err.IsNone ()) {
@@ -108,16 +121,18 @@ InstancePermissions* PermHandler::FindByInstanceIdent(const InstanceIdent& insta
108121 return mInstancesPerms .FindIf ([&instanceIdent](const auto & elem) { return instanceIdent == elem.mInstanceIdent ; });
109122}
110123
111- StaticString<cSecretLen> PermHandler::GenerateSecret ()
124+ RetWithError< StaticString<cSecretLen> > PermHandler::GenerateSecret ()
112125{
113- StaticString<cSecretLen> newSecret;
114-
115- do {
116- newSecret = uuid::UUIDToString (uuid::CreateUUID ());
126+ if (!mRandomProvider ) {
127+ return {{}, AOS_ERROR_WRAP (ErrorEnum::eWrongState)};
128+ }
117129
118- } while (FindBySecret (newSecret) != mInstancesPerms .end ());
130+ auto [uuid, err] = uuid::CreateUUID (*mRandomProvider );
131+ if (!err.IsNone ()) {
132+ return {{}, AOS_ERROR_WRAP (err)};
133+ }
119134
120- return newSecret ;
135+ return StaticString<cSecretLen>( uuid::UUIDToString (uuid)) ;
121136}
122137
123138RetWithError<StaticString<cSecretLen>> PermHandler::GetSecretForInstance (const InstanceIdent& instanceIdent)
0 commit comments