/
provision.go
98 lines (82 loc) · 4.04 KB
/
provision.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package subscription
import (
"context"
klib "github.com/kong/go-kong/kong"
"github.com/Axway/agent-sdk/pkg/agent"
"github.com/Axway/agent-sdk/pkg/apic/provisioning"
"github.com/Axway/agent-sdk/pkg/util/log"
"github.com/Axway/agents-kong/pkg/discovery/kong"
"github.com/Axway/agents-kong/pkg/discovery/subscription/access"
"github.com/Axway/agents-kong/pkg/discovery/subscription/application"
"github.com/Axway/agents-kong/pkg/discovery/subscription/credential"
)
type ProvisionerOption func(*provisioner)
type kongClient interface {
// Provisioning
CreateConsumer(ctx context.Context, id, name string) (*klib.Consumer, error)
AddConsumerACL(ctx context.Context, id string) error
DeleteConsumer(ctx context.Context, id string) error
// Credential
DeleteOauth2(ctx context.Context, consumerID, clientID string) error
DeleteHttpBasic(ctx context.Context, consumerID, username string) error
DeleteAuthKey(ctx context.Context, consumerID, authKey string) error
CreateHttpBasic(ctx context.Context, consumerID string, basicAuth *klib.BasicAuth) (*klib.BasicAuth, error)
CreateOauth2(ctx context.Context, consumerID string, oauth2 *klib.Oauth2Credential) (*klib.Oauth2Credential, error)
CreateAuthKey(ctx context.Context, consumerID string, keyAuth *klib.KeyAuth) (*klib.KeyAuth, error)
// Access Request
AddRouteACL(ctx context.Context, routeID, allowedID string) error
RemoveRouteACL(ctx context.Context, routeID, revokedID string) error
AddQuota(ctx context.Context, routeID, allowedID, quotaInterval string, quotaLimit int) error
// Discovery
ListServices(ctx context.Context) ([]*klib.Service, error)
ListRoutesForService(ctx context.Context, serviceId string) ([]*klib.Route, error)
GetSpecForService(ctx context.Context, service *klib.Service) ([]byte, error)
GetKongPlugins() *kong.Plugins
}
type provisioner struct {
logger log.FieldLogger
client kongClient
aclDisable bool
}
// NewProvisioner creates a type to implement the SDK Provisioning methods for handling subscriptions
func NewProvisioner(client kongClient, opts ...ProvisionerOption) {
logger := log.NewFieldLogger().WithComponent("provision").WithPackage("subscription")
logger.Info("Registering provisioning callbacks")
provisioner := &provisioner{
client: client,
logger: logger,
}
for _, o := range opts {
o(provisioner)
}
agent.RegisterProvisioner(provisioner)
registerOauth2()
registerBasicAuth()
registerKeyAuth()
}
func WithACLDisable() ProvisionerOption {
return func(p *provisioner) {
p.aclDisable = true
}
}
func (p provisioner) ApplicationRequestProvision(request provisioning.ApplicationRequest) provisioning.RequestStatus {
return application.NewApplicationProvisioner(context.Background(), p.client, request).Provision()
}
func (p provisioner) ApplicationRequestDeprovision(request provisioning.ApplicationRequest) provisioning.RequestStatus {
return application.NewApplicationProvisioner(context.Background(), p.client, request).Deprovision()
}
func (p provisioner) CredentialProvision(request provisioning.CredentialRequest) (provisioning.RequestStatus, provisioning.Credential) {
return credential.NewCredentialProvisioner(context.Background(), p.client, request).Provision()
}
func (p provisioner) CredentialDeprovision(request provisioning.CredentialRequest) provisioning.RequestStatus {
return credential.NewCredentialProvisioner(context.Background(), p.client, request).Deprovision()
}
func (p provisioner) CredentialUpdate(request provisioning.CredentialRequest) (provisioning.RequestStatus, provisioning.Credential) {
return credential.NewCredentialProvisioner(context.Background(), p.client, request).Update()
}
func (p provisioner) AccessRequestProvision(request provisioning.AccessRequest) (provisioning.RequestStatus, provisioning.AccessData) {
return access.NewAccessProvisioner(context.Background(), p.client, request, p.aclDisable).Provision()
}
func (p provisioner) AccessRequestDeprovision(request provisioning.AccessRequest) provisioning.RequestStatus {
return access.NewAccessProvisioner(context.Background(), p.client, request, p.aclDisable).Deprovision()
}