commit 1d724cd5b3358151aed912f13d2aad159bb79751 Author: Max Chaev Date: Fri Mar 14 15:23:44 2025 +0300 First commit | 1.0.0 | Stable pushing repo to gitea diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..af7862b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "spellright.language": [ + "en-US-10-1." + ], + "spellright.documentTypes": [ + "markdown", + "latex", + "plaintext" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed83a72 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# go-rest-cctweaked + +Small REST api manipulation program for my little experiment with CC:Tweaked minecraft mod. \ No newline at end of file diff --git a/cli/ArgsProcessor.go b/cli/ArgsProcessor.go new file mode 100644 index 0000000..462928d --- /dev/null +++ b/cli/ArgsProcessor.go @@ -0,0 +1,70 @@ +package cli + +import ( + "fmt" + "os" +) + +const PROJECT_NAME string = "go-rest-cctweaked" + +type knownArguments int + +const ( + enumStart knownArguments = iota + HelpArg + SendArg + RecieveArg + WrongArg +) + +var argumentsDescription = map[knownArguments]string{ + HelpArg: "help - shows help message.", + SendArg: "send - sends cctweaked message to specified restfull endpoint.", + RecieveArg: "recieve - fetches current message on server", +} + +func gracefullExit(msg string) { + fmt.Println(msg) + os.Exit(0) +} + +func BasicInterface() { + args := os.Args[1:] + + if len(args) == 0 { + gracefullExit("Can't find argument. Please refer to --help") + } + + knownArg := getArgType(args[0]) + + switch knownArg { + case HelpArg: + processHelp() + case SendArg: + processSend(args) + case RecieveArg: + processRecieve(args) + case WrongArg: + gracefullExit("Can't find argument. Please refer to --help") + } +} + +func getArgType(argument string) knownArguments { + switch argument { + + case "help": + return HelpArg + case "--help": + return HelpArg + case "-h": + return HelpArg + + case "send": + return SendArg + case "recieve": + return RecieveArg + + default: + return WrongArg + } +} diff --git a/cli/HelpArgument.go b/cli/HelpArgument.go new file mode 100644 index 0000000..b1085c0 --- /dev/null +++ b/cli/HelpArgument.go @@ -0,0 +1,10 @@ +package cli + +import "fmt" + +func processHelp() { + fmt.Printf("--%v help menu--\n", PROJECT_NAME) + for i := enumStart + 1; i < WrongArg; i++ { + fmt.Printf("| %v\n", argumentsDescription[knownArguments(i)]) + } +} diff --git a/cli/RecieveArgument.go b/cli/RecieveArgument.go new file mode 100644 index 0000000..8e04992 --- /dev/null +++ b/cli/RecieveArgument.go @@ -0,0 +1,15 @@ +package cli + +import ( + "fmt" + "go-rest-cctweaked/networking" +) + +func processRecieve(args []string) { + if len(args) < 2 { + gracefullExit("Recieve take additional url argument. Check --help") + } + body := networking.GetJsonBody(args[1]) + + fmt.Println(string(body)) +} diff --git a/cli/SendArgument.go b/cli/SendArgument.go new file mode 100644 index 0000000..0f68372 --- /dev/null +++ b/cli/SendArgument.go @@ -0,0 +1,25 @@ +package cli + +import ( + "fmt" + "go-rest-cctweaked/networking" + "strconv" +) + +func processSend(args []string) { + if len(args) < 4 { + gracefullExit("Send take additional url, content and type arguments. Check --help") + } + url := args[1] + content := args[2] + msgType, err := strconv.Atoi(args[3]) + if err != nil { + panic("Failed converting message type to integer.") + } + + json := networking.EncodeJson(content, msgType) + + statusCode := networking.PostJsonBody(url, json) + + fmt.Printf("Server responded with: %v\n", statusCode) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..610c883 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module go-rest-cctweaked + +go 1.24.1 diff --git a/main.go b/main.go new file mode 100644 index 0000000..f218396 --- /dev/null +++ b/main.go @@ -0,0 +1,10 @@ +package main + +import ( + "go-rest-cctweaked/cli" +) + +func main() { + + cli.BasicInterface() +} diff --git a/networking/jsonFactory.go b/networking/jsonFactory.go new file mode 100644 index 0000000..62e4e29 --- /dev/null +++ b/networking/jsonFactory.go @@ -0,0 +1,39 @@ +package networking + +import ( + "encoding/json" + "fmt" +) + +type cctweakedMessage struct { + Content string `json:"content"` + Msg_type int `json:"msg_type"` +} + +func createMessage(messageContent string, messageType int) cctweakedMessage { + return cctweakedMessage{ + messageContent, + messageType, + } +} + +func DecodeJson(jsonBody []byte) cctweakedMessage { + var message cctweakedMessage + + err := json.Unmarshal(jsonBody, &message) + if err != nil { + fmt.Printf("Failed to decode json from body %v\n", err) + } + + return message +} + +func EncodeJson(messageContent string, messageType int) []byte { + msg := createMessage(messageContent, messageType) + json, err := json.Marshal(msg) + if err != nil { + fmt.Printf("Failed to encode message in json: %v\n", err) + } + + return json +} diff --git a/networking/websiteController.go b/networking/websiteController.go new file mode 100644 index 0000000..21fc772 --- /dev/null +++ b/networking/websiteController.go @@ -0,0 +1,31 @@ +package networking + +import ( + "bytes" + "fmt" + "io" + "net/http" +) + +func GetJsonBody(url string) []byte { + req, err := http.Get(url) + if err != nil { + fmt.Printf("Failed to send request %v\n", err) + } + + body, err := io.ReadAll(req.Body) + if err != nil { + fmt.Printf("Failed to read request body %v\n", err) + } + + return body +} + +func PostJsonBody(url string, json []byte) int { + req, err := http.Post(url, "application/json", bytes.NewBuffer(json)) + if err != nil { + fmt.Printf("Failed to send post request on server: %v\n", err) + } + + return req.StatusCode +}