From 2def9c0fb9f8fbda640d50e583d34f5c7fa25ef0 Mon Sep 17 00:00:00 2001 From: Adam Cooke Date: Fri, 21 Apr 2017 11:26:19 +0100 Subject: [PATCH] UI for admins to assign ip pools to servers --- .../organization_ip_pools_controller.rb | 7 +++ app/controllers/servers_controller.rb | 4 +- .../organization_ip_pools/index.html.haml | 57 ++++++++++++------- app/views/servers/_form.html.haml | 1 + app/views/servers/admin.html.haml | 3 - config/routes.rb | 4 +- 6 files changed, 49 insertions(+), 27 deletions(-) diff --git a/app/controllers/organization_ip_pools_controller.rb b/app/controllers/organization_ip_pools_controller.rb index 7190828..ebbc686 100644 --- a/app/controllers/organization_ip_pools_controller.rb +++ b/app/controllers/organization_ip_pools_controller.rb @@ -1,9 +1,16 @@ class OrganizationIPPoolsController < ApplicationController include WithinOrganization + before_action :admin_required, :only => [:assignments] def index @ip_pools = organization.ip_pools.dedicated.order(:name) end + def assignments + organization.ip_pool_ids = params[:ip_pools] + organization.save! + redirect_to [organization, :ip_pools], :notice => "Organization IP pools have been updated successfully" + end + end diff --git a/app/controllers/servers_controller.rb b/app/controllers/servers_controller.rb index 28ee819..9f40bfa 100644 --- a/app/controllers/servers_controller.rb +++ b/app/controllers/servers_controller.rb @@ -42,7 +42,7 @@ class ServersController < ApplicationController def update extra_params = [:spam_threshold, :spam_failure_threshold, :postmaster_address] - extra_params += [:send_limit, :allow_sender, :log_smtp_data, :outbound_spam_threshold, :message_retention_days, :raw_message_retention_days, :raw_message_retention_size, :ip_pool_id] if current_user.admin? + extra_params += [:send_limit, :allow_sender, :log_smtp_data, :outbound_spam_threshold, :message_retention_days, :raw_message_retention_days, :raw_message_retention_size] if current_user.admin? if @server.update(safe_params(*extra_params)) redirect_to_with_json organization_server_path(organization, @server), :notice => "Server settings have been updated" else @@ -84,7 +84,7 @@ class ServersController < ApplicationController private def safe_params(*extras) - params.require(:server).permit(:name, :mode, :ip_pool_id, *extras) + params.require(:server).permit(:name, :mode, *extras) end end diff --git a/app/views/organization_ip_pools/index.html.haml b/app/views/organization_ip_pools/index.html.haml index d221baa..4974575 100644 --- a/app/views/organization_ip_pools/index.html.haml +++ b/app/views/organization_ip_pools/index.html.haml @@ -10,29 +10,44 @@ = render 'organizations/nav', :active_nav => :ips = render 'nav', :active_nav => :ips + .pageContent.pageContent--compact - - if @ip_pools.empty? - .noData.noData--koala.noData--clean - - if @server.nil? - %h2.noData__title You don't have any dedicated IP addresses. - %p.noData__text - Once you've been assigned dedicated IP addresses they will appear here. You can then use them in rules and - for servers. To request dedicated IP addresses please contact our team. + - if current_user.admin? + %p.pageContent__intro.u-margin + Choose which IP pools this organization will have access to send mail using. Organization + users will be able to choose from any of the pools chosen below. Admins can override on a per + server basis if required. + = form_tag [:assignments, @organization, :ip_pools], :method => :put do + %ul.checkboxList.u-margin + - for ip_pool in IPPool.order(:name) + %li.checkboxList__item + .checkboxList__checkbox= check_box_tag "ip_pools[]", ip_pool.id, @organization.ip_pools.include?(ip_pool), :id => "ip_pool_#{ip_pool.id}" + .checkboxList__label + = label_tag "ip_pool_#{ip_pool.id}", ip_pool.name, :class => 'checkboxList__actualLabel' + %p= submit_tag "Save IP pool assignment", :class => 'button button--positive' - else - .ipList - - for ip_pool in @ip_pools - .ipList__item - %p.ipList__name= ip_pool.name - %ul.ipList__addressList - %li.ipList__address.ipList__address--header - %p.ipList__ipv4 IPv4 Address - %p.ipList__ipv6 IPv6 Address - %p.ipList__hostname Hostname + - if @ip_pools.empty? + .noData.noData--koala.noData--clean + - if @server.nil? + %h2.noData__title You don't have any dedicated IP addresses. + %p.noData__text + Once you've been assigned dedicated IP addresses they will appear here. You can then use them in rules and + for servers. To request dedicated IP addresses please contact our team. + - else + .ipList + - for ip_pool in @ip_pools + .ipList__item + %p.ipList__name= ip_pool.name + %ul.ipList__addressList + %li.ipList__address.ipList__address--header + %p.ipList__ipv4 IPv4 Address + %p.ipList__ipv6 IPv6 Address + %p.ipList__hostname Hostname - - for address in ip_pool.ip_addresses - %li.ipList__address - %p.ipList__ipv4= address.ipv4 - %p.ipList__ipv6= address.ipv6 - %p.ipList__hostname= address.hostname + - for address in ip_pool.ip_addresses + %li.ipList__address + %p.ipList__ipv4= address.ipv4 + %p.ipList__ipv6= address.ipv6 + %p.ipList__hostname= address.hostname diff --git a/app/views/servers/_form.html.haml b/app/views/servers/_form.html.haml index faa0834..4ead7b0 100644 --- a/app/views/servers/_form.html.haml +++ b/app/views/servers/_form.html.haml @@ -20,6 +20,7 @@ e-mail will be routed normally to the intended recipients. When in Development mode, outgoing & incoming mail will be held and only visible in the web interface and will not be sent to any recipients or HTTP endpoints. + .fieldSet__field = f.label :ip_pool_id, :class => 'fieldSet__label' .fieldSet__input diff --git a/app/views/servers/admin.html.haml b/app/views/servers/admin.html.haml index 466f328..eab7947 100644 --- a/app/views/servers/admin.html.haml +++ b/app/views/servers/admin.html.haml @@ -30,9 +30,6 @@ .fieldSet__field = f.label :raw_message_retention_size, :class => 'fieldSet__label' .fieldSet__input= f.text_field :raw_message_retention_size, :class => 'input input--text' - .fieldSet__field - = f.label :ip_pool_id, :class => 'fieldSet__label' - .fieldSet__input= f.collection_select :ip_pool_id, IPPool.order(:name), :id, :name, {}, :class => 'input input--select' .fieldSetSubmit.fieldSetSubmit--wide.buttonSet = f.submit "Save server", :class => 'button button--positive js-form-submit' diff --git a/config/routes.rb b/config/routes.rb index 85d8008..6fd666b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -60,7 +60,9 @@ Rails.application.routes.draw do post :make_owner, :on => :member end resources :ip_pool_rules - resources :ip_pools, :controller => 'organization_ip_pools' + resources :ip_pools, :controller => 'organization_ip_pools' do + put :assignments, :on => :collection + end root 'servers#index' get 'settings' => 'organizations#edit' patch 'settings' => 'organizations#update'