Skip to content

Commit

Permalink
Merge pull request #183 from mobad/master
Browse files Browse the repository at this point in the history
Add PIA Wireguard support
  • Loading branch information
jamesmcm authored Aug 21, 2022
2 parents fa31353 + ea6ded8 commit a5baaa2
Show file tree
Hide file tree
Showing 11 changed files with 381 additions and 15 deletions.
1 change: 1 addition & 0 deletions vopono_core/src/config/providers/azirevpn/wireguard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ impl WireguardProvider for AzireVPN {
public_key: wg_peer.public_key.clone(),
allowed_ips: allowed_ips.clone(),
endpoint: wg_peer.endpoint,
keepalive: None,
};

let wireguard_conf = WireguardConfig {
Expand Down
1 change: 1 addition & 0 deletions vopono_core/src/config/providers/ivpn/wireguard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ impl WireguardProvider for IVPN {
public_key: relay.pubkey.clone(),
allowed_ips: allowed_ips.clone(),
endpoint: SocketAddr::new(relay.ip, port),
keepalive: None,
};

let wireguard_conf = WireguardConfig {
Expand Down
7 changes: 6 additions & 1 deletion vopono_core/src/config/providers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ use crate::config::vpn::Protocol;
use crate::util::vopono_dir;
use anyhow::anyhow;
use serde::{Deserialize, Serialize};
use std::net::IpAddr;
use std::path::PathBuf;
use std::{net::IpAddr, path::Path};
use strum_macros::{Display, EnumIter};

// Command-line arguments use VpnProvider enum
Expand Down Expand Up @@ -78,6 +78,7 @@ impl VpnProvider {

pub fn get_dyn_wireguard_provider(&self) -> anyhow::Result<Box<dyn WireguardProvider>> {
match self {
Self::PrivateInternetAccess => Ok(Box::new(pia::PrivateInternetAccess {})),
Self::Mullvad => Ok(Box::new(mullvad::Mullvad {})),
Self::MozillaVPN => Ok(Box::new(mozilla::MozillaVPN {})),
Self::AzireVPN => Ok(Box::new(azirevpn::AzireVPN {})),
Expand Down Expand Up @@ -115,6 +116,10 @@ pub trait WireguardProvider: Provider {
fn wireguard_dir(&self) -> anyhow::Result<PathBuf> {
Ok(self.provider_dir()?.join("wireguard"))
}

fn wireguard_preup(&self, _config_file: &Path) -> anyhow::Result<()> {
Ok(())
}
}

/// This trait is implemented if the VPN provider has OpenVPN support
Expand Down
1 change: 1 addition & 0 deletions vopono_core/src/config/providers/mozilla/wireguard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ impl WireguardProvider for MozillaVPN {
public_key: relay.pubkey.clone(),
allowed_ips: allowed_ips.clone(),
endpoint: SocketAddr::new(IpAddr::from(relay.ipv4_addr_in), port),
keepalive: None,
};

let wireguard_conf = WireguardConfig {
Expand Down
1 change: 1 addition & 0 deletions vopono_core/src/config/providers/mullvad/wireguard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ impl WireguardProvider for Mullvad {
public_key: relay.pubkey.clone(),
allowed_ips: allowed_ips.clone(),
endpoint: SocketAddr::new(IpAddr::from(relay.ipv4_addr_in), port),
keepalive: None,
};

let wireguard_conf = WireguardConfig {
Expand Down
43 changes: 43 additions & 0 deletions vopono_core/src/config/providers/pia/ca.rsa.4096.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
-----BEGIN CERTIFICATE-----
MIIHqzCCBZOgAwIBAgIJAJ0u+vODZJntMA0GCSqGSIb3DQEBDQUAMIHoMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNV
BAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIElu
dGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3Mx
IDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkB
FiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTAeFw0xNDA0MTcxNzQw
MzNaFw0zNDA0MTIxNzQwMzNaMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0Ex
EzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQg
QWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UE
AxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50
ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVy
bmV0YWNjZXNzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVk
hjumaqBbL8aSgj6xbX1QPTfTd1qHsAZd2B97m8Vw31c/2yQgZNf5qZY0+jOIHULN
De4R9TIvyBEbvnAg/OkPw8n/+ScgYOeH876VUXzjLDBnDb8DLr/+w9oVsuDeFJ9K
V2UFM1OYX0SnkHnrYAN2QLF98ESK4NCSU01h5zkcgmQ+qKSfA9Ny0/UpsKPBFqsQ
25NvjDWFhCpeqCHKUJ4Be27CDbSl7lAkBuHMPHJs8f8xPgAbHRXZOxVCpayZ2SND
fCwsnGWpWFoMGvdMbygngCn6jA/W1VSFOlRlfLuuGe7QFfDwA0jaLCxuWt/BgZyl
p7tAzYKR8lnWmtUCPm4+BtjyVDYtDCiGBD9Z4P13RFWvJHw5aapx/5W/CuvVyI7p
Kwvc2IT+KPxCUhH1XI8ca5RN3C9NoPJJf6qpg4g0rJH3aaWkoMRrYvQ+5PXXYUzj
tRHImghRGd/ydERYoAZXuGSbPkm9Y/p2X8unLcW+F0xpJD98+ZI+tzSsI99Zs5wi
jSUGYr9/j18KHFTMQ8n+1jauc5bCCegN27dPeKXNSZ5riXFL2XX6BkY68y58UaNz
meGMiUL9BOV1iV+PMb7B7PYs7oFLjAhh0EdyvfHkrh/ZV9BEhtFa7yXp8XR0J6vz
1YV9R6DYJmLjOEbhU8N0gc3tZm4Qz39lIIG6w3FDAgMBAAGjggFUMIIBUDAdBgNV
HQ4EFgQUrsRtyWJftjpdRM0+925Y6Cl08SUwggEfBgNVHSMEggEWMIIBEoAUrsRt
yWJftjpdRM0+925Y6Cl08SWhge6kgeswgegxCzAJBgNVBAYTAlVTMQswCQYDVQQI
EwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRl
cm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAw
HgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0
ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRl
aW50ZXJuZXRhY2Nlc3MuY29tggkAnS7684Nkme0wDAYDVR0TBAUwAwEB/zANBgkq
hkiG9w0BAQ0FAAOCAgEAJsfhsPk3r8kLXLxY+v+vHzbr4ufNtqnL9/1Uuf8NrsCt
pXAoyZ0YqfbkWx3NHTZ7OE9ZRhdMP/RqHQE1p4N4Sa1nZKhTKasV6KhHDqSCt/dv
Em89xWm2MVA7nyzQxVlHa9AkcBaemcXEiyT19XdpiXOP4Vhs+J1R5m8zQOxZlV1G
tF9vsXmJqWZpOVPmZ8f35BCsYPvv4yMewnrtAC8PFEK/bOPeYcKN50bol22QYaZu
LfpkHfNiFTnfMh8sl/ablPyNY7DUNiP5DRcMdIwmfGQxR5WEQoHL3yPJ42LkB5zs
6jIm26DGNXfwura/mi105+ENH1CaROtRYwkiHb08U6qLXXJz80mWJkT90nr8Asj3
5xN2cUppg74nG3YVav/38P48T56hG1NHbYF5uOCske19F6wi9maUoto/3vEr0rnX
JUp2KODmKdvBI7co245lHBABWikk8VfejQSlCtDBXn644ZMtAdoxKNfR2WTFVEwJ
iyd1Fzx0yujuiXDROLhISLQDRjVVAvawrAtLZWYK31bY7KlezPlQnl/D9Asxe85l
8jO5+0LdJ6VyOs/Hd4w52alDW/MFySDZSfQHMTIc30hLBJ8OnCEIvluVQQ2UQvoW
+no177N9L2Y+M9TcTA62ZyMXShHQGeh20rb4kK8f+iFX8NxtdHVSkxMEFSfDDyQ=
-----END CERTIFICATE-----
20 changes: 19 additions & 1 deletion vopono_core/src/config/providers/pia/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
mod openvpn;
mod wireguard;

use super::{ConfigurationChoice, OpenVpnProvider, Provider};
use super::{
ConfigurationChoice, Input, OpenVpnProvider, Password, Provider, UiClient, WireguardProvider,
};
use crate::config::vpn::Protocol;

pub struct PrivateInternetAccess {}
Expand All @@ -14,3 +17,18 @@ impl Provider for PrivateInternetAccess {
Protocol::OpenVpn
}
}

impl PrivateInternetAccess {
fn prompt_for_auth(&self, uiclient: &dyn UiClient) -> anyhow::Result<(String, String)> {
let username = uiclient.get_input(Input {
prompt: "PrivateInternetAccess username".to_string(),
validator: None,
})?;
let password = uiclient.get_password(Password {
prompt: "Password".to_string(),
confirm: true,
})?;

Ok((username, password))
}
}
17 changes: 4 additions & 13 deletions vopono_core/src/config/providers/pia/openvpn.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use super::PrivateInternetAccess;
use super::{ConfigurationChoice, OpenVpnProvider};
use crate::config::providers::{Input, Password, UiClient};
use crate::config::providers::UiClient;
use crate::util::delete_all_files_in_dir;
use log::debug;
use reqwest::Url;
Expand All @@ -23,16 +23,7 @@ impl OpenVpnProvider for PrivateInternetAccess {
}

fn prompt_for_auth(&self, uiclient: &dyn UiClient) -> anyhow::Result<(String, String)> {
let username = uiclient.get_input(Input {
prompt: "PrivateInternetAccess username".to_string(),
validator: None,
})?;
let password = uiclient.get_password(Password {
prompt: "Password".to_string(),
confirm: true,
})?;

Ok((username, password))
self.prompt_for_auth(uiclient)
}

fn auth_file_path(&self) -> anyhow::Result<Option<PathBuf>> {
Expand Down Expand Up @@ -93,8 +84,8 @@ impl OpenVpnProvider for PrivateInternetAccess {
// Write OpenVPN credentials file
let (user, pass) = self.prompt_for_auth(uiclient)?;
let auth_file = self.auth_file_path()?;
if auth_file.is_some() {
let mut outfile = File::create(auth_file.unwrap())?;
if let Some(auth_file) = auth_file {
let mut outfile = File::create(auth_file)?;
write!(outfile, "{}\n{}", user, pass)?;
}
Ok(())
Expand Down
Loading

0 comments on commit a5baaa2

Please sign in to comment.