driftctl/pkg/remote/aws/repository/sns_repository.go

64 lines
1.6 KiB
Go
Raw Normal View History

package repository
2021-02-02 12:02:53 +00:00
import (
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sns"
"github.com/aws/aws-sdk-go/service/sns/snsiface"
"github.com/cloudskiff/driftctl/pkg/remote/cache"
2021-02-02 12:02:53 +00:00
)
type SNSRepository interface {
2021-02-02 12:02:53 +00:00
ListAllTopics() ([]*sns.Topic, error)
ListAllSubscriptions() ([]*sns.Subscription, error)
2021-02-02 12:02:53 +00:00
}
type snsRepository struct {
client snsiface.SNSAPI
cache cache.Cache
2021-02-02 12:02:53 +00:00
}
func NewSNSRepository(session *session.Session, c cache.Cache) *snsRepository {
return &snsRepository{
2021-02-02 12:02:53 +00:00
sns.New(session),
c,
2021-02-02 12:02:53 +00:00
}
}
func (r *snsRepository) ListAllTopics() ([]*sns.Topic, error) {
if v := r.cache.Get("snsListAllTopics"); v != nil {
return v.([]*sns.Topic), nil
}
2021-02-02 12:02:53 +00:00
var topics []*sns.Topic
input := &sns.ListTopicsInput{}
err := r.client.ListTopicsPages(input, func(res *sns.ListTopicsOutput, lastPage bool) bool {
2021-02-02 12:02:53 +00:00
topics = append(topics, res.Topics...)
return !lastPage
})
if err != nil {
return nil, err
}
r.cache.Put("snsListAllTopics", topics)
2021-02-02 12:02:53 +00:00
return topics, nil
}
func (r *snsRepository) ListAllSubscriptions() ([]*sns.Subscription, error) {
if v := r.cache.Get("snsListAllSubscriptions"); v != nil {
return v.([]*sns.Subscription), nil
}
var subscriptions []*sns.Subscription
input := &sns.ListSubscriptionsInput{}
err := r.client.ListSubscriptionsPages(input, func(res *sns.ListSubscriptionsOutput, lastPage bool) bool {
subscriptions = append(subscriptions, res.Subscriptions...)
return !lastPage
})
if err != nil {
return nil, err
}
r.cache.Put("snsListAllSubscriptions", subscriptions)
return subscriptions, nil
}