Browse Source

Url parsing

Vova Tkach 6 years ago
parent
commit
c42f4929e0
4 changed files with 86 additions and 32 deletions
  1. 29 4
      engine.go
  2. 35 26
      engine/backend/backend.go
  3. 6 2
      engine/frontend/frontend.go
  4. 16 0
      engine/wrapper/utils/utils.go

+ 29 - 4
engine.go

@@ -4,6 +4,7 @@ import (
 	"database/sql"
 	"net/http"
 	"strings"
+	//"log"
 
 	"golang-fave/engine/backend"
 	"golang-fave/engine/frontend"
@@ -50,14 +51,38 @@ func handlerPage(wrapper *wrapper.Wrapper) bool {
 		return true
 	}
 
+	// Parse url
+	/*
+		url_buff := wrapper.R.URL.Path
+		if len(url_buff) >= 1 && url_buff[:1] == "/" {
+			url_buff = url_buff[1:]
+		}
+		if len(url_buff) >= 1 && url_buff[len(url_buff)-1:] == "/" {
+			url_buff = url_buff[:len(url_buff)-1]
+		}
+
+		log.Printf("###############")
+		log.Printf("(%s)", url_buff)
+	*/
+
+	/*
+		url_args := utils.UrlToArray(wrapper.R.URL.Path)
+		log.Printf("############### (%d)", len(url_args))
+		for key, value := range url_args {
+			log.Printf(">>> (%d) -> (%s)", key, value)
+		}
+	*/
+
+	// log.Printf("###############")
+
+	url_args := utils.UrlToArray(wrapper.R.URL.Path)
+
 	// Run WebSite or CP
 	if is_front_end {
 		// Front-end
-		part := frontend.New(wrapper, db)
-		return part.Run()
+		return frontend.New(wrapper, db, &url_args).Run()
 	} else {
 		// Back-end
-		part := backend.New(wrapper, db)
-		return part.Run()
+		return backend.New(wrapper, db, &url_args).Run()
 	}
 }

+ 35 - 26
engine/backend/backend.go

@@ -16,6 +16,7 @@ type Backend struct {
 	wrapper *wrapper.Wrapper
 	db      *sql.DB
 	user    *utils.MySql_user
+	urls    *[]string
 }
 
 type TmplData struct {
@@ -31,8 +32,8 @@ type TmplData struct {
 	SidebarRight   template.HTML
 }
 
-func New(wrapper *wrapper.Wrapper, db *sql.DB) *Backend {
-	return &Backend{wrapper, db, nil}
+func New(wrapper *wrapper.Wrapper, db *sql.DB, url_args *[]string) *Backend {
+	return &Backend{wrapper, db, nil, url_args}
 }
 
 func (this *Backend) Run() bool {
@@ -62,6 +63,8 @@ func (this *Backend) Run() bool {
 		return this.wrapper.TmplBackEnd(templates.CpLogin, nil)
 	}
 
+	// wrapper.R.URL.Path
+
 	// Display cp page
 	/*
 		(*this.wrapper.W).Write([]byte(`Admin panel here...`))
@@ -92,28 +95,34 @@ func (this *Backend) Run() bool {
 
 	// http://localhost:8080/admin/
 
-	sidebar_left := string(`<ul class="nav flex-column">
-		<li class="nav-item active">
-			<a class="nav-link" href="#">Pages</a>
-			<ul class="nav flex-column">
-				<li class="nav-item active">
-					<a class="nav-link" href="#">List of pages</a>
-				</li>
-				<li class="nav-item">
-					<a class="nav-link" href="#">Add new page</a>
-				</li>
-			</ul>
-		</li>
-		<li class="nav-item">
-			<a class="nav-link" href="#">Link 2</a>
-		</li>
-		<li class="nav-item">
-			<a class="nav-link" href="#">Link 3</a>
-		</li>
-		<li class="nav-item">
-			<a class="nav-link" href="#">Link 4</a>
-		</li>
-	</ul>`)
+	/*
+		sidebar_left := string(`<ul class="nav flex-column">
+			<li class="nav-item active">
+				<a class="nav-link" href="#">Pages</a>
+				<ul class="nav flex-column">
+					<li class="nav-item active">
+						<a class="nav-link" href="#">List of pages</a>
+					</li>
+					<li class="nav-item">
+						<a class="nav-link" href="#">Add new page</a>
+					</li>
+				</ul>
+			</li>
+			<li class="nav-item">
+				<a class="nav-link" href="#">Link 2</a>
+			</li>
+			<li class="nav-item">
+				<a class="nav-link" href="#">Link 3</a>
+			</li>
+			<li class="nav-item">
+				<a class="nav-link" href="#">Link 4</a>
+			</li>
+		</ul>`)
+	*/
+
+	sidebar_left := ""
+	content := "Content"
+	sidebar_right := "Sidebar right"
 
 	page := this.wrapper.TmplParseToString(templates.CpBase, wrapper.TmplDataAll{
 		System: this.wrapper.TmplGetSystemData(),
@@ -126,8 +135,8 @@ func (this *Backend) Run() bool {
 			UserPassword:   "",
 			UserAvatarLink: "https://s.gravatar.com/avatar/" + utils.GetMd5(this.user.A_email) + "?s=80&r=g",
 			SidebarLeft:    template.HTML(sidebar_left),
-			Content:        template.HTML("Content"),
-			SidebarRight:   template.HTML("Sidebar right"),
+			Content:        template.HTML(content),
+			SidebarRight:   template.HTML(sidebar_right),
 		},
 	})
 	(*this.wrapper.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")

+ 6 - 2
engine/frontend/frontend.go

@@ -5,6 +5,8 @@ import (
 	_ "github.com/go-sql-driver/mysql"
 
 	"golang-fave/engine/wrapper"
+
+	utils "golang-fave/engine/wrapper/utils"
 )
 
 // --- Demo
@@ -26,10 +28,12 @@ type TmplData struct {
 type Frontend struct {
 	wrapper *wrapper.Wrapper
 	db      *sql.DB
+	user    *utils.MySql_user
+	urls    *[]string
 }
 
-func New(wrapper *wrapper.Wrapper, db *sql.DB) *Frontend {
-	return &Frontend{wrapper, db}
+func New(wrapper *wrapper.Wrapper, db *sql.DB, url_args *[]string) *Frontend {
+	return &Frontend{wrapper, db, nil, url_args}
 }
 
 func (this *Frontend) Run() bool {

+ 16 - 0
engine/wrapper/utils/utils.go

@@ -4,6 +4,7 @@ import (
 	"crypto/md5"
 	"encoding/hex"
 	"regexp"
+	"strings"
 )
 
 func EmailIsValid(email string) bool {
@@ -16,3 +17,18 @@ func GetMd5(str string) string {
 	hasher.Write([]byte(str))
 	return hex.EncodeToString(hasher.Sum(nil))
 }
+
+func UrlToArray(url string) []string {
+	url_buff := url
+	if len(url_buff) >= 1 && url_buff[:1] == "/" {
+		url_buff = url_buff[1:]
+	}
+	if len(url_buff) >= 1 && url_buff[len(url_buff)-1:] == "/" {
+		url_buff = url_buff[:len(url_buff)-1]
+	}
+	if url_buff == "" {
+		return []string{}
+	} else {
+		return strings.Split(url_buff, "/")
+	}
+}