@ -0,0 +1,127 @@ | |||||
package main | |||||
import ( | |||||
"crypto/tls" | |||||
"flag" | |||||
"fmt" | |||||
"os" | |||||
"path" | |||||
"path/filepath" | |||||
"strings" | |||||
"time" | |||||
"github.com/mattn/go-xmpp" | |||||
"gopkg.in/ini.v1" | |||||
) | |||||
type cfgStruct struct { | |||||
srv string | |||||
usr string | |||||
pwd string | |||||
dest string | |||||
notls bool | |||||
} | |||||
func serverName(host string) string { | |||||
return strings.Split(host, ":")[0] | |||||
} | |||||
func cfgRead(CfgFile string) cfgStruct { | |||||
dir, dir_err := filepath.Abs(filepath.Dir(os.Args[0])) | |||||
var ret cfgStruct | |||||
if dir_err != nil { | |||||
fmt.Printf("fail to open dir: %v", dir_err) | |||||
} | |||||
cfg, cfg_err := ini.Load(path.Join(dir, CfgFile)) | |||||
if cfg_err != nil { | |||||
fmt.Printf("Fail to read file: %v", cfg_err) | |||||
os.Exit(1) | |||||
} | |||||
cfg_notls, _ := cfg.Section("").Key("notls").Bool() | |||||
ret.srv = cfg.Section("").Key("server").String() | |||||
ret.usr = cfg.Section("").Key("username").String() | |||||
ret.pwd = cfg.Section("").Key("password").String() | |||||
ret.notls = cfg_notls | |||||
ret.dest = cfg.Section("").Key("dest").String() | |||||
return ret | |||||
} | |||||
func jabberClient(cfg cfgStruct) *xmpp.Client { | |||||
var server = flag.String("server", cfg.srv, "server") | |||||
var username = flag.String("username", cfg.usr, "username") | |||||
var password = flag.String("password", cfg.pwd, "password") | |||||
var status = flag.String("status", "xa", "status") | |||||
var statusMessage = flag.String("status-msg", "", "") | |||||
var notls = flag.Bool("notls", cfg.notls, "No TLS") | |||||
var debug = flag.Bool("debug", false, "debug output") | |||||
var session = flag.Bool("session", false, "use server session") | |||||
flag.Usage = func() { | |||||
fmt.Fprintf(os.Stderr, "usage: example [options]\n") | |||||
flag.PrintDefaults() | |||||
os.Exit(2) | |||||
} | |||||
flag.Parse() | |||||
if *username == "" || *password == "" { | |||||
if *debug && *username == "" && *password == "" { | |||||
fmt.Fprintf(os.Stderr, "no username or password were given; attempting ANONYMOUS auth\n") | |||||
} else if *username != "" || *password != "" { | |||||
flag.Usage() | |||||
} | |||||
} | |||||
if !*notls { | |||||
xmpp.DefaultConfig = tls.Config{ | |||||
ServerName: serverName(*server), | |||||
InsecureSkipVerify: false, | |||||
} | |||||
} | |||||
var talk *xmpp.Client | |||||
var err error | |||||
options := xmpp.Options{Host: *server, | |||||
User: *username, | |||||
Password: *password, | |||||
NoTLS: *notls, | |||||
Debug: *debug, | |||||
Session: *session, | |||||
Status: *status, | |||||
StatusMessage: *statusMessage, | |||||
} | |||||
talk, err = options.NewClient() | |||||
if err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
return talk | |||||
} | |||||
func jabberReader(talk *xmpp.Client, in <-chan int) { | |||||
for { | |||||
_, err := talk.Recv() | |||||
if err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
} | |||||
} | |||||
func main() { | |||||
readerClose := make(chan int, 1) | |||||
cfg := cfgRead("goxmppalert.ini") | |||||
var send_remote string | |||||
var send_text string | |||||
if len(os.Args) == 3 { | |||||
send_remote = os.Args[1] | |||||
send_text = os.Args[2] | |||||
} else { | |||||
send_remote = cfg.dest | |||||
send_text = os.Args[1] | |||||
} | |||||
talk := jabberClient(cfg) | |||||
go jabberReader(talk, readerClose) | |||||
go talk.Send(xmpp.Chat{Remote: send_remote, Type: "chat", Text: send_text}) | |||||
time.Sleep(1 * time.Second) | |||||
close(readerClose) | |||||
talk.Close() | |||||
} |
Powered by TurnKey Linux.