feat: add VPNsecure.me support (#848)

- `OPENVPN_ENCRYPTED_KEY` environment variable 
- `OPENVPN_ENCRYPTED_KEY_SECRETFILE` environment variable 
- `OPENVPN_KEY_PASSPHRASE` environment variable 
- `OPENVPN_KEY_PASSPHRASE_SECRETFILE` environment variable 
- `PREMIUM_ONLY` environment variable
- OpenVPN user and password not required for vpnsecure provider
This commit is contained in:
Quentin McGaw
2022-08-15 19:54:58 -04:00
committed by GitHub
parent 991cfb8659
commit a182e3503b
41 changed files with 9369 additions and 176 deletions

View File

@@ -13,7 +13,8 @@ import (
func fetchServers(ctx context.Context, client *http.Client) (
hostToData map[string]serverData, err error) {
rootNode, err := fetchHTML(ctx, client)
const url = "https://www.slickvpn.com/locations/"
rootNode, err := htmlutils.Fetch(ctx, client, url)
if err != nil {
return nil, fmt.Errorf("fetching HTML code: %w", err)
}
@@ -26,39 +27,6 @@ func fetchServers(ctx context.Context, client *http.Client) (
return hostToData, nil
}
var ErrHTTPStatusCode = errors.New("HTTP status code is not OK")
func fetchHTML(ctx context.Context, client *http.Client) (rootNode *html.Node, err error) {
const url = "https://www.slickvpn.com/locations/"
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil {
return nil, err
}
response, err := client.Do(request)
if err != nil {
return nil, err
}
if response.StatusCode != http.StatusOK {
return nil, fmt.Errorf("%w: %d %s",
ErrHTTPStatusCode, response.StatusCode, response.Status)
}
rootNode, err = html.Parse(response.Body)
if err != nil {
_ = response.Body.Close()
return nil, fmt.Errorf("parsing HTML code: %w", err)
}
err = response.Body.Close()
if err != nil {
return nil, fmt.Errorf("closing response body: %w", err)
}
return rootNode, nil
}
type serverData struct {
ovpnURL string
country string