github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/pages/actions/show.go (about)

     1  package pageactions
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/fragmenta/auth/can"
     7  	"github.com/fragmenta/mux"
     8  	"github.com/fragmenta/server"
     9  	"github.com/fragmenta/view"
    10  
    11  	"github.com/fragmenta/fragmenta-cms/src/lib/session"
    12  	"github.com/fragmenta/fragmenta-cms/src/pages"
    13  	"github.com/fragmenta/fragmenta-cms/src/redirects"
    14  )
    15  
    16  // HandleShow displays a single page.
    17  func HandleShow(w http.ResponseWriter, r *http.Request) error {
    18  
    19  	// Fetch the  params
    20  	params, err := mux.Params(r)
    21  	if err != nil {
    22  		return server.InternalError(err)
    23  	}
    24  
    25  	// Find the page
    26  	page, err := pages.Find(params.GetInt(pages.KeyName))
    27  	if err != nil {
    28  		return server.NotFoundError(err)
    29  	}
    30  
    31  	// Authorise access
    32  	user := session.CurrentUser(w, r)
    33  
    34  	if !page.IsPublished() {
    35  		err = can.Show(page, user)
    36  		if err != nil {
    37  			return server.NotAuthorizedError(err)
    38  		}
    39  	}
    40  
    41  	// Render the template
    42  	view := view.NewRenderer(w, r)
    43  	view.CacheKey(page.CacheKey())
    44  	view.AddKey("page", page)
    45  	view.AddKey("currentUser", user)
    46  	view.AddKey("meta_title", page.Name)
    47  	view.AddKey("meta_keywords", page.Keywords)
    48  	view.AddKey("meta_desc", page.Summary)
    49  	view.Template(page.ShowTemplate())
    50  	return view.Render()
    51  }
    52  
    53  // HandleShowPath serves requests to a custom page url
    54  func HandleShowPath(w http.ResponseWriter, r *http.Request) error {
    55  
    56  	// Fetch the  params
    57  	params, err := mux.Params(r)
    58  	if err != nil {
    59  		return server.InternalError(err)
    60  	}
    61  
    62  	// Find the page
    63  	path := "/" + params.Get("path")
    64  	page, err := pages.FindFirst("url=?", path)
    65  	if err != nil {
    66  		redirect, err := redirects.FindFirst("old_url=?", path)
    67  		if err != nil {
    68  			return server.NotFoundError(err)
    69  		}
    70  		return server.Redirect(w, r, redirect.NewURL)
    71  	}
    72  
    73  	// Authorise access IF the page is not published
    74  	user := session.CurrentUser(w, r)
    75  	if !page.IsPublished() {
    76  		err = can.Show(page, user)
    77  		if err != nil {
    78  			return server.NotAuthorizedError(err)
    79  		}
    80  	}
    81  
    82  	// Render the template
    83  	view := view.NewRenderer(w, r)
    84  	view.CacheKey(page.CacheKey())
    85  	view.AddKey("page", page)
    86  	view.AddKey("currentUser", user)
    87  	view.AddKey("meta_title", page.Name)
    88  	view.AddKey("meta_keywords", page.Keywords)
    89  	view.AddKey("meta_desc", page.Summary)
    90  	view.Template(page.ShowTemplate())
    91  	return view.Render()
    92  }