Started adding commentation.

This commit is contained in:
moony 2022-01-15 23:28:04 -08:00
parent 9ec9201f28
commit adcb3fc5f4

View File

@ -17,9 +17,13 @@ import (
"github.com/nuttapp/pinghist/ping"
)
// Set the banner for advertisement
const BANNER = "ICAgKiAgICAgICAgICAgICAgICAgICgKICggIGAgICAgICAgICAgKCAgICggIClcICkgICAgICAgICAgICAgICkKIClcKSkoICAgICAoICAgKVwgIClcKCgpLyggICAgKSAgICAgICggLygKKChfKSgpXCAgICkpXCAoKF8pKChfKS8oXykpKCAvKCAgKCAgIClcKCkpCihfKCkoKF8pIC8oKF8pIF8gICBfIChfKSlffCkoXykpIClcIChfKSkvCnwgIFwvICB8KF8pKSggfCB8IHwgfHwgfF8gKChfKV8gKChfKXwgfF8KfCB8XC98IHx8IHx8IHx8IHwgfCB8fCBfX3wvIF9gIHwoXy08fCAgX3wKfF98ICB8X3wgXF8sX3x8X3wgfF98fF98ICBcX18sX3wvX18vIFxfX3wK"
// Set the Mullvad API URL
const URL = "https://api.mullvad.net/www/relays/all"
// Server struct
type Server struct {
List []float64
Last float64
@ -32,11 +36,13 @@ type Server struct {
Type string
}
// Variable server lists
var (
servers []*Server
active []*Server
)
// Type for server lists
type ByLast []*Server
// Length method
@ -48,11 +54,12 @@ func (a ByLast) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
// Less method
func (a ByLast) Less(i, j int) bool { return a[i].Last < a[j].Last }
// Ping method
// Ping server to determine latency
func (s *Server) Ping() (float64, error) {
// for i := 0; i < 3; i++ {
ct.ChangeColor(ct.Cyan, false, ct.None, false)
fmt.Println("[*] Testing server:", s.URL)
r, err := ping.Ping(s.URL)
if err != nil {
return 0, err
@ -64,39 +71,37 @@ func (s *Server) Ping() (float64, error) {
s.List = append(s.List, r.Time)
s.Last = r.Time
return s.Last, nil
}
// main function
func main() {
// Decode banner
banner, err := base64.RawStdEncoding.DecodeString(BANNER)
ct.ChangeColor(ct.Red, false, ct.None, false)
if err != nil {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Println(err)
} else {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Printf("%s\n", banner)
}
ct.ResetColor()
// Create prompt for VPN type
prompt := ui.Select{
Label: "Select Mullvad VPN type",
Items: []string{"WireGuard", "OpenVPN", "Cancel"},
}
_, promptResult, err := prompt.Run()
if err != nil {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Println("\n[!] User prompt failed", err)
return
} else if promptResult == "Cancel" {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Printf("[!] Server test canceled by user, exiting...\n")
os.Exit(0)
} else {
ct.ChangeColor(ct.Cyan, true, ct.None, false)
fmt.Printf("[*] You selected %q servers for testing\n\n", promptResult)
@ -105,30 +110,42 @@ func main() {
ct.ChangeColor(ct.Cyan, false, ct.None, false)
fmt.Println("[*] Retrieving list of Mullvad servers...")
// Make API call for server list
response, err := http.Get(URL)
if err != nil {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Println("[!] Request Error\n", err.Error())
}
// Wait until the response finished
defer response.Body.Close()
// Read the io return of the response
body, err := ioutil.ReadAll(response.Body)
if err != nil {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Println("[!] Error in response body\n", err.Error())
}
// Unmarshal the JSON body return
jsonErr := json.Unmarshal(body, &servers)
ct.ChangeColor(ct.Green, false, ct.None, false)
fmt.Printf("[*] There are %d total servers\n", len(servers))
if jsonErr != nil {
ct.ChangeColor(ct.Red, false, ct.None, false)
fmt.Println("[!] Json Error", jsonErr)
} else {
for i := range servers {
servers[i].URL = servers[i].Hostname + ".mullvad.net"
if servers[i].Type == strings.ToLower(promptResult) && servers[i].Active {
active = append(active, servers[i])
}
}
ct.ChangeColor(ct.Green, false, ct.None, false)
fmt.Printf("[*] Retrieved %d %s servers\n", len(servers), promptResult)
// Add the active servers to a list
for i := range servers {
servers[i].URL = servers[i].Hostname + ".mullvad.net"
if servers[i].Type == strings.ToLower(promptResult) && servers[i].Active {
active = append(active, servers[i])
}
}
ct.ChangeColor(ct.Green, false, ct.None, false)
fmt.Printf("[*] There are %d active servers\n\n", len(active))