Sha256: a952204e271a311f052f8a4af89b2cfcdf10e4dc9a88b41b885c7c2e825a3c5c

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true

module Decidim
  class InvalidUrlError < StandardError; end

  class LinksController < Decidim::ApplicationController
    skip_before_action :store_current_location

    helper Decidim::ExternalDomainHelper
    helper_method :external_url

    before_action :parse_url
    rescue_from Decidim::InvalidUrlError, with: :invalid_url
    rescue_from URI::InvalidURIError, with: :invalid_url

    def new
      headers["X-Robots-Tag"] = "noindex"
    end

    private

    def invalid_url
      flash[:alert] = I18n.t("decidim.links.invalid_url")
      redirect_to decidim.root_path
    end

    def parse_url
      raise Decidim::InvalidUrlError unless external_url

      parts = external_url.match %r{\A(([a-z]+):)?//([^/]+)(/.*)?\z}
      raise Decidim::InvalidUrlError unless parts

      @url_parts = {
        protocol: parts[1],
        domain: parts[3],
        path: parts[4]
      }
    end

    def external_url
      @external_url ||= URI.parse(params[:external_url]).to_s
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
decidim-core-0.26.5 app/controllers/decidim/links_controller.rb
decidim-core-0.27.2 app/controllers/decidim/links_controller.rb