diff --git a/app/controllers/admin/trusted_sites_controller.rb b/app/controllers/admin/trusted_sites_controller.rb
new file mode 100644
index 0000000..76d1115
--- /dev/null
+++ b/app/controllers/admin/trusted_sites_controller.rb
@@ -0,0 +1,82 @@
+class TrustedSitesController < AdminController
+ protect 'manage_environment_trusted_sites', :environment
+
+ def index
+ @sites = environment.trusted_sites_for_iframe
+ end
+
+ def new
+ @site = ""
+ end
+
+ def create
+ if add_trusted_site(params[:site])
+ session[:notice] = _('New trusted site added.')
+ redirect_to :action => 'index'
+ else
+ session[:notice] = _('Failed to add trusted site.')
+ render :action => 'new'
+ end
+ end
+
+ def edit
+ if is_trusted_site? params[:site]
+ @site = params[:site]
+ else
+ session[:notice] = _('Trusted site was not found')
+ redirect_to :action => 'index'
+ end
+ end
+
+ def update
+ site = params[:site]
+ orig_site = params[:orig_site]
+ if rename_trusted_site(orig_site, site)
+ redirect_to :action => 'edit', :site => @site
+ else
+ session[:notice] = _('Failed to edit trusted site.')
+ render :action => 'edit'
+ end
+ end
+
+ def destroy
+ if delete_trusted_site(params[:site])
+ session[:notice] = _('Trusted site removed')
+ else
+ session[:notice] = _('Trusted site could not be removed')
+ end
+ redirect_to :action => 'index'
+ end
+
+ protected
+ def add_trusted_site (site)
+ trusted_sites = environment.trusted_sites_for_iframe
+ trusted_sites << site
+ environment.trusted_sites_for_iframe = trusted_sites
+ environment.save
+ end
+
+ def rename_trusted_site(orig_site, site)
+ trusted_sites = environment.trusted_sites_for_iframe
+ i = trusted_sites.index orig_site
+ if i.nil?
+ return false
+ else
+ trusted_sites[i] = site
+ environment.trusted_sites_for_iframe = trusted_sites
+ environment.save
+ end
+ end
+
+
+ def delete_trusted_site (site)
+ trusted_sites = environment.trusted_sites_for_iframe
+ trusted_sites.delete site
+ environment.trusted_sites_for_iframe = trusted_sites
+ environment.save
+ end
+
+ def is_trusted_site? (site)
+ environment.trusted_sites_for_iframe.include? site
+ end
+end
diff --git a/app/models/environment.rb b/app/models/environment.rb
index 129a831..00a43c1 100644
--- a/app/models/environment.rb
+++ b/app/models/environment.rb
@@ -26,6 +26,7 @@ class Environment < ActiveRecord::Base
'manage_environment_users' => N_('Manage environment users'),
'manage_environment_templates' => N_('Manage environment templates'),
'manage_environment_licenses' => N_('Manage environment licenses'),
+ 'manage_environment_trusted_sites' => N_('Manage_environment_trusted_sites')
}
module Roles
diff --git a/app/views/admin_panel/index.rhtml b/app/views/admin_panel/index.rhtml
index cac3be8..8f69b87 100644
--- a/app/views/admin_panel/index.rhtml
+++ b/app/views/admin_panel/index.rhtml
@@ -9,6 +9,7 @@
<%= link_to _('Sideboxes'), :controller => 'environment_design'%> |
<%= link_to _('Homepage'), :action => 'set_portal_community' %> |
<%= link_to _('Licenses'), :controller =>'licenses' %> |
+ <%= link_to _('Trusted sites'), :controller =>'trusted_sites' %> |
<%= _('Profiles') %>
diff --git a/app/views/trusted_sites/edit.rhtml b/app/views/trusted_sites/edit.rhtml
new file mode 100644
index 0000000..5834a2b
--- /dev/null
+++ b/app/views/trusted_sites/edit.rhtml
@@ -0,0 +1,15 @@
+ <%= _("Editing trusted site") %>
+
+<% form_tag :action => :update do %>
+
+ <%= text_field_tag :site, @site %>
+ <%= hidden_field_tag :orig_site, @site %>
+
+ <% button_bar do %>
+ <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'} ) %>
+ <% end %>
+<% end %>
+
+
diff --git a/app/views/trusted_sites/index.rhtml b/app/views/trusted_sites/index.rhtml
new file mode 100644
index 0000000..353daeb
--- /dev/null
+++ b/app/views/trusted_sites/index.rhtml
@@ -0,0 +1,28 @@
+<%= _('Manage trusted sites') %>
+
+
+<%= _('Here you can manage the list of trusted sites of your environment. A trusted site is a site that you consider safe enough to incorporate their content through iframes.') %>
+
+
+
+
+ <%= _('Site') %> |
+ <%= _('Actions') %> |
+
+ <% @sites.each do |site| %>
+
+
+ <%= link_to site, :action => 'show', :site => site %>
+ |
+
+ <%= button_without_text :edit, _('Edit'), :action => 'edit', :site => site %>
+ <%= button_without_text :remove, _('Remove'), {:action => :destroy, :site => site}, :method => :delete, :confirm => _('Are you sure you want to remove this site from the list of trusted sites?') %>
+ |
+
+ <% end %>
+
+
+<% button_bar do %>
+ <%= button :add, _('Add a trusted site'), :action => 'new' %>
+ <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %>
+<% end %>
diff --git a/app/views/trusted_sites/new.rhtml b/app/views/trusted_sites/new.rhtml
new file mode 100644
index 0000000..d64c8ab
--- /dev/null
+++ b/app/views/trusted_sites/new.rhtml
@@ -0,0 +1,14 @@
+ <%= _("Add a new trusted site") %>
+
+<% form_tag :action => :create do %>
+
+ <%= text_field_tag :site, @site %>
+
+ <% button_bar do %>
+ <%= submit_button('save', _('Add trusted site'), :cancel => {:action => 'index'} ) %>
+ <% end %>
+<% end %>
+
+
diff --git a/test/factories.rb b/test/factories.rb
index ecaa9aa..c395abb 100644
--- a/test/factories.rb
+++ b/test/factories.rb
@@ -55,7 +55,7 @@ module Noosfero::Factory
###### old stuff to be rearranged
def create_admin_user(env)
admin_user = User.find_by_login('adminuser') || create_user('adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser', :environment => env)
- admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators', 'manage_environment_users', 'manage_environment_templates', 'manage_environment_licenses'])
+ admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_trusted_sites', 'manage_environment_validators', 'manage_environment_users', 'manage_environment_templates', 'manage_environment_licenses'])
RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env])
admin_user.login
end
diff --git a/test/fixtures/roles.yml b/test/fixtures/roles.yml
index 4d01b92..8795023 100644
--- a/test/fixtures/roles.yml
+++ b/test/fixtures/roles.yml
@@ -30,6 +30,7 @@ four:
- edit_environment_design
- manage_environment_categories
- manage_environment_roles
+ - manage_environment_trusted_sites
- manage_environment_validators
- moderate_comments
- perform_task
@@ -85,6 +86,7 @@ environment_administrator:
- edit_environment_design
- manage_environment_categories
- manage_environment_roles
+ - manage_environment_trusted_sites
- manage_environment_validators
- moderate_comments
- manage_environment_users
diff --git a/test/functional/trusted_sites_controller_test.rb b/test/functional/trusted_sites_controller_test.rb
new file mode 100644
index 0000000..07c0e94
--- /dev/null
+++ b/test/functional/trusted_sites_controller_test.rb
@@ -0,0 +1,79 @@
+require File.dirname(__FILE__) + '/../test_helper'
+require 'trusted_sites_controller'
+
+# Re-raise errors caught by the controller.
+class TrustedSitesController; def rescue_action(e) raise e end; end
+
+class TrustedSitesControllerTest < ActionController::TestCase
+ all_fixtures
+
+ def setup
+ @controller = TrustedSitesController.new
+ @request = ActionController::TestRequest.new
+ @response = ActionController::TestResponse.new
+ @role = Role.find(:first)
+ @environment = Environment.default
+ @environment.trusted_sites_for_iframe = ['existing.site.com']
+ @environment.save!
+
+ login_as(:ze)
+ end
+
+ should 'get index' do
+ get :index
+ assert_response :success
+ assert_not_nil assigns(:sites)
+ end
+
+ should 'get new' do
+ get :new
+ assert_response :success
+ end
+
+ should 'create site' do
+ post :create, :site => 'new.site.com'
+ assert_redirected_to :action => :index
+ assert @controller.environment.trusted_sites_for_iframe.include?('new.site.com'), 'Site was not included in the trusted_sites'
+ end
+
+ should 'fail creation gracefully' do
+ @controller.stubs(:add_trusted_site).returns(false)
+ post :create, :site => 'new.site.com'
+ assert_response :success # it actually failed, but was not redirected
+ assert !@controller.environment.trusted_sites_for_iframe.include?('new.site.com'), 'Site was included in the trusted_sites!?'
+ end
+
+ should 'destroy site' do
+ post :create, :site => 'todel.site.com'
+ delete :destroy, :site => 'todel.site.com'
+ assert_redirected_to :action => :index
+ assert ! @controller.environment.trusted_sites_for_iframe.include?('todel.site.com'), 'Site was not removed from trusted_sites'
+ end
+
+ should "get edit" do
+ get :edit, :site => 'existing.site.com'
+ assert_response :success
+ end
+
+ should "not get edit" do
+ get :edit, :site => 'nonexistent.site.com'
+ assert_redirected_to :action => :index
+ end
+
+ should 'update site' do
+ post :create, :site => 'toedit.site.com'
+ post :update, :orig_site => 'toedit.site.com', :site => 'edited.site.com'
+ assert_redirected_to :action => :edit
+ assert ! @controller.environment.trusted_sites_for_iframe.include?('toedit.site.com'), 'Original site found. Site was not updated?'
+ assert @controller.environment.trusted_sites_for_iframe.include?('edited.site.com'), 'New name for site not found. Site was not updated?'
+ end
+
+ should 'fail update gracefully' do
+ @controller.stubs(:rename_trusted_site).returns(false)
+ post :create, :site => 'toedit.site.com'
+ post :update, :orig_site => 'toedit.site.com', :site => 'edited.site.com'
+ assert_response :success # it actually failed, but was not redirected
+ assert @controller.environment.trusted_sites_for_iframe.include?('toedit.site.com'), 'Original site not found. Site was updated?'
+ assert !@controller.environment.trusted_sites_for_iframe.include?('edited.site.com'), 'New name for site found. Site was updated?'
+ end
+end
--
libgit2 0.21.2