croc/main.go

97 lines
2.3 KiB
Go
Raw Normal View History

2017-10-17 17:21:47 +02:00
package main
import (
2017-10-18 02:58:16 +02:00
"bufio"
2017-10-17 17:21:47 +02:00
"flag"
"fmt"
2017-10-18 04:25:33 +02:00
"io/ioutil"
2017-10-18 02:43:12 +02:00
"os"
2017-10-18 03:02:25 +02:00
"strings"
2017-10-17 17:21:47 +02:00
log "github.com/sirupsen/logrus"
)
const BUFFERSIZE = 1024
2017-10-18 02:43:12 +02:00
const numberConnections = 4
2017-10-17 17:21:47 +02:00
// Build flags
var server, file string
// Global varaibles
2017-10-18 02:43:12 +02:00
var serverAddress, fileName, codePhraseFlag, connectionTypeFlag string
2017-10-18 06:23:31 +02:00
var runAsRelay, debugFlag, dontEncrypt bool
2017-10-18 05:28:32 +02:00
var fileSalt, fileIV, fileHash string
var fileBytes []byte
2017-10-17 17:21:47 +02:00
func main() {
2017-10-18 02:43:12 +02:00
flag.BoolVar(&runAsRelay, "relay", false, "run as relay")
flag.BoolVar(&debugFlag, "debug", false, "debug mode")
2017-10-18 03:22:51 +02:00
flag.StringVar(&serverAddress, "server", "cowyo.com", "address of relay server")
2017-10-18 03:13:08 +02:00
flag.StringVar(&fileName, "send", "", "file to send")
2017-10-18 03:22:51 +02:00
flag.StringVar(&codePhraseFlag, "code", "", "use your own code phrase")
2017-10-18 06:23:31 +02:00
flag.BoolVar(&dontEncrypt, "no-encrypt", false, "turn off encryption")
2017-10-17 17:21:47 +02:00
flag.Parse()
// Check build flags too, which take precedent
if server != "" {
serverAddress = server
}
if file != "" {
fileName = file
}
2017-10-18 02:43:12 +02:00
if len(fileName) > 0 {
2017-10-18 02:58:16 +02:00
connectionTypeFlag = "s" // sender
} else {
connectionTypeFlag = "r" //receiver
2017-10-18 03:01:01 +02:00
}
if !runAsRelay {
2017-10-18 02:58:16 +02:00
if len(codePhraseFlag) == 0 {
2017-10-18 03:06:59 +02:00
if connectionTypeFlag == "r" {
codePhraseFlag = getInput("What is your code phrase? ")
}
2017-10-18 03:01:01 +02:00
if len(codePhraseFlag) < 5 {
codePhraseFlag = GetRandomName()
fmt.Println("Your code phrase is now " + codePhraseFlag)
}
2017-10-18 02:58:16 +02:00
}
2017-10-18 02:43:12 +02:00
}
2017-10-18 04:25:33 +02:00
if connectionTypeFlag == "s" {
// encrypt the file
2017-10-18 05:15:48 +02:00
fmt.Println("encrypting...")
2017-10-18 04:25:33 +02:00
fdata, err := ioutil.ReadFile(fileName)
if err != nil {
log.Fatal(err)
return
}
fileBytes, fileSalt, fileIV = Encrypt(fdata, codePhraseFlag)
2017-10-18 05:28:32 +02:00
fileHash = HashBytes(fdata)
2017-10-18 06:03:48 +02:00
if debugFlag {
ioutil.WriteFile(fileName+".encrypted", fileBytes, 0644)
}
2017-10-18 04:25:33 +02:00
}
2017-10-18 02:43:12 +02:00
log.SetFormatter(&log.TextFormatter{})
if debugFlag {
log.SetLevel(log.DebugLevel)
} else {
log.SetLevel(log.WarnLevel)
}
if runAsRelay {
2017-10-17 17:21:47 +02:00
runServer()
} else if len(serverAddress) != 0 {
2017-10-18 02:43:12 +02:00
runClient(connectionTypeFlag, codePhraseFlag)
2017-10-17 17:21:47 +02:00
} else {
fmt.Println("You must specify either -file (for running as a server) or -server (for running as a client)")
}
}
2017-10-18 02:58:16 +02:00
func getInput(prompt string) string {
reader := bufio.NewReader(os.Stdin)
fmt.Print(prompt)
text, _ := reader.ReadString('\n')
2017-10-18 03:02:25 +02:00
return strings.TrimSpace(text)
2017-10-18 02:58:16 +02:00
}