130 lines
2.7 KiB
Go
130 lines
2.7 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"git.myservermanager.com/varakh/upda/api"
|
|
"git.myservermanager.com/varakh/upda/util"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type webhookService struct {
|
|
repo WebhookRepository
|
|
webhookConfig *webhookConfig
|
|
eventService *eventService
|
|
}
|
|
|
|
func newWebhookService(r WebhookRepository, c *webhookConfig, e *eventService) *webhookService {
|
|
return &webhookService{
|
|
repo: r,
|
|
webhookConfig: c,
|
|
eventService: e,
|
|
}
|
|
}
|
|
|
|
func (s *webhookService) get(id string) (*Webhook, error) {
|
|
if id == "" {
|
|
return nil, errorValidationNotBlank
|
|
}
|
|
|
|
e, err := s.repo.find(id)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return e, nil
|
|
}
|
|
|
|
func (s *webhookService) create(label string, t api.WebhookType, ignoreHost bool) (*Webhook, error) {
|
|
if label == "" || t == "" {
|
|
return nil, errorValidationNotBlank
|
|
}
|
|
|
|
var err error
|
|
var token string
|
|
var e *Webhook
|
|
|
|
if token, err = util.GenerateSecureRandomString(s.webhookConfig.tokenLength); err != nil {
|
|
return nil, newServiceError(General, fmt.Errorf("token generation failed: %w", err))
|
|
}
|
|
|
|
if e, err = s.repo.create(label, t, token, ignoreHost); err != nil {
|
|
return nil, err
|
|
} else {
|
|
s.eventService.createWebhookCreated(e)
|
|
zap.L().Sugar().Info("Created webhook")
|
|
return e, nil
|
|
}
|
|
}
|
|
|
|
func (s *webhookService) updateLabel(id string, label string) (*Webhook, error) {
|
|
if id == "" || label == "" {
|
|
return nil, errorValidationNotBlank
|
|
}
|
|
|
|
var e *Webhook
|
|
var err error
|
|
|
|
if e, err = s.get(id); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
old := e
|
|
if e, err = s.repo.updateLabel(id, label); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s.eventService.createWebhookUpdated(old, e)
|
|
zap.L().Sugar().Infof("Modified webhook '%v'", id)
|
|
return e, nil
|
|
}
|
|
|
|
func (s *webhookService) updateIgnoreHost(id string, ignoreHost bool) (*Webhook, error) {
|
|
if id == "" {
|
|
return nil, errorValidationNotBlank
|
|
}
|
|
|
|
var e *Webhook
|
|
var err error
|
|
|
|
if e, err = s.get(id); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
old := e
|
|
if e, err = s.repo.updateIgnoreHost(id, ignoreHost); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s.eventService.createWebhookUpdated(old, e)
|
|
zap.L().Sugar().Infof("Modified webhook '%v'", id)
|
|
return e, nil
|
|
}
|
|
|
|
func (s *webhookService) delete(id string) error {
|
|
if id == "" {
|
|
return errorValidationNotBlank
|
|
}
|
|
|
|
e, err := s.get(id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err = s.repo.delete(e.ID.String()); err != nil {
|
|
return err
|
|
}
|
|
|
|
s.eventService.createWebhookDeleted(e)
|
|
zap.L().Sugar().Infof("Deleted webhook '%v'", id)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *webhookService) paginate(page int, pageSize int, orderBy string, order string) ([]*Webhook, error) {
|
|
return s.repo.paginate(page, pageSize, orderBy, order)
|
|
}
|
|
|
|
func (s *webhookService) count() (int64, error) {
|
|
return s.repo.count()
|
|
}
|