Added IME and stdin tools

This commit is contained in:
Kevin F 2023-01-22 22:59:12 -06:00
parent 576e70a989
commit 5794ea43a3
8 changed files with 78 additions and 91 deletions

View File

@ -16,7 +16,7 @@ When GoSmartKeyboard is started in client mode, it does the following:
if len(os.Args) > 1 && os.Args[1] == "connect" {
@{get client fifo input file from environment}
@{setup client}
if clientFifioInputFileExists {
if clientFifoInputFileExists {
@{start client with fifo}
os.Exit(0)
}

View File

@ -28,7 +28,7 @@ authTokenFile, authTokenFileIsSet := os.LookupEnv("KEYBOARD_AUTH_TOKEN_FILE")
--- get client fifo input file from environment
clientFifoInputFile, clientFifioInputFileExists := os.LookupEnv("KEYBOARD_FIFO")
clientFifoInputFile, clientFifoInputFileExists := os.LookupEnv("KEYBOARD_FIFO")
---

View File

@ -2,7 +2,7 @@ weave:
srcweave --formatter srcweave-format --weave docs/ ReadMe.md security/Authentication.md EnvironmentVariables.md Dependencies.md Server.md Streaming.md ThreatModel.md Client.md
util/removefencedcode.py
tangle:
srcweave --formatter srcweave-format --tangle smartkeyboard/ ReadMe.md security/Authentication.md EnvironmentVariables.md Dependencies.md Server.md Streaming.md ThreatModel.md Client.md tools/Tools.md tools/Cowsay.md tools/Editor.md tools/HelloWorld.md
srcweave --formatter srcweave-format --tangle smartkeyboard/ ReadMe.md security/Authentication.md EnvironmentVariables.md Dependencies.md Server.md Streaming.md ThreatModel.md Client.md tools/Tools.md tools/Editor.md tools/Input.md
clean:
rm -rf docs
find smartkeyboard/ -type f -not -name "*_test.go" -delete

View File

@ -1,29 +0,0 @@
# Cowsay
This tool sends your text as cow speech to the server. It is a simple example of a tool that can be used to send text to the server.
``` go
--- /tools/cowsay.go
@{tool header}
@{tool main}
func doTool(){
if len(os.Args) < 2 {
fmt.Println("Usage: cowsay <text>")
os.Exit(1)
}
cmd := exec.Command("cowsay", os.Args[1:])
//cmd.Stdin = strings.NewReader("some input")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Println(strings)
}
---
```

View File

@ -1,3 +1,39 @@
# Input Method Editor
This tool uses your $EDITOR to buffer keystrokes.
``` go
--- /tools/editor/editor.go
package main
import (
"io/ioutil"
"os"
)
// #include <stdlib.h>
//
// void vim() {
// system("vi inputfile");
// }
import "C"
func main() {
var inputFile := "inputFile"
@{get client fifo input file from environment}
C.vim()
data, _ := ioutil.ReadFile(inputFile)
f, err := os.OpenFile(clientFifoInputFile, os.O_WRONLY, 0600)
if err != nil {
panic(err)
}
f.Write(data)
os.Remove(inputFile)
}
---
```

View File

@ -1,15 +0,0 @@
# Hello World
Bare bones keyboard tool.
``` go
--- /tools/helloworld.go
@{tool header}
func doTool(){
fmt.Println("Hello World")
}
@{tool main}
---

38
tools/Input.md Normal file
View File

@ -0,0 +1,38 @@
# Simple Input
This tool reads lines from stdin and sends them to the server.
Newline characters are only sent when a blank line is entered.
``` go
--- /tools/input/input.go
package main
import (
"io/ioutil"
"bufio"
"os"
)
func main(){
var input string
@{get client fifo input file from environment}
if ! clientFifoInputFileExists {
os.Exit(1)
}
for {
reader := bufio.NewReader(os.Stdin)
input, _ = reader.ReadString('\n')
if len(input) > 0 {
ioutil.WriteFile(clientFifoInputFile, []byte(input), 0644)
} else {
ioutil.WriteFile(clientFifoInputFile, []byte("\n"), 0644)
}
input = ""
}
}
---

View File

@ -1,48 +1,5 @@
# Keyboarding Tools
The actual keyboarding tools are completely seperate from the server and client code.
As far as features are concerned, they only need to write to stdout.
As far as features are concerned, they only need to write to a file (a fifo read by the client)
All tools have the same initial structure:
``` go
--- tool header
package main
import (
"fmt"
"os"
"log"
"time"
)
---
--- tool main
func main(){
@{get auth token}
@{start tool}
}
---
--- start tool
time.Sleep(1 * time.Second)
fmt.Println(authTokenInput)
doTool()
---
--- get auth token --- noWeave
@{get authTokenInput from environment}
if !authTokenInputExists {
//fmt.Print("Enter authentication token: ")
_, err := fmt.Scanln(&authTokenInput)
if err != nil {
log.Fatal(err)
}
}
---