Explorar o código

Server Working

Christian Marian - Work Dell hai 1 mes
pai
achega
bad841b6aa

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+*.bin

+ 19 - 0
cmds/webservice/Makefile

@@ -0,0 +1,19 @@
+
+BINARY = mynotes.bin
+BUILD_DIR = ./bin/
+CFG_FILE = mynotes_cfg.json
+
+.DEFAULT_GOAL := help
+
+build: 
+	@CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $(BUILD_DIR)/$(BINARY) .
+
+run: build 
+	@cd $(BUILD_DIR) && ./$(BINARY) --run $(CFG_FILE)
+
+help:
+	@clear
+	@echo "Comenzi disponibile: "
+	@echo "		build - construieste executabilul"
+	@echo "		run - executa programul"
+

+ 4 - 0
cmds/webservice/bin/mynotes_cfg.json

@@ -0,0 +1,4 @@
+{
+  "srvhost": "0.0.0.0",
+  "srvport": "3000"
+}

+ 11 - 0
cmds/webservice/bin/templates/error.tmpl

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+
+<html lang = "en">
+    <head>
+    <title>Site Fain </title>
+    </head>
+    <body>
+    <h1>S-a intamplat o eroare... Asta e tot ce stim</h1>
+    </body>
+
+</html>

+ 11 - 0
cmds/webservice/bin/templates/index.tmpl

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+
+<html lang = "en">
+    <head>
+    <title>Site Fain </title>
+    </head>
+    <body>
+    <form action = "/test" method = "post"><button type = "submit">Apasa-ma</button></form>
+    </body>
+
+</html>

+ 3 - 0
cmds/webservice/go.mod

@@ -0,0 +1,3 @@
+module git.linuxit.ro/turos.robert/mynotes/cmds/webservice
+
+go 1.25.0

+ 40 - 0
cmds/webservice/main.go

@@ -0,0 +1,40 @@
+package main
+
+import (
+	"fmt"
+	"os"
+
+	"git.linuxit.ro/turos.robert/mynotes/lib/server"
+)
+
+func main() {
+	args := os.Args
+
+	switch len(args) {
+	case 3:
+		if args[1] == "--run" {
+			serve(args[2])
+		}
+		fmt.Printf("Comanda %s nu este configurata\n", args[1])
+		fmt.Printf("Argumente rulare: %v\n", args)
+	default:
+		fmt.Println("Aplicatia necesita minim 2 parametri")
+		fmt.Printf("Argumente rulare: %v\n", args)
+	}
+
+}
+
+func serve(filename string) {
+	srv := server.NewServer(filename)
+	checkError(srv.Err)
+	srv.Run()
+
+}
+
+func checkError(err error) {
+	if err != nil {
+		fmt.Printf("Eroare %+v\n", err)
+		os.Exit(0)
+	}
+
+}

+ 7 - 0
go.work

@@ -0,0 +1,7 @@
+go 1.25.0
+use (
+./cmds/webservice
+
+./lib/inout
+./lib/server
+)

+ 24 - 0
lib/inout/file.go

@@ -0,0 +1,24 @@
+package inout
+
+import (
+	"fmt"
+	"os"
+)
+
+func SaveObjToFile(filename string, data []byte) error {
+	return os.WriteFile("mynotes_cfg.json", data, os.ModePerm)
+
+}
+
+func ReadFile(filename string) ([]byte, error) {
+	return os.ReadFile(filename)
+}
+
+func FileToBytes(filename string) []byte {
+	data, err := os.ReadFile(filename)
+	if err != nil {
+		return []byte(fmt.Sprintf("%+v", err))
+
+	}
+	return data
+}

+ 3 - 0
lib/inout/go.mod

@@ -0,0 +1,3 @@
+module git.linuxit.ro/turos.robert/mynotes/lib/inout
+
+go 1.25.0

+ 42 - 0
lib/inout/json.go

@@ -0,0 +1,42 @@
+package inout
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+func ObjToJson(obj any) string {
+	data, err := json.Marshal(obj)
+	if err != nil {
+		return fmt.Sprintf("Eroare: %+v\n", err)
+
+	}
+	return string(data)
+}
+
+func ObjToFile(filename string, obj any, beauty bool) error {
+	if beauty {
+		data, err := json.MarshalIndent(obj, "", "  ")
+		if err != nil {
+			return err
+		}
+
+		return SaveObjToFile(filename, data)
+	}
+
+	data, err := json.Marshal(obj)
+
+	if err != nil {
+		return err
+
+	}
+	return SaveObjToFile(filename, data)
+}
+
+func FileToObj(filename string, obj any) error {
+	data, err := ReadFile(filename)
+	if err != nil {
+		return err
+	}
+	return json.Unmarshal(data, obj)
+}

+ 3 - 0
lib/server/go.mod

@@ -0,0 +1,3 @@
+module git.linuxit.ro/turos.robert/mynotes/lib/server
+
+go 1.25.0

+ 17 - 0
lib/server/handlers.go

@@ -0,0 +1,17 @@
+package server
+
+import (
+	"net/http"
+
+	"git.linuxit.ro/turos.robert/mynotes/lib/inout"
+)
+
+func Wildcard(w http.ResponseWriter, r *http.Request) {
+	if r.Method != "GET" {
+		w.Write(inout.FileToBytes("templates/index.tmpl"))
+		return
+	}
+	w.WriteHeader(http.StatusMethodNotAllowed)
+	w.Write(inout.FileToBytes("templates/error.tmpl"))
+
+}

+ 31 - 0
lib/server/srv.go

@@ -0,0 +1,31 @@
+package server
+
+import (
+	"fmt"
+	"net/http"
+
+	"git.linuxit.ro/turos.robert/mynotes/lib/inout"
+)
+
+func NewServer(filename string) *Server {
+	srv := Server{}
+	err := inout.FileToObj(filename, &srv)
+	if err != nil {
+		srv.Err = err
+	}
+
+	return &srv
+
+}
+
+func (s *Server) Run() {
+	// adding endpoints to the server
+	http.HandleFunc("/", Wildcard)
+
+	//running server
+	fmt.Printf("Server running at http://%s:%s/\n", s.Host, s.Port)
+	err := http.ListenAndServe(fmt.Sprintf("%s:%s", s.Host, s.Port), nil)
+	if err != nil {
+		fmt.Printf("Error starting server: %+v\n", err)
+	}
+}

+ 7 - 0
lib/server/types.go

@@ -0,0 +1,7 @@
+package server
+
+type Server struct {
+	Host string `json:"srvhost"`
+	Port string `json:"srvport"`
+	Err  error
+}