1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2025-12-01 05:43:04 +00:00

admin UI for managing ip pools & ip addresses

هذا الالتزام موجود في:
Adam Cooke
2017-04-21 11:09:31 +01:00
الأصل 6eb425eaed
التزام c09c501ef4
11 ملفات معدلة مع 232 إضافات و0 حذوفات

عرض الملف

@@ -2,6 +2,10 @@
margin-bottom:25px;
}
.u-margin-half {
margin-bottom:10px;
}
.u-center {
text-align:center;
}

عرض الملف

@@ -0,0 +1,39 @@
class IPAddressesController < ApplicationController
before_action :admin_required
before_action { @ip_pool = IPPool.find_by_uuid!(params[:ip_pool_id]) }
before_action { params[:id] && @ip_address = @ip_pool.ip_addresses.find(params[:id]) }
def new
@ip_address = @ip_pool.ip_addresses.build
end
def create
@ip_address = @ip_pool.ip_addresses.build(safe_params)
if @ip_address.save
redirect_to_with_json [:edit, @ip_pool]
else
render_form_errors 'new', @ip_address
end
end
def update
if @ip_address.update(safe_params)
redirect_to_with_json [:edit, @ip_pool]
else
render_form_errors 'edit', @ip_address
end
end
def destroy
@ip_address.destroy
redirect_to_with_json [:edit, @ip_pool]
end
private
def safe_params
params.require(:ip_address).permit(:ipv4, :ipv6, :hostname)
end
end

عرض الملف

@@ -0,0 +1,44 @@
class IPPoolsController < ApplicationController
before_action :admin_required
before_action { params[:id] && @ip_pool = IPPool.find_by_uuid!(params[:id]) }
def index
@ip_pools = IPPool.order(:name).to_a
end
def new
@ip_pool = IPPool.new
end
def create
@ip_pool = IPPool.new(safe_params)
if @ip_pool.save
redirect_to_with_json [:edit, @ip_pool], :notice => "IP Pool has been added successfully. You can now add IP addresses to it."
else
render_form_errors 'new', @ip_pool
end
end
def update
if @ip_pool.update(safe_params)
redirect_to_with_json [:edit, @ip_pool], :notice => "IP Pool has been updated."
else
render_form_errors 'edit', @ip_pool
end
end
def destroy
@ip_pool.destroy
redirect_to_with_json :ip_pools, :notice => "IP pool has been removed successfully."
rescue ActiveRecord::DeleteRestrictionError => e
redirect_to_with_json [:edit, @ip_pool], :alert => "IP pool cannot be removed because it is still assigned to servers/rules."
end
private
def safe_params
params.require(:ip_pool).permit(:name, :type, :default)
end
end

عرض الملف

@@ -0,0 +1,19 @@
= form_for [@ip_pool, @ip_address], :remote => true do |f|
= f.error_messages
%fieldset.fieldSet
.fieldSet__field
= f.label :ipv4, :class => 'fieldSet__label'
.fieldSet__input= f.text_field :ipv4, :autofocus => true, :class => 'input input--text'
.fieldSet__field
= f.label :ipv6, :class => 'fieldSet__label'
.fieldSet__input= f.text_field :ipv6, :class => 'input input--text'
.fieldSet__field
= f.label :hostname, :class => 'fieldSet__label'
.fieldSet__input= f.text_field :hostname, :class => 'input input--text'
.fieldSetSubmit.buttonSet
= f.submit :class => 'button button--positive js-form-submit'
.fieldSetSubmit__delete
- if @ip_address.persisted?
= link_to "Delete IP address", [@ip_pool, @ip_address], :class => 'button button--danger', :method => :delete, :remote => true, :data => {:confirm => "Are you sure you wish to remove this IP from the pool?"}

عرض الملف

@@ -0,0 +1,17 @@
- page_title << "IP Pools"
- page_title << @ip_pool.name
- page_title << "Edit IP address"
.pageHeader
%h1.pageHeader__title
%span.pageHeader__titlePrevious
= link_to "IP Pools", :ip_pools
&rarr;
= @ip_pool.name
&rarr;
Edit
&rarr;
Edit IP address
.pageContent.pageContent--compact
= render 'form'

