|
|
@ -4,113 +4,38 @@ import ( |
|
|
|
"encoding/json" |
|
|
|
"encoding/json" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
"io/ioutil" |
|
|
|
"io/ioutil" |
|
|
|
|
|
|
|
"os" |
|
|
|
"strings" |
|
|
|
"strings" |
|
|
|
"syscall" |
|
|
|
"syscall" |
|
|
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/rudi9719/loggy" |
|
|
|
"github.com/rudi9719/loggy" |
|
|
|
"golang.org/x/crypto/ssh/terminal" |
|
|
|
"golang.org/x/crypto/ssh/terminal" |
|
|
|
"samhofi.us/x/keybase" |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
var ( |
|
|
|
k = keybase.NewKeybase() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logOpts = loggy.LogOpts{ |
|
|
|
logOpts = loggy.LogOpts{ |
|
|
|
OutFile: "Keybase-Email.log", |
|
|
|
OutFile: "Reports.log", |
|
|
|
KBTeam: "nightmarehaus.logs", |
|
|
|
ProgName: "Reports", |
|
|
|
KBChann: "general", |
|
|
|
|
|
|
|
ProgName: "KB-Email", |
|
|
|
|
|
|
|
Level: 4, |
|
|
|
Level: 4, |
|
|
|
UseStdout: true, |
|
|
|
UseStdout: true, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
chann = keybase.Channel{ |
|
|
|
|
|
|
|
Name: "rudi9719", |
|
|
|
|
|
|
|
MembersType: keybase.USER, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
chat keybase.Chat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log = loggy.NewLogger(logOpts) |
|
|
|
log = loggy.NewLogger(logOpts) |
|
|
|
conf = Config{} |
|
|
|
conf = Config{} |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
func main() { |
|
|
|
if !k.LoggedIn { |
|
|
|
|
|
|
|
log.LogPanic("Keybase not logged in.") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
log.LogInfo(fmt.Sprintf("Bot started using account %s", k.Username)) |
|
|
|
|
|
|
|
conf = loadConfig() |
|
|
|
conf = loadConfig() |
|
|
|
setupCredentials() |
|
|
|
//setupCredentials()
|
|
|
|
log.LogInfo("Starting keybase") |
|
|
|
args := os.Args[1:] |
|
|
|
chat = k.NewChat(chann) |
|
|
|
|
|
|
|
k.Run(func(api keybase.ChatAPI) { |
|
|
|
|
|
|
|
handleMessage(api) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func handleMessage(api keybase.ChatAPI) { |
|
|
|
|
|
|
|
if api.Msg.Content.Type != "text" { |
|
|
|
|
|
|
|
log.LogDebug("Wrong message type detected.") |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
parts := strings.Split(api.Msg.Content.Text.Body, " ") |
|
|
|
|
|
|
|
if parts[0] != "!email" { |
|
|
|
|
|
|
|
log.LogDebug("Wrong command detected") |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if api.Msg.Sender.Username != k.Username { |
|
|
|
|
|
|
|
log.LogDebug("Wrong username detected.") |
|
|
|
|
|
|
|
chat = k.NewChat(api.Msg.Channel) |
|
|
|
|
|
|
|
chat.Reply(api.Msg.ID, "[EMBot] No thanks!") |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if len(parts) < 4 { |
|
|
|
|
|
|
|
log.LogDebug("Wrong length of parts detected.") |
|
|
|
|
|
|
|
chat.Send("[KB-Email] Not enough components to send email.") |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
chann = api.Msg.Channel |
|
|
|
|
|
|
|
chat = k.NewChat(chann) |
|
|
|
|
|
|
|
var e Email |
|
|
|
var e Email |
|
|
|
partCounter := 1 |
|
|
|
e.Subject = args[0] |
|
|
|
for _, subj := range parts[1:] { |
|
|
|
e.Body = loadBodyFromFile(args[1]) |
|
|
|
if strings.Contains(subj, "@") { |
|
|
|
for _, arg := range args[2:] { |
|
|
|
break |
|
|
|
e.Recipients = append(e.Recipients, arg) |
|
|
|
} |
|
|
|
|
|
|
|
partCounter++ |
|
|
|
|
|
|
|
e.Subject += fmt.Sprintf("%s ", subj) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for _, to := range parts { |
|
|
|
|
|
|
|
if strings.HasPrefix(to, "to:") { |
|
|
|
|
|
|
|
if strings.Contains(to, "@") { |
|
|
|
|
|
|
|
e.Recipients = append(e.Recipients, strings.Replace(to, "to:", "", -1)) |
|
|
|
|
|
|
|
partCounter++ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for _, cc := range parts { |
|
|
|
|
|
|
|
if strings.HasPrefix(cc, "cc:") { |
|
|
|
|
|
|
|
if strings.Contains(cc, "@") { |
|
|
|
|
|
|
|
e.Cc = append(e.Cc, strings.Replace(cc, "cc:", "", -1)) |
|
|
|
|
|
|
|
partCounter++ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for _, bcc := range parts { |
|
|
|
|
|
|
|
if strings.HasPrefix(bcc, "bcc:") { |
|
|
|
|
|
|
|
if strings.Contains(bcc, "@") { |
|
|
|
|
|
|
|
e.Bcc = append(e.Bcc, strings.Replace(bcc, "bcc:", "", -1)) |
|
|
|
|
|
|
|
partCounter++ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for _, word := range parts[partCounter:] { |
|
|
|
|
|
|
|
e.Body += fmt.Sprintf("%s ", word) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
log.LogDebug(fmt.Sprintf("%+v", e)) |
|
|
|
send(e) |
|
|
|
go send(e, api) |
|
|
|
time.Sleep(1 * time.Second) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func loadConfig() Config { |
|
|
|
func loadConfig() Config { |
|
|
|