From 38ee83e45b4de7edf89bf9f0ef629eb4c6ad0fa8 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Thu, 12 May 2016 23:56:07 -0400 Subject: Moving to glide --- .../mattermost/rsc/google/googleserver/main.go | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 vendor/github.com/mattermost/rsc/google/googleserver/main.go (limited to 'vendor/github.com/mattermost/rsc/google/googleserver/main.go') diff --git a/vendor/github.com/mattermost/rsc/google/googleserver/main.go b/vendor/github.com/mattermost/rsc/google/googleserver/main.go new file mode 100644 index 000000000..2cd022446 --- /dev/null +++ b/vendor/github.com/mattermost/rsc/google/googleserver/main.go @@ -0,0 +1,139 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + // "flag" + "bufio" + "fmt" + "log" + "net" + "net/rpc" + "os" + "strings" + "syscall" + + "github.com/mattermost/rsc/google" + "github.com/mattermost/rsc/xmpp" +) + +func main() { + google.ReadConfig() + switch os.Args[1] { + case "add": + google.Cfg.Account = append(google.Cfg.Account, &google.Account{Email: os.Args[2], Password: os.Args[3]}) + google.WriteConfig() + case "serve": + serve() + case "accounts": + c, err := google.Dial() + if err != nil { + log.Fatal(err) + } + out, err := c.Accounts() + if err != nil { + log.Fatal(err) + } + for _, email := range out { + fmt.Printf("%s\n", email) + } + case "ping": + c, err := google.Dial() + if err != nil { + log.Fatal(err) + } + if err := c.Ping(); err != nil { + log.Fatal(err) + } + case "chat": + c, err := google.Dial() + if err != nil { + log.Fatal(err) + } + cid := &google.ChatID{ID: "1", Email: os.Args[2], Status: xmpp.Available, StatusMsg: ""} + go chatRecv(c, cid) + c.ChatRoster(cid) + b := bufio.NewReader(os.Stdin) + for { + line, err := b.ReadString('\n') + if err != nil { + log.Fatal(err) + } + line = line[:len(line)-1] + i := strings.Index(line, ": ") + if i < 0 { + log.Printf(": , please") + continue + } + who, msg := line[:i], line[i+2:] + if err := c.ChatSend(cid, &xmpp.Chat{Remote: who, Type: "chat", Text: msg}); err != nil { + log.Fatal(err) + } + } + } +} + +func chatRecv(c *google.Client, cid *google.ChatID) { + for { + msg, err := c.ChatRecv(cid) + if err != nil { + log.Fatal(err) + } + switch msg.Type { + case "roster": + for _, contact := range msg.Roster { + fmt.Printf("%v\n", contact) + } + case "presence": + fmt.Printf("%v\n", msg.Presence) + case "chat": + fmt.Printf("%s: %s\n", msg.Remote, msg.Text) + default: + fmt.Printf("<%s>\n", msg.Type) + } + } +} + +func listen() net.Listener { + socket := google.Dir() + "/socket" + os.Remove(socket) + l, err := net.Listen("unix", socket) + if err != nil { + log.Fatal(err) + } + return l +} + +func serve() { + f, err := os.OpenFile(google.Dir()+"/log", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0600) + if err != nil { + log.Fatal(err) + } + log.SetOutput(f) + syscall.Dup2(f.Fd(), 2) + os.Stdout = f + os.Stderr = f + l := listen() + rpc.RegisterName("goog", &Server{}) + rpc.Accept(l) + log.Fatal("rpc.Accept finished: server exiting") +} + +type Server struct{} + +type Empty google.Empty + +func (*Server) Ping(*Empty, *Empty) error { + return nil +} + +func (*Server) Accounts(_ *Empty, out *[]string) error { + var email []string + for _, a := range google.Cfg.Account { + email = append(email, a.Email) + } + *out = email + return nil +} -- cgit v1.2.3-1-g7c22