Browse Source

Engine error page, connection to MySQL

Vova Tkach 6 years ago
parent
commit
e7e6ee735b

+ 21 - 0
backend.go

@@ -1,6 +1,10 @@
 package main
 
 import (
+	"database/sql"
+
+	_ "github.com/go-sql-driver/mysql"
+
 	"golang-fave/engine/wrapper"
 	templates "golang-fave/engine/wrapper/resources/templates"
 	utils "golang-fave/engine/wrapper/utils"
@@ -12,6 +16,23 @@ func handlerBackEnd(wrapper *wrapper.Wrapper) bool {
 		return wrapper.TmplBackEnd(templates.CpMySQL, nil)
 	}
 
+	// Connect to database
+	mc, err := utils.MySqlConfigRead(wrapper.DirVHostHome)
+	if wrapper.EngineErrMsgOnError(err) {
+		return true
+	}
+	db, err := sql.Open("mysql", mc.User+":"+mc.Password+"@tcp("+mc.Host+":"+mc.Port+")/"+mc.Name)
+	if wrapper.EngineErrMsgOnError(err) {
+		return true
+	}
+	defer db.Close()
+	err = db.Ping()
+	if wrapper.EngineErrMsgOnError(err) {
+		return true
+	}
+
+	// Check if any user exists
+
 	// Login page
 	return wrapper.TmplBackEnd(templates.CpLogin, nil)
 }

+ 3 - 0
engine/wrapper/resources/templates/page.engerror.go

@@ -0,0 +1,3 @@
+package templates
+
+var PageEngError = []byte(`<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><meta name="theme-color" content="#205081" /><title>Engine Error</title><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8" /><link rel="shortcut icon" href="{{$.System.PathIcoFav}}" type="image/x-icon" /><link rel="stylesheet" type="text/css" media="all" href="{{$.System.PathCssStyles}}" /></head><body><div class="wrapper"><div class="logo"><div class="svg"><img src="{{$.System.PathSvgLogo}}" width="150" height="150" /></div></div><h1>Engine Error</h1><h2>{{$.Data.ErrorMessage}}</h2></div></body></html>`)

+ 23 - 0
engine/wrapper/resources/templates/page.engerror.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<meta name="theme-color" content="#205081" />
+		<title>Engine Error</title>
+		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+		<meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8" />
+		<link rel="shortcut icon" href="{{$.System.PathIcoFav}}" type="image/x-icon" />
+		<link rel="stylesheet" type="text/css" media="all" href="{{$.System.PathCssStyles}}" />
+	</head>
+	<body>
+		<div class="wrapper">
+			<div class="logo">
+				<div class="svg">
+					<img src="{{$.System.PathSvgLogo}}" width="150" height="150" />
+				</div>
+			</div>
+			<h1>Engine Error</h1>
+			<h2>{{$.Data.ErrorMessage}}</h2>
+		</div>
+	</body>
+</html>

+ 21 - 0
engine/wrapper/static.go

@@ -177,3 +177,24 @@ func (this *Wrapper) printTmplPageError(perr error) {
 		},
 	})
 }
+
+func (this *Wrapper) printEnginePageError(perr error) {
+	tmpl, err := template.New("template").Parse(string(templates.PageEngError))
+	if err != nil {
+		(*this.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+		(*this.W).WriteHeader(http.StatusInternalServerError)
+		(*this.W).Header().Set("Content-Type", "text/html")
+		(*this.W).Write([]byte("<h1>Critical engine error!</h1>"))
+		(*this.W).Write([]byte("<h2>" + perr.Error() + "</h2>"))
+		return
+	}
+	(*this.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+	(*this.W).WriteHeader(http.StatusInternalServerError)
+	(*this.W).Header().Set("Content-Type", "text/html")
+	tmpl.Execute(*this.W, tmplDataAll{
+		System: this.tmplGetSystemData(),
+		Data: tmplDataErrorMsg{
+			ErrorMessage: perr.Error(),
+		},
+	})
+}

+ 8 - 0
engine/wrapper/wrapper.go

@@ -206,3 +206,11 @@ func (this *Wrapper) TmplBackEnd(tcont []byte, data interface{}) bool {
 	})
 	return true
 }
+
+func (this *Wrapper) EngineErrMsgOnError(err error) bool {
+	if err != nil {
+		this.printEnginePageError(err)
+		return true
+	}
+	return false
+}

+ 2 - 0
frontend.go

@@ -28,6 +28,8 @@ func handlerFrontEnd(wrapper *wrapper.Wrapper) bool {
 		return true
 	}
 
+	// Connect to database
+
 	// Else logic here
 	if wrapper.R.URL.Path == "/" {
 		return wrapper.TmplFrontEnd("index", TmplData{