mirror of
https://github.com/h44z/wg-portal.git
synced 2025-04-19 08:55:12 +00:00
113 lines
3.5 KiB
Go
113 lines
3.5 KiB
Go
package backend
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/h44z/wg-portal/internal/config"
|
|
"github.com/h44z/wg-portal/internal/domain"
|
|
)
|
|
|
|
// region dependencies
|
|
|
|
type PeerServicePeerManager interface {
|
|
GetPeer(ctx context.Context, id domain.PeerIdentifier) (*domain.Peer, error)
|
|
GetUserPeers(ctx context.Context, id domain.UserIdentifier) ([]domain.Peer, error)
|
|
GetInterfaceAndPeers(ctx context.Context, id domain.InterfaceIdentifier) (*domain.Interface, []domain.Peer, error)
|
|
PreparePeer(ctx context.Context, id domain.InterfaceIdentifier) (*domain.Peer, error)
|
|
CreatePeer(ctx context.Context, peer *domain.Peer) (*domain.Peer, error)
|
|
UpdatePeer(ctx context.Context, peer *domain.Peer) (*domain.Peer, error)
|
|
DeletePeer(ctx context.Context, id domain.PeerIdentifier) error
|
|
CreateMultiplePeers(
|
|
ctx context.Context,
|
|
interfaceId domain.InterfaceIdentifier,
|
|
r *domain.PeerCreationRequest,
|
|
) ([]domain.Peer, error)
|
|
GetPeerStats(ctx context.Context, id domain.InterfaceIdentifier) ([]domain.PeerStatus, error)
|
|
}
|
|
|
|
type PeerServiceConfigFileManager interface {
|
|
GetPeerConfig(ctx context.Context, id domain.PeerIdentifier) (io.Reader, error)
|
|
GetPeerConfigQrCode(ctx context.Context, id domain.PeerIdentifier) (io.Reader, error)
|
|
}
|
|
|
|
type PeerServiceMailManager interface {
|
|
SendPeerEmail(ctx context.Context, linkOnly bool, peers ...domain.PeerIdentifier) error
|
|
}
|
|
|
|
// endregion dependencies
|
|
|
|
type PeerService struct {
|
|
cfg *config.Config
|
|
|
|
peers PeerServicePeerManager
|
|
configFile PeerServiceConfigFileManager
|
|
mailer PeerServiceMailManager
|
|
}
|
|
|
|
func NewPeerService(
|
|
cfg *config.Config,
|
|
peers PeerServicePeerManager,
|
|
configFile PeerServiceConfigFileManager,
|
|
mailer PeerServiceMailManager,
|
|
) *PeerService {
|
|
return &PeerService{
|
|
cfg: cfg,
|
|
peers: peers,
|
|
configFile: configFile,
|
|
mailer: mailer,
|
|
}
|
|
}
|
|
|
|
func (p PeerService) GetInterfaceAndPeers(ctx context.Context, id domain.InterfaceIdentifier) (
|
|
*domain.Interface,
|
|
[]domain.Peer,
|
|
error,
|
|
) {
|
|
return p.peers.GetInterfaceAndPeers(ctx, id)
|
|
}
|
|
|
|
func (p PeerService) PreparePeer(ctx context.Context, id domain.InterfaceIdentifier) (*domain.Peer, error) {
|
|
return p.peers.PreparePeer(ctx, id)
|
|
}
|
|
|
|
func (p PeerService) GetPeer(ctx context.Context, id domain.PeerIdentifier) (*domain.Peer, error) {
|
|
return p.peers.GetPeer(ctx, id)
|
|
}
|
|
|
|
func (p PeerService) CreatePeer(ctx context.Context, peer *domain.Peer) (*domain.Peer, error) {
|
|
return p.peers.CreatePeer(ctx, peer)
|
|
}
|
|
|
|
func (p PeerService) CreateMultiplePeers(
|
|
ctx context.Context,
|
|
interfaceId domain.InterfaceIdentifier,
|
|
r *domain.PeerCreationRequest,
|
|
) ([]domain.Peer, error) {
|
|
return p.peers.CreateMultiplePeers(ctx, interfaceId, r)
|
|
}
|
|
|
|
func (p PeerService) UpdatePeer(ctx context.Context, peer *domain.Peer) (*domain.Peer, error) {
|
|
return p.peers.UpdatePeer(ctx, peer)
|
|
}
|
|
|
|
func (p PeerService) DeletePeer(ctx context.Context, id domain.PeerIdentifier) error {
|
|
return p.peers.DeletePeer(ctx, id)
|
|
}
|
|
|
|
func (p PeerService) GetPeerConfig(ctx context.Context, id domain.PeerIdentifier) (io.Reader, error) {
|
|
return p.configFile.GetPeerConfig(ctx, id)
|
|
}
|
|
|
|
func (p PeerService) GetPeerConfigQrCode(ctx context.Context, id domain.PeerIdentifier) (io.Reader, error) {
|
|
return p.configFile.GetPeerConfigQrCode(ctx, id)
|
|
}
|
|
|
|
func (p PeerService) SendPeerEmail(ctx context.Context, linkOnly bool, peers ...domain.PeerIdentifier) error {
|
|
return p.mailer.SendPeerEmail(ctx, linkOnly, peers...)
|
|
}
|
|
|
|
func (p PeerService) GetPeerStats(ctx context.Context, id domain.InterfaceIdentifier) ([]domain.PeerStatus, error) {
|
|
return p.peers.GetPeerStats(ctx, id)
|
|
}
|