mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
ee8452282a
* add a new helper for breadcrumb in wiki page * set page header in destroy page * set page header in edit page * set page header in history and rename and edit parent pages * change toolbar items into page header items * add new wiki action to sub header * remove version edit page which is not in use any more * add export as a menu item of the header * fix rubocup errors * fix failing tests * replace page header in annotate page * replace page header in diff page * add page header in select menu page * fix rubocup errors * fix errors on rename test * fix errors on selecting items from toolbar * fix errors on tests for child pages * set correct permission for configure menu item * replace page header in summary page * replace page header in summary details page * edit docs of sub header * add page header in wiki new page * remove controller and a route for edit method * undo changes for docs of sub header * extract header in show page into a new component * use helper method in header component * add wiki module to the breadcrumb * rename page header component for wiki page * simplify how lock and lock implemented * extract sub header * remove wiki title from header of history page * fix page header in new page * use page.find_test_selector in test * fix failing test for summary page * fix failing test for wiki child pages * change the summary test * use test selector for page header title * undo changes for activate user in admin * use test selector in adding editing history test * use test selector in attachment upload test * use test selector in child pages tests * use test selector in wiki menu items tests * change test selector for breadcrumbs * extract conditions to show edit button into a method * extract conditions to show rollback action menu item into a method * extract conditions to show create button into a method * fix duplicated code in test * Remove outdated `show_local_breadcrumb` method which is replaced by the Primer::PageHeader breadcrumb * Remove `default_breadcrumb` method as it serves no prupose any more * Remove the old breadcrumb and its hook completely * remove breadcrumbs path from rename * fix translations errors in storages * undo changes on translations * remove default breadcrumbs in time tracking controller --------- Co-authored-by: Behrokh Satarnejad <b.satarnejad@openproject.com> Co-authored-by: Behrokh Satarnejad <62008897+bsatarnejad@users.noreply.github.com>
193 lines
5.6 KiB
Ruby
193 lines
5.6 KiB
Ruby
module Saml
|
|
class ProvidersController < ::ApplicationController
|
|
include OpTurbo::ComponentStream
|
|
|
|
layout "admin"
|
|
menu_item :plugin_saml
|
|
|
|
before_action :require_admin
|
|
before_action :check_ee, except: %i[index]
|
|
before_action :find_provider, only: %i[show edit import_metadata update confirm_destroy destroy]
|
|
before_action :check_provider_writable, only: %i[update import_metadata]
|
|
before_action :set_edit_state, only: %i[create edit update import_metadata]
|
|
|
|
def index
|
|
@providers = Saml::Provider.order(display_name: :asc)
|
|
end
|
|
|
|
def edit
|
|
respond_to do |format|
|
|
format.turbo_stream do
|
|
component = Saml::Providers::ViewComponent.new(@provider,
|
|
view_mode: :edit,
|
|
edit_mode: @edit_mode,
|
|
edit_state: @edit_state)
|
|
update_via_turbo_stream(component:)
|
|
scroll_into_view_via_turbo_stream("saml-providers-edit-form", behavior: :instant)
|
|
render turbo_stream: turbo_streams
|
|
end
|
|
format.html
|
|
end
|
|
end
|
|
|
|
def show
|
|
respond_to do |format|
|
|
format.turbo_stream do
|
|
component = Saml::Providers::ViewComponent.new(@provider,
|
|
view_mode: :show)
|
|
update_via_turbo_stream(component:)
|
|
render turbo_stream: turbo_streams
|
|
end
|
|
format.html
|
|
end
|
|
end
|
|
|
|
def new
|
|
@provider = ::Saml::Provider.new
|
|
end
|
|
|
|
def import_metadata
|
|
call = update_provider_metadata_call
|
|
@provider = call.result
|
|
|
|
if call.success?
|
|
if @edit_mode || @provider.last_metadata_update.present?
|
|
redirect_to edit_saml_provider_path(@provider,
|
|
anchor: "saml-providers-edit-form",
|
|
edit_mode: @edit_mode,
|
|
edit_state: :configuration)
|
|
else
|
|
redirect_to saml_provider_path(@provider)
|
|
end
|
|
else
|
|
@edit_state = :metadata
|
|
|
|
flash.now[:error] = call.message
|
|
render action: :edit, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def create
|
|
call = ::Saml::Providers::CreateService
|
|
.new(user: User.current)
|
|
.call(**create_params)
|
|
|
|
@provider = call.result
|
|
|
|
if call.success?
|
|
successful_save_response
|
|
else
|
|
flash.now[:error] = call.message
|
|
render action: :new, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def update
|
|
call = Saml::Providers::UpdateService
|
|
.new(model: @provider, user: User.current)
|
|
.call(update_params)
|
|
|
|
if call.success?
|
|
flash[:notice] = I18n.t(:notice_successful_update) unless @edit_mode
|
|
successful_save_response
|
|
else
|
|
@provider = call.result
|
|
render action: :edit, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def confirm_destroy; end
|
|
|
|
def destroy
|
|
call = ::Saml::Providers::DeleteService
|
|
.new(model: @provider, user: User.current)
|
|
.call
|
|
|
|
if call.success?
|
|
flash[:notice] = I18n.t(:notice_successful_delete)
|
|
else
|
|
flash[:error] = I18n.t(:error_failed_to_delete_entry)
|
|
end
|
|
|
|
redirect_to action: :index
|
|
end
|
|
|
|
private
|
|
|
|
def successful_save_response
|
|
respond_to do |format|
|
|
format.turbo_stream do
|
|
update_via_turbo_stream(
|
|
component: Saml::Providers::ViewComponent.new(
|
|
@provider,
|
|
edit_mode: @edit_mode,
|
|
edit_state: @next_edit_state,
|
|
view_mode: :show
|
|
)
|
|
)
|
|
render turbo_stream: turbo_streams
|
|
end
|
|
format.html do
|
|
if @edit_mode && @next_edit_state
|
|
redirect_to edit_saml_provider_path(@provider,
|
|
anchor: "saml-providers-edit-form",
|
|
edit_mode: true,
|
|
edit_state: @next_edit_state)
|
|
else
|
|
redirect_to saml_provider_path(@provider)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def check_ee
|
|
redirect_to action: :index unless EnterpriseToken.allows_to?(:sso_auth_providers)
|
|
end
|
|
|
|
def update_provider_metadata_call
|
|
Saml::Providers::UpdateService
|
|
.new(model: @provider, user: User.current)
|
|
.call(import_params)
|
|
end
|
|
|
|
def import_params
|
|
options = params
|
|
.require(:saml_provider)
|
|
.permit(:metadata_url, :metadata_xml, :metadata)
|
|
|
|
if options[:metadata] == "none"
|
|
{ metadata_url: nil, metadata_xml: nil }
|
|
else
|
|
options.slice(:metadata_url, :metadata_xml)
|
|
end
|
|
end
|
|
|
|
def create_params
|
|
params.require(:saml_provider).permit(:display_name)
|
|
end
|
|
|
|
def update_params
|
|
params
|
|
.require(:saml_provider)
|
|
.permit(:display_name, :limit_self_registration, *Saml::Provider.stored_attributes[:options])
|
|
end
|
|
|
|
def find_provider
|
|
@provider = Saml::Provider.find(params[:id])
|
|
end
|
|
|
|
def check_provider_writable
|
|
if @provider.seeded_from_env?
|
|
flash[:error] = I18n.t(:label_seeded_from_env_warning)
|
|
redirect_to saml_provider_path(@provider)
|
|
end
|
|
end
|
|
|
|
def set_edit_state
|
|
@edit_state = params[:edit_state].to_sym if params.key?(:edit_state)
|
|
@edit_mode = ActiveRecord::Type::Boolean.new.cast(params[:edit_mode])
|
|
@next_edit_state = params[:next_edit_state].to_sym if params.key?(:next_edit_state)
|
|
end
|
|
end
|
|
end
|