This commit is contained in:
Xavier Henner 2019-07-30 16:34:12 +02:00
parent 0e72c3a242
commit 65496cbce9
No known key found for this signature in database
GPG Key ID: 142AC8F4F185F79A
4 changed files with 99 additions and 20 deletions

View File

@ -12,7 +12,6 @@ import (
"log" "log"
"net/http" "net/http"
"os" "os"
"strings"
) )
type jsonInput struct { type jsonInput struct {
@ -79,16 +78,17 @@ func (h *HttpServer) helpHandler(w http.ResponseWriter, r *http.Request) {
} }
func (h *HttpServer) ajaxHandler(w http.ResponseWriter, r *http.Request) { func (h *HttpServer) ajaxHandler(w http.ResponseWriter, r *http.Request) {
var sslUsage = []x509.ExtKeyUsage{x509.ExtKeyUsageAny} //var sslUsage = []x509.ExtKeyUsage{x509.ExtKeyUsageAny}
w.Header().Set("Content-type", "application/json") w.Header().Set("Content-type", "application/json")
// deactivate if there is no https auth // deactivate if there is no https auth
/*
if h.key == "" || h.cert == "" || h.certPool == nil { if h.key == "" || h.cert == "" || h.certPool == nil {
http.Error(w, "No security, deactivated", 403) http.Error(w, "No security, deactivated", 403)
return return
} }
*/
// add CORS headers // add CORS headers
w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin")) w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin"))
w.Header().Set("Access-Control-Allow-Methods", "POST") w.Header().Set("Access-Control-Allow-Methods", "POST")
@ -107,6 +107,7 @@ func (h *HttpServer) ajaxHandler(w http.ResponseWriter, r *http.Request) {
} }
// ssl auth // ssl auth
/*
if len(r.TLS.PeerCertificates) == 0 { if len(r.TLS.PeerCertificates) == 0 {
log.Println(len(r.TLS.PeerCertificates)) log.Println(len(r.TLS.PeerCertificates))
http.Error(w, "Need certificate", 403) http.Error(w, "Need certificate", 403)
@ -119,9 +120,11 @@ func (h *HttpServer) ajaxHandler(w http.ResponseWriter, r *http.Request) {
} }
webuser := strings.Replace(r.TLS.PeerCertificates[0].Subject.CommonName, " ", "", -1) webuser := strings.Replace(r.TLS.PeerCertificates[0].Subject.CommonName, " ", "", -1)
*/
//TODO security //TODO security
webuser := "xavier"
log.Printf("%s is connected via the web interfaces\n", webuser) log.Printf("%s is connected via the web interfaces\n", webuser)
req, err := parseJsonQuery(r) req, err := parseJsonQuery(r)

View File

@ -47,6 +47,8 @@ func main() {
server.debug = true server.debug = true
} }
log.Println(getServerList("https://www.expressvpn.com/vpn-server"))
// time to start the listeners // time to start the listeners
go server.Run() go server.Run()
NewHTTPServer( NewHTTPServer(

71
vpnlist.go Normal file
View File

@ -0,0 +1,71 @@
package main
// get https://www.expressvpn.com/vpn-server
// remove everyting starting with >
// remove until "Not supported" and after What the green checks mean
import (
"bufio"
"fmt"
"net"
"net/http"
"strings"
"time"
)
func getServerList(url string) []string {
ret := []string{}
// Create HTTP client with timeout
client := &http.Client{
Timeout: 30 * time.Second,
}
// Make request
response, err := client.Get(url)
if err != nil {
fmt.Println(err)
return nil
}
defer response.Body.Close()
buf := bufio.NewReader(bufio.NewReader(response.Body))
start := false
for {
line, err := buf.ReadString('\n')
if err != nil {
break
}
line = strings.Trim(line, "\n\r ")
if strings.HasPrefix(line, "<") {
continue
}
if line == "Not supported" {
start = true
continue
}
if line == "What the green checks mean" {
start = false
}
if !start {
continue
}
if line == "" {
continue
}
// france-paris-1-ca-version-2.expressnetw.com
line = strings.ToLower(line)
line = strings.ReplaceAll(line, " &amp; ", "")
line = strings.ReplaceAll(line, " ", "")
name := fmt.Sprintf("%s-ca-version-2.expressnetw.com", line)
fmt.Println(name)
if _, err := net.ResolveIPAddr("ip4", name); err == nil {
ret = append(ret, name)
}
}
return ret
}

View File

@ -186,7 +186,10 @@ func (s *OpenVpnMgt) handleConn(conn net.Conn) {
switch { switch {
// command successfull, we can ignore // command successfull, we can ignore
case strings.HasPrefix(line, ">SUCCESS: client-deny command succeeded"): case strings.HasPrefix(line, ">SUCCESS: client-deny command succeeded"):
case strings.HasPrefix(line, ">HOLD"):
s.sendCommand([]string{"hold release"}, remote)
case strings.HasPrefix(line, ">REMOTE"):
s.sendCommand([]string{"remote ACCEPT"}, remote)
default: default:
response = append(response, line) response = append(response, line)
} }