require “web_pipe” require 'web_pipe/plugs/content_type' require “web_pipe/plugs/config” require “rack/csrf” require “rack/session/cookie” require 'rack-flash' require “<%= config %>/container”

WebPipe.load_extensions(

:container,
:cookies,
:flash,
:dry_schema,
:dry_view,
:params,
:redirect,
:router_params,
:session,
:url

)

module <%= config %>

class Web
  include WebPipe

  use :cookies, Rack::Session::Cookie, key: "<%= config[:underscored_project_name] %>.session", secret: Container["settings"].session_secret
  use :csrf, Rack::Csrf, raise: true
  use :flash, Rack::Flash

  plug :config, WebPipe::Plugs::Config.(
    container: Container,

    view_context: lambda do |conn|
      {
        flash: conn.flash,
        csrf_token: Rack::Csrf.token(conn.env),
        csrf_metatag: Rack::Csrf.metatag(conn.env),
        csrf_tag: Rack::Csrf.tag(conn.env)
      }
    end,

    sanitization_handler: lambda do |conn, result|
      conn.
        set_status(500).
        set_response_body("Params #{conn.params} do not conform with the schema: #{result.errors.inspect}").
        halt
    end
  )

  plug :content_type, WebPipe::Plugs::ContentType.('text/html')
end

end