bettercap/network/aliases.go

85 lines
1.3 KiB
Go

package network
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
"sync"
"github.com/bettercap/bettercap/core"
)
var fileName, _ = core.ExpandPath("~/bettercap.aliases")
type Aliases struct {
sync.Mutex
data map[string]string
}
func LoadAliases() (err error, aliases *Aliases) {
aliases = &Aliases{
data: make(map[string]string),
}
if core.Exists(fileName) {
var file *os.File
file, err = os.Open(fileName)
if err != nil {
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
parts := strings.SplitN(line, " ", 2)
mac := core.Trim(parts[0])
alias := core.Trim(parts[1])
aliases.data[mac] = alias
}
}
return
}
func (a *Aliases) saveUnlocked() error {
data := ""
for mac, alias := range a.data {
data += fmt.Sprintf("%s %s\n", mac, alias)
}
return ioutil.WriteFile(fileName, []byte(data), 0644)
}
func (a *Aliases) Save() error {
a.Lock()
defer a.Unlock()
return a.saveUnlocked()
}
func (a *Aliases) Get(mac string) string {
a.Lock()
defer a.Unlock()
if alias, found := a.data[mac]; found == true {
return alias
}
return ""
}
func (a *Aliases) Set(mac, alias string) error {
a.Lock()
defer a.Unlock()
if alias != "" {
a.data[mac] = alias
} else {
delete(a.data, mac)
}
return a.saveUnlocked()
}