Skip to content

Commit

Permalink
overload CMS system controllers to show where to integrate S2 links (…
Browse files Browse the repository at this point in the history
…smart & snapping links) for smart / snapping redirection
  • Loading branch information
donrestarone committed Dec 1, 2024
1 parent fd8019e commit e0e0388
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 0 deletions.
33 changes: 33 additions & 0 deletions app/controllers/comfy/cms/base_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# frozen_string_literal: true

class Comfy::Cms::BaseController < ComfortableMexicanSofa.config.public_base_controller.to_s.constantize

before_action :load_cms_site

helper Comfy::CmsHelper

protected

def load_cms_site
@cms_site ||=
if params[:site_id]
::Comfy::Cms::Site.find_by_id(params[:site_id])
else
::Comfy::Cms::Site.find_site(request.host_with_port.downcase, request.fullpath)
end

if @cms_site
if @cms_site.path.present? && !params[:site_id]
if params[:cms_path]&.match(%r{\A#{@cms_site.path}})

Check notice

Code scanning / Brakeman

Parameter value used in regular expression. Note

Parameter value used in regular expression.
params[:cms_path].gsub!(%r{\A#{@cms_site.path}}, "")

Check notice

Code scanning / Brakeman

Parameter value used in regular expression. Note

Parameter value used in regular expression.
params[:cms_path]&.gsub!(%r{\A/}, "")
else
raise ActionController::RoutingError, "Site Not Found"
end
end
else
raise ActionController::RoutingError, "Site Not Found"
end
end

end
97 changes: 97 additions & 0 deletions app/controllers/comfy/cms/content_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# frozen_string_literal: true

class Comfy::Cms::ContentController < Comfy::Cms::BaseController

# Authentication module must have `authenticate` method
include ComfortableMexicanSofa.config.public_auth.to_s.constantize

# Authorization module must have `authorize` method
include ComfortableMexicanSofa.config.public_authorization.to_s.constantize

before_action :load_seeds
before_action :load_cms_page,
:authenticate,
:authorize,
only: :show

def show
if @cms_page.target_page.present?
redirect_to @cms_page.target_page.url(relative: true)
else
respond_to do |format|
format.html { render_page }
format.json do
@cms_page.content = render_to_string(
inline: @cms_page.content_cache,
layout: false
)
json_page = @cms_page.as_json(ComfortableMexicanSofa.config.page_to_json_options)
render json: json_page
end
end
end
end

protected

def render_page(status = :ok)
render inline: @cms_page.content_cache,
layout: app_layout,
status: status,
content_type: mime_type
end

# it's possible to control mimetype of a page by creating a `mime_type` field
def mime_type
mime_block = @cms_page.fragments.detect { |f| f.identifier == "mime_type" }
mime_block&.content&.strip || "text/html"
end

def app_layout
return false if request.xhr? || !@cms_layout
@cms_layout.app_layout.present? ? @cms_layout.app_layout : false
end

def load_seeds
return unless ComfortableMexicanSofa.config.enable_seeds
ComfortableMexicanSofa::Seeds::Importer.new(@cms_site.identifier).import!
end

# Attempting to populate @cms_page and @cms_layout instance variables so they
# can be used in view helpers/partials
def load_cms_page
unless find_cms_page_by_full_path("/#{params[:cms_path]}")
if find_cms_page_by_full_path("/404")
render_page(:not_found)
else
message = "Page Not Found at: \"#{params[:cms_path]}\""
raise ActionController::RoutingError, message
end
end
end

# Getting page and setting content_cache and fragments data if we need to
# serve translation data
def find_cms_page_by_full_path(full_path)
@cms_page = @cms_site.pages.published.find_by!(full_path: full_path)

@cms_page.translate!
@cms_layout = @cms_page.layout

@cms_page

rescue ActiveRecord::RecordNotFound
# page miss in CMS system, process via smart links
top_level_subdomain_targets = Subdomain.all.pluck(:name)
request_path = request.path.gsub('/', '')
user = Current.user
api_renderer_request = Current.is_api_html_renderer_request
visit = Current.visit
if request_path == 'google.com'
# proof of concept
return redirect_to "https://#{request_path}"
end
nil
end

end

0 comments on commit e0e0388

Please sign in to comment.