82 lines
1.3 KiB
Go
82 lines
1.3 KiB
Go
package gluanetrc
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/dickeyxxx/netrc"
|
|
lua "github.com/yuin/gopher-lua"
|
|
luar "layeh.com/gopher-luar"
|
|
)
|
|
|
|
var n *netrc.Netrc
|
|
|
|
func init() {
|
|
var err error
|
|
|
|
fname := filepath.Join(os.Getenv("HOME"), ".netrc")
|
|
|
|
fout, err := os.Create(fname)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fout.Close()
|
|
|
|
n, err = netrc.Parse(filepath.Join(fname))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
var exports = map[string]lua.LGFunction{
|
|
"machine": machine,
|
|
"save": save,
|
|
"remove_machine": removeMachine,
|
|
"add_machine": addMachine,
|
|
}
|
|
|
|
func addMachine(L *lua.LState) int {
|
|
name := L.ToString(1)
|
|
login := L.ToString(2)
|
|
password := L.ToString(3)
|
|
|
|
n.AddMachine(name, login, password)
|
|
|
|
L.Push(luar.New(L, n.Machine(name)))
|
|
return 1
|
|
}
|
|
|
|
func removeMachine(L *lua.LState) int {
|
|
name := L.ToString(1)
|
|
|
|
n.RemoveMachine(name)
|
|
|
|
return 0
|
|
}
|
|
|
|
func machine(L *lua.LState) int {
|
|
name := L.ToString(1)
|
|
|
|
m := n.Machine(string(name))
|
|
|
|
L.Push(luar.New(L, m))
|
|
return 1
|
|
}
|
|
|
|
func save(L *lua.LState) int {
|
|
n.Save()
|
|
return 0
|
|
}
|
|
|
|
// Preload loads netrc into a gopher-lua's LState module registry.
|
|
func Preload(L *lua.LState) {
|
|
L.PreloadModule("netrc", Loader)
|
|
}
|
|
|
|
// Loader loads the netrc modules.
|
|
func Loader(L *lua.LState) int {
|
|
mod := L.SetFuncs(L.NewTable(), exports)
|
|
L.Push(mod)
|
|
return 1
|
|
}
|