class WireGuard::Admin::Repository
The place where networks, clients and servers can be found and are persisted
Attributes
path[R]
Public Class Methods
new(path)
click to toggle source
# File lib/wire_guard/admin/repository.rb, line 58 def initialize(path) @path = path @backend = PStore.new(@path) end
Public Instance Methods
add_network(network)
click to toggle source
Add a new network
# File lib/wire_guard/admin/repository.rb, line 106 def add_network(network) raise ArgumentError, 'network must be an IP address range' unless network.is_a?(IPAddr) @backend.transaction do raise NetworkAlreadyExists, network if @backend.root?(network) @backend[network] = [] end end
add_peer(network, peer)
click to toggle source
Add a peer to the given network
# File lib/wire_guard/admin/repository.rb, line 132 def add_peer(network, peer) raise PeerAlreadyExists.new(peer, network) if find_peer(network, peer.name) @backend.transaction do raise UnknownNetwork, network unless @backend.root?(network) @backend[network] << peer end end
clients(network)
click to toggle source
# File lib/wire_guard/admin/repository.rb, line 176 def clients(network) peers(network).select { |p| p.is_a?(Client) } end
delete_network(network)
click to toggle source
Delete an existing network
# File lib/wire_guard/admin/repository.rb, line 119 def delete_network(network) raise ArgumentError, 'network must be an IP address range' unless network.is_a?(IPAddr) @backend.transaction do raise UnknownNetwork, network unless @backend.root?(network) @backend.delete(network) end end
find_network(network)
click to toggle source
Find a network within all known ones
# File lib/wire_guard/admin/repository.rb, line 75 def find_network(network) raise ArgumentError, 'network must be an IP address range' unless network.is_a?(IPAddr) networks.select { |n| n == network }.first end
find_peer(network, name)
click to toggle source
Find a peer by name within the given network
# File lib/wire_guard/admin/repository.rb, line 84 def find_peer(network, name) raise ArgumentError, 'network must be an IP address range' unless network.is_a?(IPAddr) peers(network).select { |p| p.name == name }.first end
networks()
click to toggle source
Get all networks
# File lib/wire_guard/admin/repository.rb, line 66 def networks @backend.transaction do @backend.roots end end
next_address(network)
click to toggle source
Find the next address within the given network that is not assigned to a peer
# File lib/wire_guard/admin/repository.rb, line 164 def next_address(network) raise ArgumentError, 'network must be an IP address range' unless network.is_a?(IPAddr) peers(network).inject(network.succ) do |candidate, peer| candidate == peer.ip ? candidate.succ : peer.ip end end
peers(network)
click to toggle source
Get all peers of the given network
# File lib/wire_guard/admin/repository.rb, line 93 def peers(network) raise ArgumentError, 'network must be an IP address range' unless network.is_a?(IPAddr) @backend.transaction do raise UnknownNetwork, network unless @backend.root?(network) @backend[network] end end
remove_peer(network, peer_or_name)
click to toggle source
Remove a peer from the given network
# File lib/wire_guard/admin/repository.rb, line 145 def remove_peer(network, peer_or_name) name = if peer_or_name.respond_to?(:name) peer_or_name.name else peer_or_name end raise UnknownPeer.new(name, network) unless find_peer(network, name) @backend.transaction do raise UnknownNetwork, network unless @backend.root?(network) @backend[network].delete(name) end end
servers(network)
click to toggle source
# File lib/wire_guard/admin/repository.rb, line 172 def servers(network) peers(network).select { |p| p.is_a?(Server) } end