Work on tools
This commit is contained in:
parent
f089202286
commit
608d780db1
@ -8,7 +8,7 @@ When GoSmartKeyboard is started in client mode, it does the following:
|
|||||||
4 Send the auth token to the server.
|
4 Send the auth token to the server.
|
||||||
5. If the server responds with "authenticated", we start reading keys from stdin and sending them to the server until EOF.
|
5. If the server responds with "authenticated", we start reading keys from stdin and sending them to the server until EOF.
|
||||||
|
|
||||||
|
``` go
|
||||||
--- handle client command
|
--- handle client command
|
||||||
|
|
||||||
if len(os.Args) > 1 && os.Args[1] == "connect" {
|
if len(os.Args) > 1 && os.Args[1] == "connect" {
|
||||||
@ -17,6 +17,7 @@ if len(os.Args) > 1 && os.Args[1] == "connect" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Connecting
|
## Connecting
|
||||||
@ -88,10 +89,10 @@ We read keys from stdin and send them to the server until we get EOF
|
|||||||
|
|
||||||
--- start client +=
|
--- start client +=
|
||||||
|
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
for {
|
for {
|
||||||
var key string
|
var key string
|
||||||
reader := bufio.NewReader(os.Stdin)
|
|
||||||
|
|
||||||
rune, _, err := reader.ReadRune() //:= fmt.Scan(&key)
|
rune, _, err := reader.ReadRune() //:= fmt.Scan(&key)
|
||||||
key = string(rune)
|
key = string(rune)
|
||||||
|
2
Makefile
2
Makefile
@ -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
|
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
|
util/removefencedcode.py
|
||||||
tangle:
|
tangle:
|
||||||
srcweave --formatter srcweave-format --tangle smartkeyboard/ ReadMe.md security/Authentication.md EnvironmentVariables.md Dependencies.md Server.md Streaming.md ThreatModel.md Client.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/Cowsay.md tools/Editor.md tools/HelloWorld.md
|
||||||
clean:
|
clean:
|
||||||
rm -rf docs
|
rm -rf docs
|
||||||
find smartkeyboard/ -type f -not -name "*_test.go" -delete
|
find smartkeyboard/ -type f -not -name "*_test.go" -delete
|
||||||
|
@ -41,10 +41,12 @@ func clientConnected(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
log.Printf("recv: %s", message)
|
log.Printf("recv: %s", message)
|
||||||
message_string := string(message)
|
message_string := string(message)
|
||||||
|
if message_string == "" {
|
||||||
|
message_string = "\n"
|
||||||
|
}
|
||||||
err = keyboard.Type(message_string)
|
err = keyboard.Type(message_string)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("type:", err)
|
log.Println("type:", err)
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,6 @@ package auth
|
|||||||
import(
|
import(
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"fmt"
|
|
||||||
"errors"
|
"errors"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
package auth
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"golang.org/x/crypto/sha3"
|
|
||||||
"os"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestAuthPasswordHashBad(t *testing.T) {
|
|
||||||
os.RemoveAll("test-auth-token")
|
|
||||||
os.Setenv("KEYBOARD_AUTH_TOKEN_FILE", "test-auth-token")
|
|
||||||
os.WriteFile("test-auth-token", []byte("junk"), 0644)
|
|
||||||
t.Log("TestAuthPasswordHash")
|
|
||||||
|
|
||||||
password := "wrong password"
|
|
||||||
|
|
||||||
result := CheckAuthToken(password)
|
|
||||||
if result == nil {
|
|
||||||
t.Errorf("Expected error, got nil")
|
|
||||||
}
|
|
||||||
os.RemoveAll("test-auth-token")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAuthPasswordEmpty(t *testing.T) {
|
|
||||||
os.RemoveAll("test-auth-token")
|
|
||||||
os.Setenv("KEYBOARD_AUTH_TOKEN_FILE", "test-auth-token")
|
|
||||||
os.WriteFile("test-auth-token", []byte("c0067d4af4e87f00dbac63b6156828237059172d1bbeac67427345d6a9fda484"), 0644)
|
|
||||||
t.Log("TestAuthPasswordHash")
|
|
||||||
|
|
||||||
password := ""
|
|
||||||
|
|
||||||
result := CheckAuthToken(password)
|
|
||||||
if result == nil {
|
|
||||||
t.Errorf("Expected error, got nil")
|
|
||||||
}
|
|
||||||
os.RemoveAll("test-auth-token")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAuthPasswordHashGood(t *testing.T) {
|
|
||||||
os.RemoveAll("test-auth-token")
|
|
||||||
os.Setenv("KEYBOARD_AUTH_TOKEN_FILE", "test-auth-token")
|
|
||||||
//os.WriteFile("test-auth-token", []byte("c0067d4af4e87f00dbac63b6156828237059172d1bbeac67427345d6a9fda484"), 0644)
|
|
||||||
expectedHash := sha3.Sum256([]byte("password"))
|
|
||||||
fo, err := os.Create("test-auth-token")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
fo.Write(expectedHash[:])
|
|
||||||
t.Log("TestAuthPasswordHash")
|
|
||||||
|
|
||||||
password := base64.StdEncoding.EncodeToString([]byte("password"))
|
|
||||||
|
|
||||||
result := CheckAuthToken(password)
|
|
||||||
if result != nil {
|
|
||||||
t.Errorf("Expected nil, got error")
|
|
||||||
}
|
|
||||||
os.RemoveAll("test-auth-token")
|
|
||||||
}
|
|
29
tools/Cowsay.md
Normal file
29
tools/Cowsay.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# 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)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
```
|
3
tools/Editor.md
Normal file
3
tools/Editor.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Input Method Editor
|
||||||
|
|
||||||
|
This tool uses your $EDITOR to buffer keystrokes.
|
15
tools/HelloWorld.md
Normal file
15
tools/HelloWorld.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Hello World
|
||||||
|
|
||||||
|
Bare bones keyboard tool.
|
||||||
|
|
||||||
|
``` go
|
||||||
|
--- /tools/helloworld.go
|
||||||
|
@{tool header}
|
||||||
|
|
||||||
|
func doTool(){
|
||||||
|
fmt.Println("Hello World")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@{tool main}
|
||||||
|
---
|
48
tools/Tools.md
Normal file
48
tools/Tools.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
---
|
Loading…
Reference in New Issue
Block a user