عرض الملف

@@ -0,0 +1,17 @@
- page_title << "IP Pools"
- page_title << @ip_pool.name
- page_title << "Add new IP address"
.pageHeader
%h1.pageHeader__title
%span.pageHeader__titlePrevious
= link_to "IP Pools", :ip_pools
&rarr;
= @ip_pool.name
&rarr;
Edit
&rarr;
Add new IP address
.pageContent.pageContent--compact
= render 'form'

عرض الملف

@@ -0,0 +1,37 @@
= form_for @ip_pool, :remote => true do |f|
= f.error_messages
%fieldset.fieldSet.u-margin
.fieldSet__field
= f.label :name, :class => 'fieldSet__label'
.fieldSet__input= f.text_field :name, :autofocus => true, :class => 'input input--text'
.fieldSet__field
= f.label :type, :class => 'fieldSet__label'
.fieldSet__input= f.select :type, IPPool::TYPES, {}, :class => 'input input--select'
- if @ip_pool.persisted?
%table.dataTable.u-margin-half
%thead
%tr
%td IPv4
%td IPv6
%td Hostname
%tbody
- if @ip_pool.ip_addresses.empty?
%tr
%td.dataTable__empty{:colspan => 3} There are no IP addresses assigned to this pool yet.
- else
- for ip in @ip_pool.ip_addresses
%tr
%td{:width => "20%"}= link_to ip.ipv4, [:edit, @ip_pool, ip], :class => "u-link"
%td{:width => "40%"}= ip.ipv6
%td{:width => "40%"}= ip.hostname
%p= link_to "Add an IP address to pool", [:new, @ip_pool, :ip_address], :class => "u-link"
.fieldSetSubmit.buttonSet
= f.submit :class => 'button button--positive js-form-submit'
.fieldSetSubmit__delete
- if @ip_pool.persisted?
= link_to "Delete IP pool", [@ip_pool], :class => 'button button--danger', :method => :delete, :remote => true, :data => {:confirm => "Are you sure you wish to remove this IP pool?"}

عرض الملف

@@ -0,0 +1,15 @@
- page_title << "IP Pools"
- page_title << @ip_pool.name
.pageHeader
%h1.pageHeader__title
%span.pageHeader__titlePrevious
= link_to "IP Pools", :ip_pools
&rarr;
= @ip_pool.name
&rarr;
Edit
.pageContent.pageContent--compact
= render 'form'

عرض الملف

@@ -0,0 +1,27 @@
- page_title << "Welcome"
.pageHeader
%h1.pageHeader__title IP Pools
.pageContent.pageContent--compact
- if @ip_pools.empty?
.noData.noData--cat2.noData--clean
%p.noData__title There are no IP pools configured.
%p.noData__text
All messages sent from your mail server can be sent from certain pools of
IP addresses. Each server can be assigned to a pool and rules can be configured
to route certain email through certain pools.
%p.noData__button= link_to "Create the first IP pool", :new_ip_pool, :class => 'button button--positive'
- else
%p.pageContent__intro.u-margin
IP pools are the addresses that your outgoing messages are sent from. You can
create as many pools as you wish.
%ul.largeList.u-margin
- for ip_pool in @ip_pools
%li.largeList__item
= link_to edit_ip_pool_path(ip_pool), :class => 'largeList__link' do
= ip_pool.name
%p.u-center= link_to "Add another IP pool", :new_ip_pool, :class => 'button button--positive'

عرض الملف

@@ -0,0 +1,10 @@
- page_title << "Create a new IP pool"
.pageHeader
%h1.pageHeader__title
%span.pageHeader__titlePrevious
= link_to "IP Pools", :ip_pools
&rarr;
Create a new IP pool
.pageContent.pageContent--compact
= render 'form'

عرض الملف

@@ -69,6 +69,9 @@ Rails.application.routes.draw do
end
resources :organizations, :except => [:index]
resources :ip_pools do
resources :ip_addresses
end
get 'settings' => 'user#edit'
patch 'settings' => 'user#update'