+func (im *InvokerManager) isInvokerOnboarded(newInvoker invokerapi.APIInvokerEnrolmentDetails) error {
+ for _, invoker := range im.onboardedInvokers {
+ if err := invoker.ValidateAlreadyOnboarded(newInvoker); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (im *InvokerManager) prepareNewInvoker(newInvoker *invokerapi.APIInvokerEnrolmentDetails) {
+ var apiListRequestedServices invokerapi.APIList = nil
+ if newInvoker.ApiList != nil {
+ apiListRequestedServices = *newInvoker.ApiList
+ }
+ var allowedPublishedServices invokerapi.APIList = im.publishRegister.GetAllowedPublishedServices(apiListRequestedServices)
+ newInvoker.ApiList = &allowedPublishedServices
+
+ im.lock.Lock()
+ defer im.lock.Unlock()
+
+ newInvoker.PrepareNewInvoker()
+
+ if im.keycloak != nil {
+ // The type assertion fails when unit testing from ServiceManager where we use Capif as a library, and we are not using Keycloak.
+ if _, ok := im.keycloak.(*keycloak.KeycloakManager); !ok {
+ // im.keycloak is not nil and its dynamic value is not nil.
+ im.addClientInKeycloak(newInvoker)
+ }
+ }
+
+ im.onboardedInvokers[*newInvoker.ApiInvokerId] = *newInvoker
+}
+
+func (im *InvokerManager) addClientInKeycloak(newInvoker *invokerapi.APIInvokerEnrolmentDetails) error {
+ if err := im.keycloak.AddClient(*newInvoker.ApiInvokerId, "invokerrealm"); err != nil {
+ return err
+ }
+
+ if body, err := im.keycloak.GetClientRepresentation(*newInvoker.ApiInvokerId, "invokerrealm"); err != nil {
+ return err
+ } else {
+ newInvoker.OnboardingInformation.OnboardingSecret = body.Secret
+ }
+ return nil
+}
+