mirror of
https://github.com/syncthing/syncthing.git
synced 2024-11-17 10:58:49 -07:00
c5e0c47989
This adds a new config AllowedNetworks per device, which when set should contain a list of network prefixes (192.168.0.0/126 etc) that are allowed for the given device. The connection service will not attempt connections to addresses outside of the given networks and incoming connections will be rejected as well. I've added the config to the normal device editor and shown it (when set) in the device summary on the main screen. There's a unit test for the IsAllowedNetwork method, I've done some manual sanity testing on top of that. GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4073
64 lines
2.2 KiB
Go
64 lines
2.2 KiB
Go
// Copyright (C) 2014 The Syncthing Authors.
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
package config
|
|
|
|
import "github.com/syncthing/syncthing/lib/protocol"
|
|
|
|
type DeviceConfiguration struct {
|
|
DeviceID protocol.DeviceID `xml:"id,attr" json:"deviceID"`
|
|
Name string `xml:"name,attr,omitempty" json:"name"`
|
|
Addresses []string `xml:"address,omitempty" json:"addresses"`
|
|
Compression protocol.Compression `xml:"compression,attr" json:"compression"`
|
|
CertName string `xml:"certName,attr,omitempty" json:"certName"`
|
|
Introducer bool `xml:"introducer,attr" json:"introducer"`
|
|
SkipIntroductionRemovals bool `xml:"skipIntroductionRemovals,attr" json:"skipIntroductionRemovals"`
|
|
IntroducedBy protocol.DeviceID `xml:"introducedBy,attr" json:"introducedBy"`
|
|
Paused bool `xml:"paused" json:"paused"`
|
|
AllowedNetworks []string `xml:"allowedNetwork,omitempty" json:"allowedNetworks"`
|
|
}
|
|
|
|
func NewDeviceConfiguration(id protocol.DeviceID, name string) DeviceConfiguration {
|
|
d := DeviceConfiguration{
|
|
DeviceID: id,
|
|
Name: name,
|
|
}
|
|
d.prepare()
|
|
return d
|
|
}
|
|
|
|
func (cfg DeviceConfiguration) Copy() DeviceConfiguration {
|
|
c := cfg
|
|
c.Addresses = make([]string, len(cfg.Addresses))
|
|
copy(c.Addresses, cfg.Addresses)
|
|
c.AllowedNetworks = make([]string, len(cfg.AllowedNetworks))
|
|
copy(c.AllowedNetworks, cfg.AllowedNetworks)
|
|
return c
|
|
}
|
|
|
|
func (cfg *DeviceConfiguration) prepare() {
|
|
if len(cfg.Addresses) == 0 || len(cfg.Addresses) == 1 && cfg.Addresses[0] == "" {
|
|
cfg.Addresses = []string{"dynamic"}
|
|
}
|
|
if len(cfg.AllowedNetworks) == 0 {
|
|
cfg.AllowedNetworks = []string{}
|
|
}
|
|
}
|
|
|
|
type DeviceConfigurationList []DeviceConfiguration
|
|
|
|
func (l DeviceConfigurationList) Less(a, b int) bool {
|
|
return l[a].DeviceID.Compare(l[b].DeviceID) == -1
|
|
}
|
|
|
|
func (l DeviceConfigurationList) Swap(a, b int) {
|
|
l[a], l[b] = l[b], l[a]
|
|
}
|
|
|
|
func (l DeviceConfigurationList) Len() int {
|
|
return len(l)
|
|
}
|