//go:generate mockery --name InvokerRegister
type InvokerRegister interface {
+ // Checks if the invoker is registered.
+ // Returns true of the provided invoker is registered, false otherwise.
IsInvokerRegistered(invokerId string) bool
+ // Verifies that the provided secret is the invoker's registered secret.
+ // Returns true if the provided secret is the registered invoker's secret, false otherwise.
VerifyInvokerSecret(invokerId, secret string) bool
+ // Gets the provided invoker's registered APIs.
+ // Returns a list of all the invoker's registered APIs.
GetInvokerApiList(invokerId string) *invokerapi.APIList
}
type InvokerManager struct {
onboardedInvokers map[string]invokerapi.APIInvokerEnrolmentDetails
- apiRegister publishservice.APIRegister
+ publishRegister publishservice.PublishRegister
nextId int64
lock sync.Mutex
}
-func NewInvokerManager(apiRegister publishservice.APIRegister) *InvokerManager {
+// Creates a manager that implements both the InvokerRegister and the invokermanagementapi.ServerInterface interfaces.
+func NewInvokerManager(publishRegister publishservice.PublishRegister) *InvokerManager {
return &InvokerManager{
onboardedInvokers: make(map[string]invokerapi.APIInvokerEnrolmentDetails),
- apiRegister: apiRegister,
+ publishRegister: publishRegister,
nextId: 1000,
}
}
func (im *InvokerManager) GetInvokerApiList(invokerId string) *invokerapi.APIList {
invoker, ok := im.onboardedInvokers[invokerId]
if ok {
- return invoker.ApiList
+ var apiList invokerapi.APIList = im.publishRegister.GetAllPublishedServices()
+ im.lock.Lock()
+ defer im.lock.Unlock()
+ invoker.ApiList = &apiList
+ return &apiList
}
return nil
}
+// Creates a new individual API Invoker profile.
func (im *InvokerManager) PostOnboardedInvokers(ctx echo.Context) error {
var newInvoker invokerapi.APIInvokerEnrolmentDetails
err := ctx.Bind(&newInvoker)
}
newInvoker.OnboardingInformation.OnboardingSecret = &onboardingSecret
+ var apiList invokerapi.APIList = im.publishRegister.GetAllPublishedServices()
+ newInvoker.ApiList = &apiList
+
im.onboardedInvokers[*newInvoker.ApiInvokerId] = newInvoker
uri := ctx.Request().Host + ctx.Request().URL.String()
return nil
}
+// Deletes an individual API Invoker.
func (im *InvokerManager) DeleteOnboardedInvokersOnboardingId(ctx echo.Context, onboardingId string) error {
im.lock.Lock()
defer im.lock.Unlock()
return ctx.NoContent(http.StatusNoContent)
}
+// Updates an individual API invoker details.
func (im *InvokerManager) PutOnboardedInvokersOnboardingId(ctx echo.Context, onboardingId string) error {
var invoker invokerapi.APIInvokerEnrolmentDetails
err := ctx.Bind(&invoker)
return true, sendCoreError(ctx, http.StatusBadRequest, "Invoker missing required OnboardingInformation.ApiInvokerPublicKey")
}
- if !im.areAPIsRegistered(invoker.ApiList) {
+ if !im.areAPIsPublished(invoker.ApiList) {
return true, sendCoreError(ctx, http.StatusBadRequest, "Some APIs needed by invoker are not registered")
}
return false, nil
}
-func (im *InvokerManager) areAPIsRegistered(apis *invokerapi.APIList) bool {
+func (im *InvokerManager) areAPIsPublished(apis *invokerapi.APIList) bool {
if apis == nil {
return true
}
- return im.apiRegister.AreAPIsRegistered((*[]publishapi.ServiceAPIDescription)(apis))
+ return im.publishRegister.AreAPIsPublished((*[]publishapi.ServiceAPIDescription)(apis))
}
func (im *InvokerManager) getId(invokerInfo *string) *string {