mirror of
https://github.com/h44z/wg-portal
synced 2025-06-26 18:16:21 +00:00
Add the ability to create multiple peers per user
This commit is contained in:
parent
38310d6ff2
commit
0db15e7bc2
@ -2,9 +2,10 @@ package wireguard
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/h44z/wg-portal/internal/app"
|
||||
"github.com/sirupsen/logrus"
|
||||
"time"
|
||||
|
||||
evbus "github.com/vardius/message-bus"
|
||||
|
||||
@ -46,7 +47,7 @@ func (m Manager) connectToMessageBus() {
|
||||
func (m Manager) handleUserCreationEvent(user *domain.User) {
|
||||
logrus.Errorf("handling new user event for %s", user.Identifier)
|
||||
|
||||
if m.cfg.Core.CreateDefaultPeer {
|
||||
if m.cfg.Core.CreateDefaultPeer && m.cfg.Core.DefaultPeersPerUser > 0 {
|
||||
ctx := domain.SetUserInfo(context.Background(), domain.SystemAdminContextUserInfo())
|
||||
err := m.CreateDefaultPeer(ctx, user)
|
||||
if err != nil {
|
||||
|
@ -4,11 +4,12 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/h44z/wg-portal/internal"
|
||||
"github.com/h44z/wg-portal/internal/app"
|
||||
"github.com/h44z/wg-portal/internal/domain"
|
||||
"github.com/sirupsen/logrus"
|
||||
"time"
|
||||
)
|
||||
|
||||
func (m Manager) CreateDefaultPeer(ctx context.Context, user *domain.User) error {
|
||||
@ -21,33 +22,37 @@ func (m Manager) CreateDefaultPeer(ctx context.Context, user *domain.User) error
|
||||
return fmt.Errorf("failed to fetch all interfaces: %w", err)
|
||||
}
|
||||
|
||||
var newPeers []domain.Peer
|
||||
numPeers := 0
|
||||
for _, iface := range existingInterfaces {
|
||||
if iface.Type != domain.InterfaceTypeServer {
|
||||
continue // only create default peers for server interfaces
|
||||
}
|
||||
|
||||
peer, err := m.PreparePeer(ctx, iface.Identifier)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create default peer for interface %s: %w", iface.Identifier, err)
|
||||
}
|
||||
for i := 0; i < m.cfg.Core.DefaultPeersPerUser; i++ {
|
||||
peer, err := m.PreparePeer(ctx, iface.Identifier)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create default peer for interface %s: %w", iface.Identifier, err)
|
||||
}
|
||||
|
||||
peer.UserIdentifier = user.Identifier
|
||||
peer.DisplayName = fmt.Sprintf("Default Peer %s", internal.TruncateString(string(peer.Identifier), 8))
|
||||
peer.Notes = fmt.Sprintf("Default peer created for user %s", user.Identifier)
|
||||
peer.UserIdentifier = user.Identifier
|
||||
if i < len(m.cfg.Core.DefaultPeerNames) {
|
||||
peer.DisplayName = string(user.Identifier) + " " + m.cfg.Core.DefaultPeerNames[i]
|
||||
} else {
|
||||
peer.DisplayName = fmt.Sprintf("Default Peer %s", internal.TruncateString(string(peer.Identifier), 8))
|
||||
}
|
||||
peer.Notes = fmt.Sprintf("Default peer created for user %s", user.Identifier)
|
||||
|
||||
newPeers = append(newPeers, *peer)
|
||||
}
|
||||
|
||||
for i, peer := range newPeers {
|
||||
_, err := m.CreatePeer(ctx, &newPeers[i])
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create default peer %s on interface %s: %w",
|
||||
peer.Identifier, peer.InterfaceIdentifier, err)
|
||||
_, err = m.CreatePeer(ctx, peer)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create default peer %s on interface %s: %w",
|
||||
peer.Identifier, peer.InterfaceIdentifier, err)
|
||||
} else {
|
||||
numPeers++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logrus.Infof("created %d default peers for user %s", len(newPeers), user.Identifier)
|
||||
logrus.Infof("created %d default peers for user %s", numPeers, user.Identifier)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -2,10 +2,11 @@ package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/sirupsen/logrus"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
@ -15,11 +16,13 @@ type Config struct {
|
||||
AdminUser string `yaml:"admin_user"`
|
||||
AdminPassword string `yaml:"admin_password"`
|
||||
|
||||
EditableKeys bool `yaml:"editable_keys"`
|
||||
CreateDefaultPeer bool `yaml:"create_default_peer"`
|
||||
SelfProvisioningAllowed bool `yaml:"self_provisioning_allowed"`
|
||||
ImportExisting bool `yaml:"import_existing"`
|
||||
RestoreState bool `yaml:"restore_state"`
|
||||
EditableKeys bool `yaml:"editable_keys"`
|
||||
CreateDefaultPeer bool `yaml:"create_default_peer"`
|
||||
DefaultPeersPerUser int `yaml:"default_peers_per_user"`
|
||||
DefaultPeerNames []string `yaml:"default_peer_names"`
|
||||
SelfProvisioningAllowed bool `yaml:"self_provisioning_allowed"`
|
||||
ImportExisting bool `yaml:"import_existing"`
|
||||
RestoreState bool `yaml:"restore_state"`
|
||||
} `yaml:"core"`
|
||||
|
||||
Advanced struct {
|
||||
@ -85,6 +88,8 @@ func defaultConfig() *Config {
|
||||
cfg.Core.ImportExisting = true
|
||||
cfg.Core.RestoreState = true
|
||||
|
||||
cfg.Core.DefaultPeersPerUser = 1
|
||||
|
||||
cfg.Database = DatabaseConfig{
|
||||
Type: "sqlite",
|
||||
DSN: "data/sqlite.db",
|
||||
|
Loading…
Reference in New Issue
Block a user