handle last peer error case [CI SKIP]

This commit is contained in:
shimunn 2019-04-03 14:07:28 +02:00
parent 88b68a1de9
commit 6a13b27c19
2 changed files with 18 additions and 4 deletions

View File

@ -33,9 +33,11 @@ impl WireguardController for Userspace {
let value_as_num = || parse_err(value.parse::<u64>()); let value_as_num = || parse_err(value.parse::<u64>());
let mut peer: Option<Peer> = None; let mut peer: Option<Peer> = None;
let build_peer = |peer: &mut Option<Peer>, builder: &mut PeerBuilder| -> Result<()> { let build_peer = |peer: &mut Option<Peer>, builder: &mut PeerBuilder| -> Result<()> {
let built: Result<Peer> = parse_err(builder.build()); if builder.has_key() {
*peer = Some(built?); let built: Result<Peer> = parse_err(builder.build());
*builder = PeerBuilder::default(); *peer = Some(built?);
*builder = PeerBuilder::default();
}
Ok(()) Ok(())
}; };
let mut add_key = |peer: &mut Option<Peer>, key: ECCKey| -> Result<()> { let mut add_key = |peer: &mut Option<Peer>, key: ECCKey| -> Result<()> {
@ -50,7 +52,15 @@ impl WireguardController for Userspace {
match key.as_ref() { match key.as_ref() {
"" => { "" => {
//Empty line means end of data //Empty line means end of data
build_peer(&mut peer, builder); //TODO: handle possible actual error case build_peer(&mut peer, builder).map_err(|err| {
Error::new(
ErrorKind::InvalidData,
format!(
"Protocol error, wireguard supplied insufficent data: {}",
err
),
)
})?; //TODO: handle possible actual error case
} }
"public_key" => { "public_key" => {
add_key(&mut peer, parse_err(ECCKey::from_hex(value))?)?; add_key(&mut peer, parse_err(ECCKey::from_hex(value))?)?;

View File

@ -194,6 +194,10 @@ impl PeerBuilder {
self.validate().is_ok() self.validate().is_ok()
} }
pub fn has_key(&self) -> bool {
self.key.is_some()
}
pub fn add_allowed_ip(&mut self, ip: (IpAddr, u8)) { pub fn add_allowed_ip(&mut self, ip: (IpAddr, u8)) {
if let Some(ref mut ips) = &mut self.allowed_ips { if let Some(ref mut ips) = &mut self.allowed_ips {
ips.push(ip); ips.push(ip);