mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Display firewall status
This commit is contained in:
parent
42ce7f4353
commit
a365c1df96
@ -1,58 +1,14 @@
|
|||||||
package security
|
package security
|
||||||
|
|
||||||
import (
|
import ()
|
||||||
"io/ioutil"
|
|
||||||
"os/exec"
|
|
||||||
"regexp"
|
|
||||||
//"runtime"
|
|
||||||
//"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
const fwGlobalState = "/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate"
|
|
||||||
const fwStealthMode = "/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode"
|
|
||||||
|
|
||||||
// https://github.com/yelinaung/wifi-name/blob/master/wifi-name.go
|
|
||||||
const osxCmd = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"
|
|
||||||
const osxArgs = "-I"
|
|
||||||
|
|
||||||
func Fetch() map[string]string {
|
func Fetch() map[string]string {
|
||||||
data := make(map[string]string)
|
data := make(map[string]string)
|
||||||
|
|
||||||
data["Wifi"] = WifiName()
|
data["Wifi Network"] = WifiName()
|
||||||
|
data["Wifi Encryption"] = WifiEncryption()
|
||||||
|
data["Firewall Enabled"] = FirewallState()
|
||||||
|
data["Firewall Stealth"] = FirewallStealthState()
|
||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
func WifiName() string {
|
|
||||||
cmd := exec.Command(osxCmd, osxArgs)
|
|
||||||
|
|
||||||
stdout, err := cmd.StdoutPipe()
|
|
||||||
panicIf(err)
|
|
||||||
|
|
||||||
// start the command after having set up the pipe
|
|
||||||
if err := cmd.Start(); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var str string
|
|
||||||
|
|
||||||
if b, err := ioutil.ReadAll(stdout); err == nil {
|
|
||||||
str += (string(b) + "\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
r := regexp.MustCompile(`s*SSID: (.+)s*`)
|
|
||||||
|
|
||||||
name := r.FindAllStringSubmatch(str, -1)
|
|
||||||
|
|
||||||
if len(name) <= 1 {
|
|
||||||
return ""
|
|
||||||
} else {
|
|
||||||
return name[1][1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func panicIf(err error) {
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
59
security/firewall.go
Normal file
59
security/firewall.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package security
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const osxFirewallCmd = "/usr/libexec/ApplicationFirewall/socketfilterfw"
|
||||||
|
|
||||||
|
func FirewallState() string {
|
||||||
|
cmd := exec.Command(osxFirewallCmd, "--getglobalstate")
|
||||||
|
|
||||||
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return firewallIcon("err")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return firewallIcon("err")
|
||||||
|
}
|
||||||
|
|
||||||
|
var str string
|
||||||
|
if b, err := ioutil.ReadAll(stdout); err == nil {
|
||||||
|
str += string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
return firewallIcon(str)
|
||||||
|
}
|
||||||
|
|
||||||
|
func FirewallStealthState() string {
|
||||||
|
cmd := exec.Command(osxFirewallCmd, "--getstealthmode")
|
||||||
|
|
||||||
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return firewallIcon("err")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return firewallIcon("err")
|
||||||
|
}
|
||||||
|
|
||||||
|
var str string
|
||||||
|
if b, err := ioutil.ReadAll(stdout); err == nil {
|
||||||
|
str += string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
return firewallIcon(str)
|
||||||
|
}
|
||||||
|
|
||||||
|
func firewallIcon(str string) string {
|
||||||
|
icon := "[red]off[white]"
|
||||||
|
|
||||||
|
if strings.Contains(str, "enabled") {
|
||||||
|
icon = "[green]on[white]"
|
||||||
|
}
|
||||||
|
|
||||||
|
return icon
|
||||||
|
}
|
@ -2,6 +2,7 @@ package security
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
@ -16,9 +17,9 @@ type Widget struct {
|
|||||||
func NewWidget() *Widget {
|
func NewWidget() *Widget {
|
||||||
widget := Widget{
|
widget := Widget{
|
||||||
BaseWidget: wtf.BaseWidget{
|
BaseWidget: wtf.BaseWidget{
|
||||||
Name: "Weather",
|
Name: "Security",
|
||||||
RefreshedAt: time.Now(),
|
RefreshedAt: time.Now(),
|
||||||
RefreshInterval: 5,
|
RefreshInterval: 300,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ func NewWidget() *Widget {
|
|||||||
func (widget *Widget) Refresh() {
|
func (widget *Widget) Refresh() {
|
||||||
data := Fetch()
|
data := Fetch()
|
||||||
|
|
||||||
widget.View.SetTitle(" 🐼 Security")
|
widget.View.SetTitle(" 🦂 Security ")
|
||||||
widget.RefreshedAt = time.Now()
|
widget.RefreshedAt = time.Now()
|
||||||
|
|
||||||
widget.View.Clear()
|
widget.View.Clear()
|
||||||
@ -56,8 +57,16 @@ func (widget *Widget) addView() {
|
|||||||
func (widget *Widget) contentFrom(data map[string]string) string {
|
func (widget *Widget) contentFrom(data map[string]string) string {
|
||||||
str := "\n"
|
str := "\n"
|
||||||
|
|
||||||
for key, val := range data {
|
// Sort the map keys in alphabetical order
|
||||||
str = str + fmt.Sprintf("%8s: %8s\n", key, val)
|
var keys []string
|
||||||
|
for key, _ := range data {
|
||||||
|
keys = append(keys, key)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
|
||||||
|
for _, key := range keys {
|
||||||
|
val := data[key]
|
||||||
|
str = str + fmt.Sprintf(" %16s: %s\n", key, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
return str
|
return str
|
||||||
|
71
security/wifi.go
Normal file
71
security/wifi.go
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package security
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os/exec"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
// https://github.com/yelinaung/wifi-name/blob/master/wifi-name.go
|
||||||
|
const osxWifiCmd = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"
|
||||||
|
|
||||||
|
/* -------------------- Exported Functions -------------------- */
|
||||||
|
|
||||||
|
func WifiEncryption() string {
|
||||||
|
cmd := exec.Command(osxWifiCmd, "-I")
|
||||||
|
|
||||||
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var str string
|
||||||
|
if b, err := ioutil.ReadAll(stdout); err == nil {
|
||||||
|
str += (string(b) + "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
name := findMatch(`s*auth: (.+)s*`, str)
|
||||||
|
return matchStr(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func WifiName() string {
|
||||||
|
cmd := exec.Command(osxWifiCmd, "-I")
|
||||||
|
|
||||||
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var str string
|
||||||
|
if b, err := ioutil.ReadAll(stdout); err == nil {
|
||||||
|
str += (string(b) + "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
name := findMatch(`s*SSID: (.+)s*`, str)
|
||||||
|
return matchStr(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------- Unexported Functions -------------------- */
|
||||||
|
|
||||||
|
func findMatch(pattern string, data string) [][]string {
|
||||||
|
r := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
|
name := r.FindAllStringSubmatch(data, -1)
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
|
||||||
|
func matchStr(data [][]string) string {
|
||||||
|
if len(data) <= 1 {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return data[1][1]
|
||||||
|
}
|
||||||
|
}
|
@ -68,7 +68,7 @@ func (widget *Widget) contentFrom(data *owm.CurrentWeatherData) string {
|
|||||||
|
|
||||||
str = str + strings.Join(descs, ",") + "\n\n"
|
str = str + strings.Join(descs, ",") + "\n\n"
|
||||||
|
|
||||||
str = str + fmt.Sprintf("%10s: %4.1f° C\n\n", "Current", data.Main.Temp)
|
str = str + fmt.Sprintf("%10s: %4.1f° C\n", "Current", data.Main.Temp)
|
||||||
str = str + fmt.Sprintf("%10s: %4.1f° C\n", "High", data.Main.TempMax)
|
str = str + fmt.Sprintf("%10s: %4.1f° C\n", "High", data.Main.TempMax)
|
||||||
str = str + fmt.Sprintf("%10s: %4.1f° C\n", "Low", data.Main.TempMin)
|
str = str + fmt.Sprintf("%10s: %4.1f° C\n", "Low", data.Main.TempMin)
|
||||||
str = str + "\n\n\n\n"
|
str = str + "\n\n\n\n"
|
||||||
@ -88,7 +88,7 @@ func icon(data *owm.CurrentWeatherData) string {
|
|||||||
case "clear":
|
case "clear":
|
||||||
icon = "☀️"
|
icon = "☀️"
|
||||||
case "clear sky":
|
case "clear sky":
|
||||||
icon = "☀️"
|
icon = "☀️ "
|
||||||
case "cloudy":
|
case "cloudy":
|
||||||
icon = "⛅️"
|
icon = "⛅️"
|
||||||
case "few clouds":
|
case "few clouds":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user