Example #1
0
func main() {

	target := flag.String("target", "", "the id of the ricochet client to use for testing")
	action := flag.String("action", "ping", "the action you want to take e.g. ping, contact-request")
	hostname := flag.String("hostname", "", "the hostname of a hidden service to use for authentication")
	privateKey := flag.String("key", "", "the private keyfile of a hidden service to use for authentication")
	messageFile := flag.String("messageFile", "", "a file containing a list of messages to send to the client")
	name := flag.String("name", "recoil", "a name to use when sending a contact request")
	message := flag.String("message", "I am the recoil testing tool", "a message to send during the contact request")
	flag.Parse()

	if *target == "" {
		log.Fatalf("target must be specified")
	}

	if *hostname == "" {
		log.Fatalf("hostname must be specified")
	}

	if *privateKey == "" {
		log.Fatalf("key must be specified")
	}

	recoil := new(recoil.Recoil)
	recoil.Ready = make(chan bool)

	if *action == "ping" {
		online := recoil.Ping(*privateKey, *hostname, *target)
		if online == true {
			log.Printf("%s is online", *target)
		} else {
			log.Printf("%s is offline", *target)
		}
	} else {
		go recoil.Authenticate(*privateKey, *hostname, *target)
		log.Printf("Running Recoil...")
		ready := <-recoil.Ready
		log.Printf("Received Authentication Result %v", ready)
		if ready == true {
			if *action == "contact-request" {
				recoil.SendContactRequest(*name, *message)
			}

			if *action == "spamchannel" {
				recoil.SpamChannel()
			}

			if *action == "sendmessage" {
				recoil.SendMessage(*messageFile)
			}
		}
	}
}
Example #2
0
File: gui.go Project: s-rah/recoil
func main_ui() {
	app := ui.Application()
	app.SetOrganizationName("?")
	app.SetApplicationName("Recoil")

	w := &MainWindow{}
	w.QMainWindow = ui.NewMainWindow()

	// Widgets
	w.targetSectionLabel = ui.NewLabel()
	w.targetSectionLabel.SetText("Target Test Settings")
	font := w.Font()
	font.SetPointSize(font.PointSize() + 1)
	w.targetSectionLabel.SetFont(font)

	w.labelTarget = ui.NewLabel()
	w.labelTarget.SetText(fmt.Sprintf("Target Address"))
	w.labelTarget.SetFixedWidth(400)
	w.editTarget = ui.NewLineEdit()
	w.editTarget.SetPlaceholderText(fmt.Sprintf("target.onion"))

	w.labelAction = ui.NewLabel()
	w.labelAction.SetText(fmt.Sprintf("Action"))
	w.editAction = ui.NewComboBox()
	w.editAction.AddItem(fmt.Sprintf("ping"))
	w.editAction.AddItem(fmt.Sprintf("contact-request"))
	w.editAction.AddItem(fmt.Sprintf("send-messages"))
	w.editAction.AddItem(fmt.Sprintf("spamchannel"))
	w.editAction.SetFixedWidth(400)

	w.localSectionLabel = ui.NewLabel()
	w.localSectionLabel.SetText(fmt.Sprintf("Local Test Settings"))
	w.localSectionLabel.SetFont(font)

	w.labelHostname = ui.NewLabel()
	w.labelHostname.SetText(fmt.Sprintf("Onion Hostname"))
	w.labelHostname.SetFixedWidth(400)
	w.editHostname = ui.NewLineEdit()
	w.editHostname.SetPlaceholderText(fmt.Sprintf("something.onion"))
	w.editHostname.SetFixedWidth(400)

	w.labelName = ui.NewLabel()
	w.labelName.SetText(fmt.Sprintf("Ricochet Name"))
	w.labelName.SetFixedWidth(400)
	w.editName = ui.NewLineEdit()
	w.editName.SetText("recoil")
	w.editName.SetPlaceholderText(fmt.Sprintf("Ricochet Name"))
	w.editName.SetFixedWidth(400)

	w.labelKey = ui.NewLabel()
	w.labelKey.SetText(fmt.Sprintf("Onion Private Key"))
	w.labelKey.SetFixedWidth(400)
	w.editKey = ui.NewPlainTextEdit()
	w.editKey.SetFixedWidth(400)
	w.editKey.SetFixedHeight(99)

	w.labelMessage = ui.NewLabel()
	w.labelMessage.SetText(fmt.Sprintf("Message"))
	w.editMessage = ui.NewPlainTextEdit()
	w.editMessage.SetFixedHeight(100)
	w.editMessage.AppendPlainText(fmt.Sprintf("I am the recoil testing tool"))

	w.sendButton = ui.NewPushButton()
	w.sendButton.SetText("Send")
	w.clearLogsButton = ui.NewPushButton()
	w.clearLogsButton.SetText("Clear Logs")

	w.sendButton.OnClicked(func() {
		// Need to add back in debug
		target := w.editTarget.DisplayText()
		//debug := false
		action := w.editAction.CurrentText()
		hostname := w.editHostname.DisplayText()
		privateKey := w.editKey.ToPlainText()
		name := w.editName.DisplayText()
		message := w.editMessage.ToPlainText()

		if target == "" {
			w.logsBox.AppendPlainText(fmt.Sprintf("[ERROR] Target must be specified."))
			w.StatusBar().ShowMessage("Error: Target must be specified.")
			return
		} else if hostname == "" {
			w.logsBox.AppendPlainText(fmt.Sprintf("[ERROR] Hostname must be specified."))
			w.StatusBar().ShowMessage("Error: Hostname must be specified.")
			return
		} else if privateKey == "" {
			w.logsBox.AppendPlainText(fmt.Sprintf("[ERROR] Onion key must be specified."))
			w.StatusBar().ShowMessage("Error: Onion key must be specified.")
			return
		}

		recoil := new(recoil.Recoil)
		recoil.Ready = make(chan bool)

		if action == "ping" {
			online := recoil.Ping(privateKey, hostname, target)
			if online == true {
				w.logsBox.AppendPlainText(fmt.Sprintf("[INFO] Target appears to be online."))
				w.StatusBar().ShowMessage(fmt.Sprintf("%s appers to be online.", target))
			} else {
				w.logsBox.AppendPlainText(fmt.Sprintf("[INFO] Target appears to be offline."))
				w.StatusBar().ShowMessage(fmt.Sprintf("%s appers to be offline.", target))
			}
		} else {
			go recoil.Authenticate(privateKey, hostname, target)
			log.Printf("Running Recoil...")
			ready := <-recoil.Ready
			log.Printf("Received Authentication Result %v", ready)
			if ready == true {
				if action == "contact-request" {
					recoil.SendContactRequest(name, message)
					w.logsBox.AppendPlainText(fmt.Sprintf("[INFO] Sent contact request to %s.", target))
					w.StatusBar().ShowMessage(fmt.Sprintf("Sent contact request to %s.", target))
				} else if action == "spamchannel" {
					// go recoil.SpamChannel()
					// w.logsBox.AppendPlainText("[ERROR] spamchannel action not functional.")
					// w.StatusBar().ShowMessage("Error: spamchannel action not functional.")
				}
			}
		}
	})
	w.labelLogs = ui.NewLabel()
	w.labelLogs.SetText(fmt.Sprintf("Logs"))
	w.logsBox = ui.NewPlainTextEdit()
	w.logsBox.SetFixedWidth(800)
	w.logsBox.AppendPlainText(fmt.Sprintf("[Recoil] Ricochet testing toolkit"))
	w.logsBox.SetReadOnly(true)

	targetRow := ui.NewHBoxLayout()
	targetSection := ui.NewVBoxLayout()
	targetSection.AddWidget(w.labelTarget)
	targetSection.AddWidget(w.editTarget)
	actionSection := ui.NewVBoxLayout()
	actionSection.AddWidget(w.labelAction)
	actionSection.AddWidget(w.editAction)
	targetRow.AddLayout(targetSection)
	targetRow.AddLayout(actionSection)

	localRow := ui.NewHBoxLayout()
	localCol1 := ui.NewVBoxLayout()
	localCol1.AddWidget(w.labelName)
	localCol1.AddWidget(w.editName)
	localCol1.AddWidget(w.labelHostname)
	localCol1.AddWidget(w.editHostname)
	localRow.AddLayout(localCol1)
	localCol2 := ui.NewVBoxLayout()
	localCol2.AddWidget(w.labelKey)
	localCol2.AddWidget(w.editKey)
	localRow.AddLayout(localCol2)

	buttonRow := ui.NewHBoxLayout()
	buttonRow.AddWidget(w.sendButton)
	buttonRow.AddWidget(w.clearLogsButton)

	inputLayout := ui.NewVBoxLayout()
	inputLayout.AddWidget(w.localSectionLabel)
	inputLayout.AddLayout(localRow)
	inputLayout.AddWidget(w.targetSectionLabel)
	inputLayout.AddLayout(targetRow)
	inputLayout.AddWidget(w.labelMessage)
	inputLayout.AddWidget(w.editMessage)
	inputLayout.AddWidget(w.labelLogs)
	inputLayout.AddWidget(w.logsBox)
	inputLayout.AddLayout(buttonRow)

	centralWidget := ui.NewWidget()
	centralWidget.SetLayout(inputLayout)

	w.SetCentralWidget(centralWidget)

	w.clearLogsButton.OnClicked(func() {
		w.logsBox.Clear()
	})

	//splash := ui.NewSplashScreen()
	//splash.ShowMessage("test")

	openMessageAct := ui.NewActionWithTextParent("&Open Message File...", w)
	openMessageAct.OnTriggered(func() { w.openMessage() })
	openOnionHostnameAct := ui.NewActionWithTextParent("&Open Onion Service Hostname...", w)
	openOnionHostnameAct.OnTriggered(func() { w.openOnionHostname() })
	openOnionKeyAct := ui.NewActionWithTextParent("&Open Onion Service Key...", w)
	openOnionKeyAct.OnTriggered(func() { w.openOnionKey() })
	saveMessageAct := ui.NewActionWithTextParent("&Save Message File...", w)
	saveMessageAct.OnTriggered(func() { w.saveMessage() })
	saveMessageAsAct := ui.NewActionWithTextParent("&Save Message File As...", w)
	saveMessageAsAct.OnTriggered(func() { w.saveMessageAs() })
	exitAct := ui.NewActionWithTextParent("&Exit", w)
	exitAct.OnTriggered(func() { os.Exit(0) })

	fileMenu := w.MenuBar().AddMenuWithTitle("&File")
	fileMenu.AddAction(openMessageAct)
	fileMenu.AddAction(openOnionHostnameAct)
	fileMenu.AddAction(openOnionKeyAct)
	fileMenu.AddSeparator()
	fileMenu.AddAction(saveMessageAct)
	fileMenu.AddAction(saveMessageAsAct)
	fileMenu.AddSeparator()
	fileMenu.AddAction(exitAct)

	w.setCurrentMessageFile("")
	w.StatusBar().ShowMessage("Ready")
	w.Show()
}