Init and optimizations
This commit is contained in:
221
main.go
Normal file
221
main.go
Normal file
@@ -0,0 +1,221 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"git.send.nrw/sendnrw/raccws/racc_common"
|
||||
"git.send.nrw/sendnrw/raccws/racc_filebrowser"
|
||||
"git.send.nrw/sendnrw/raccws/racc_httpstatus"
|
||||
"git.send.nrw/sendnrw/raccws/racc_logging"
|
||||
"git.send.nrw/sendnrw/raccws/racc_middleware"
|
||||
"git.send.nrw/sendnrw/raccws/racc_session"
|
||||
"git.send.nrw/sendnrw/raccws/racc_sysauth"
|
||||
"git.send.nrw/sendnrw/raccws/racc_template"
|
||||
)
|
||||
|
||||
var DefaultAppPath string = "/"
|
||||
var DefaultLogNumber int = 500
|
||||
|
||||
var CORE_SESSIONFILE string = "serversessions.json"
|
||||
var CORE_SERVERLOG string = "serverlog.json"
|
||||
var CORE_RELPATH string = "./"
|
||||
|
||||
func DefaultRoute(w http.ResponseWriter, r *http.Request) {
|
||||
//fmt.Println(r.URL.Path)
|
||||
if r.URL.Path == "/" {
|
||||
http.Redirect(w, r, DefaultAppPath, http.StatusMovedPermanently)
|
||||
}
|
||||
fileInfo, err := os.Stat(CORE_RELPATH + r.URL.Path)
|
||||
if os.IsNotExist(err) {
|
||||
racc_httpstatus.Default404(w, r)
|
||||
return
|
||||
}
|
||||
if !fileInfo.IsDir() {
|
||||
http.ServeFile(w, r, CORE_RELPATH+r.URL.Path)
|
||||
return
|
||||
} else {
|
||||
racc_httpstatus.Default404(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func prepareExit() {
|
||||
fmt.Println("Running exit tasks...")
|
||||
// Hier können Sie Ihre Aufräumarbeiten ausführen
|
||||
SaveFile(CORE_SESSIONFILE, &racc_session.SessionStore)
|
||||
SaveFile(CORE_SERVERLOG, racc_logging.GetLastXitems(DefaultLogNumber))
|
||||
fmt.Println("Exit completed.")
|
||||
}
|
||||
|
||||
func main() {
|
||||
/* */
|
||||
//app_adinfo.MakeDefault()
|
||||
/* */
|
||||
/*server_port := flag.String("port", "8080", "Port to be used for http server")
|
||||
server_mode := flag.String("mode", "http", "Security mode the server should run (http/https)")
|
||||
server_tls_key := flag.String("key", "private.key", "Private key file")
|
||||
server_tls_cert := flag.String("cert", "public.crt", "Public cert file")
|
||||
flag.Parse()*/
|
||||
|
||||
HTTP_PORT := racc_common.GetENV("HTTP_PORT", "8080")
|
||||
HTTP_TLS := racc_common.GetENV("HTTP_TLS", "0")
|
||||
HTTP_TLS_PRIVATEKEY := racc_common.GetENV("HTTP_TLS_PRIVATEKEY", "")
|
||||
HTTP_TLS_CERTIFICATE := racc_common.GetENV("HTTP_TLS_CERTIFICATE", "")
|
||||
|
||||
CORE_SESSIONFILE = racc_common.GetENV("CORE_SESSIONFILE", "serversessions.json")
|
||||
CORE_SERVERLOG = racc_common.GetENV("CORE_SERVERLOG", "serverlog.json")
|
||||
CORE_RELPATH = racc_common.GetENV("CORE_RELPATH", "./")
|
||||
|
||||
/* Print actual settings */
|
||||
fmt.Println("----------")
|
||||
fmt.Println("Service configured with settings:")
|
||||
fmt.Println("----------")
|
||||
fmt.Println("HTTP-PORT: "+HTTP_PORT, "HTTP_TLS: "+HTTP_TLS, "HTTP_TLS_PRIVATEKEY: "+HTTP_TLS_PRIVATEKEY, "HTTP_TLS_CERTIFICATE: "+HTTP_TLS_CERTIFICATE)
|
||||
fmt.Println("CORE_SESSIONFILE: "+CORE_SESSIONFILE, "CORE_SERVERLOG: "+CORE_SERVERLOG, "CORE_RELPATH: "+CORE_RELPATH)
|
||||
fmt.Println("----------")
|
||||
|
||||
// Signal-Kanal einrichten
|
||||
stop := make(chan os.Signal, 1)
|
||||
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
// Goroutine, die auf Signale wartet
|
||||
go func() {
|
||||
<-stop
|
||||
fmt.Println("Received stop signal")
|
||||
prepareExit()
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
// Hauptprogramm
|
||||
fmt.Println("Program is running. Press Ctrl+C to exit.")
|
||||
|
||||
/* Load Infrastructure */
|
||||
/* Load Server-Log */
|
||||
LoadFile(CORE_SERVERLOG, &racc_logging.LogBook)
|
||||
/* Load Session-Data */
|
||||
LoadFile(CORE_SESSIONFILE, &racc_session.SessionStore)
|
||||
|
||||
/* Router-Definition */
|
||||
mainRouter := http.NewServeMux()
|
||||
defaultRouter := http.NewServeMux()
|
||||
apiRouter := http.NewServeMux()
|
||||
portalRouter := http.NewServeMux()
|
||||
//adminRouter := http.NewServeMux()
|
||||
userRouter := http.NewServeMux()
|
||||
|
||||
/* Main-Router-Middleware */
|
||||
mainMiddlewareStack := racc_middleware.CreateStack(
|
||||
racc_session.SessionMiddleware,
|
||||
)
|
||||
|
||||
/* Admin-Router-Middleware */
|
||||
defaultMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging)
|
||||
apiMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging, racc_sysauth.BearerAuthMiddleware("auth_bearer.json"))
|
||||
portalMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging, racc_template.RenderApplicationTemplate("html-templates/application_1.html", nil))
|
||||
//adminMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging, racc_sysauth.BasicAuthMiddleware("auth_basic_admin.json"))
|
||||
userMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging)
|
||||
//appDemoMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging)
|
||||
appFileMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging)
|
||||
//appDynDNSMiddlewareStack := racc_middleware.CreateStack(racc_logging.Logging)
|
||||
|
||||
/* Main-Router-Routen */
|
||||
mainRouter.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
|
||||
mainRouter.Handle("/api/", apiMiddlewareStack(http.StripPrefix("/api", apiRouter)))
|
||||
mainRouter.Handle("/portal/", portalMiddlewareStack(http.StripPrefix("/portal", portalRouter)))
|
||||
//mainRouter.Handle("/admin/", adminMiddlewareStack(http.StripPrefix("/admin", app_admin.Main())))
|
||||
mainRouter.Handle("/user/", userMiddlewareStack(http.StripPrefix("/user", userRouter)))
|
||||
//mainRouter.Handle("/demo/", appDemoMiddlewareStack(http.StripPrefix("/demo", app_demo.Main())))
|
||||
mainRouter.Handle("/files/", appFileMiddlewareStack(http.StripPrefix("/files", racc_filebrowser.Router())))
|
||||
//mainRouter.Handle("/dns/", appDynDNSMiddlewareStack(http.StripPrefix("/dns", app_dyndns.Main())))
|
||||
|
||||
/* Default-Route (Should stay here forever) */
|
||||
mainRouter.Handle("/", defaultMiddlewareStack(http.StripPrefix("", defaultRouter)))
|
||||
defaultRouter.HandleFunc("/", DefaultRoute)
|
||||
|
||||
/* Sub-Router-Routen */
|
||||
//adminRouter.HandleFunc("/sessions", app_admin.adminSessionHandler)
|
||||
apiRouter.HandleFunc("/", HttpSaveFile(CORE_SERVERLOG, &racc_logging.LogBook))
|
||||
/* */
|
||||
server := http.Server{
|
||||
Addr: ":" + HTTP_PORT,
|
||||
Handler: mainMiddlewareStack(mainRouter),
|
||||
}
|
||||
|
||||
/* */
|
||||
fmt.Println("Server listening on port :" + HTTP_PORT)
|
||||
if HTTP_TLS == "0" {
|
||||
fmt.Println("Protocol is http (insecure)")
|
||||
StopServer(server.ListenAndServe())
|
||||
}
|
||||
if HTTP_TLS == "1" {
|
||||
fmt.Println("Protocol is https (secure)")
|
||||
StopServer(server.ListenAndServeTLS(HTTP_TLS_CERTIFICATE, HTTP_TLS_PRIVATEKEY))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func StopServer(e error) {
|
||||
fmt.Println("Stopping server...")
|
||||
prepareExit()
|
||||
fmt.Println("Server stopped!")
|
||||
}
|
||||
|
||||
func HttpSaveFile(xfile string, a any) racc_httpstatus.App {
|
||||
return func(next_w http.ResponseWriter, next_r *http.Request) {
|
||||
file, _ := os.Create(xfile)
|
||||
encoder := json.NewEncoder(file)
|
||||
err := encoder.Encode(a)
|
||||
if err != nil {
|
||||
fmt.Println("Error encoding JSON:", err)
|
||||
}
|
||||
file.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func SaveFile(xfile string, a any) {
|
||||
file, _ := os.Create(xfile)
|
||||
encoder := json.NewEncoder(file)
|
||||
err := encoder.Encode(a)
|
||||
if err != nil {
|
||||
fmt.Println("Error encoding JSON:", err)
|
||||
}
|
||||
file.Close()
|
||||
fmt.Println("Saved content to: ", xfile)
|
||||
}
|
||||
|
||||
func HttpLoadFile(xfile string, a any) racc_httpstatus.App {
|
||||
return func(next_w http.ResponseWriter, next_r *http.Request) {
|
||||
if _, err := os.Stat(xfile); os.IsNotExist(err) {
|
||||
fmt.Println("Speicherdatei nicht gefunden, neue Map wird erstellt")
|
||||
} else {
|
||||
file, _ := os.Open(xfile)
|
||||
decoder := json.NewDecoder(file)
|
||||
err := decoder.Decode(a)
|
||||
if err != nil {
|
||||
fmt.Println("Fehler in JSON-Datei:", err)
|
||||
}
|
||||
file.Close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func LoadFile(xfile string, a any) {
|
||||
if _, err := os.Stat(xfile); os.IsNotExist(err) {
|
||||
fmt.Println("Speicherdatei nicht gefunden, neue Map wird erstellt")
|
||||
} else {
|
||||
file, _ := os.Open(xfile)
|
||||
decoder := json.NewDecoder(file)
|
||||
err := decoder.Decode(a)
|
||||
if err != nil {
|
||||
fmt.Println("Fehler in JSON-Datei:", err)
|
||||
}
|
||||
file.Close()
|
||||
}
|
||||
fmt.Println("Loaded content from: ", xfile)
|
||||
}
|
Reference in New Issue
Block a user