mirror of
https://github.com/internetee/registry.git
synced 2025-06-12 15:44:45 +02:00
Merge pull request #1435 from internetee/improve-api-users
Improve API users
This commit is contained in:
commit
c168eac354
28 changed files with 386 additions and 245 deletions
|
@ -47,12 +47,6 @@ class @Autocomplete
|
||||||
selector: '.js-contact-typeahead'
|
selector: '.js-contact-typeahead'
|
||||||
hiddenSelector: '.js-contact-id'
|
hiddenSelector: '.js-contact-id'
|
||||||
|
|
||||||
@bindAdminRegistrarSearch: ->
|
|
||||||
Autocomplete.bindTypeahead
|
|
||||||
remote: '/admin/registrars/search'
|
|
||||||
selector: '.js-registrar-typeahead'
|
|
||||||
hiddenSelector: '.js-registrar-id'
|
|
||||||
|
|
||||||
@bindClientContactSearch: ->
|
@bindClientContactSearch: ->
|
||||||
Autocomplete.bindTypeahead
|
Autocomplete.bindTypeahead
|
||||||
remote: '/client/contacts/search'
|
remote: '/client/contacts/search'
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
module Admin
|
module Admin
|
||||||
class ApiUsersController < BaseController
|
class ApiUsersController < BaseController
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
before_action :set_api_user, only: [:show, :edit, :update, :destroy]
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@q = ApiUser.includes(:registrar).search(params[:q])
|
@q = ApiUser.includes(:registrar).search(params[:q])
|
||||||
|
@ -9,18 +8,17 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@registrar = Registrar.find_by(id: params[:registrar_id])
|
@api_user = registrar.api_users.build
|
||||||
@api_user = ApiUser.new(registrar: @registrar)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@api_user = ApiUser.new(api_user_params)
|
@api_user = registrar.api_users.build(api_user_params)
|
||||||
|
|
||||||
if @api_user.save
|
if @api_user.valid?
|
||||||
flash[:notice] = I18n.t('record_created')
|
@api_user.save!
|
||||||
redirect_to [:admin, @api_user]
|
redirect_to admin_registrar_api_user_path(@api_user.registrar, @api_user),
|
||||||
|
notice: t('.created')
|
||||||
else
|
else
|
||||||
flash.now[:alert] = I18n.t('failed_to_create_record')
|
|
||||||
render 'new'
|
render 'new'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -32,39 +30,31 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if params[:api_user][:plain_text_password].blank?
|
@api_user.attributes = api_user_params
|
||||||
params[:api_user].delete(:plain_text_password)
|
|
||||||
end
|
|
||||||
|
|
||||||
if @api_user.update(api_user_params)
|
if @api_user.valid?
|
||||||
flash[:notice] = I18n.t('record_updated')
|
@api_user.save!
|
||||||
redirect_to [:admin, @api_user]
|
redirect_to admin_registrar_api_user_path(@api_user.registrar, @api_user),
|
||||||
|
notice: t('.updated')
|
||||||
else
|
else
|
||||||
flash.now[:alert] = I18n.t('failed_to_update_record')
|
|
||||||
render 'edit'
|
render 'edit'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
if @api_user.destroy
|
@api_user.destroy!
|
||||||
flash[:notice] = I18n.t('record_deleted')
|
redirect_to admin_registrar_path(@api_user.registrar), notice: t('.deleted')
|
||||||
redirect_to admin_api_users_path
|
|
||||||
else
|
|
||||||
flash.now[:alert] = I18n.t('failed_to_delete_record')
|
|
||||||
render 'show'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_api_user
|
|
||||||
@api_user = ApiUser.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def api_user_params
|
def api_user_params
|
||||||
params.require(:api_user).permit(:username, :plain_text_password, :active,
|
params.require(:api_user).permit(:username, :plain_text_password, :active,
|
||||||
:registrar_id, :registrar_typeahead,
|
|
||||||
:identity_code, { roles: [] })
|
:identity_code, { roles: [] })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def registrar
|
||||||
|
Registrar.find(params[:registrar_id])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,7 +34,7 @@ module Admin
|
||||||
|
|
||||||
if @certificate.destroy
|
if @certificate.destroy
|
||||||
flash[:notice] = I18n.t('record_deleted')
|
flash[:notice] = I18n.t('record_deleted')
|
||||||
redirect_to admin_api_user_path(@api_user)
|
redirect_to admin_registrar_api_user_path(@api_user.registrar, @api_user)
|
||||||
else
|
else
|
||||||
flash.now[:alert] = I18n.t('failed_to_delete_record')
|
flash.now[:alert] = I18n.t('failed_to_delete_record')
|
||||||
render 'show'
|
render 'show'
|
||||||
|
|
|
@ -28,7 +28,6 @@ class ApiUser < User
|
||||||
delegate :code, :name, to: :registrar, prefix: true
|
delegate :code, :name, to: :registrar, prefix: true
|
||||||
|
|
||||||
alias_attribute :login, :username
|
alias_attribute :login, :username
|
||||||
attr_accessor :registrar_typeahead
|
|
||||||
|
|
||||||
SUPER = 'super'
|
SUPER = 'super'
|
||||||
EPP = 'epp'
|
EPP = 'epp'
|
||||||
|
@ -53,10 +52,6 @@ class ApiUser < User
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def registrar_typeahead
|
|
||||||
@registrar_typeahead || registrar || nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
username
|
username
|
||||||
end
|
end
|
||||||
|
|
5
app/views/admin/api_users/_api_user.html.erb
Normal file
5
app/views/admin/api_users/_api_user.html.erb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<tr>
|
||||||
|
<td><%= link_to api_user, admin_registrar_api_user_path(api_user.registrar, api_user) %></td>
|
||||||
|
<td><%= link_to api_user.registrar, admin_registrar_path(api_user.registrar) %></td>
|
||||||
|
<td><%= api_user.active %></td>
|
||||||
|
</tr>
|
|
@ -1,57 +0,0 @@
|
||||||
= form_for([:admin, @api_user], multipart: true,
|
|
||||||
html: {class: 'form-horizontal', autocomplete: 'off'}) do |f|
|
|
||||||
= render 'shared/full_errors', object: @api_user
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-md-8
|
|
||||||
.form-group
|
|
||||||
.col-md-4.control-label
|
|
||||||
= f.label :username, nil, class: 'required'
|
|
||||||
.col-md-7
|
|
||||||
= f.text_field :username, required: true, autofocus: true, class: 'form-control'
|
|
||||||
.form-group
|
|
||||||
.col-md-4.control-label
|
|
||||||
= f.label :plain_text_password, nil, class: 'required'
|
|
||||||
.col-md-7
|
|
||||||
= f.text_field :plain_text_password, required: true, class: 'form-control'
|
|
||||||
|
|
||||||
.form-group
|
|
||||||
.col-md-4.control-label
|
|
||||||
= f.label :identity_code
|
|
||||||
.col-md-7
|
|
||||||
= f.text_field(:identity_code, class: 'form-control')
|
|
||||||
|
|
||||||
.form-group
|
|
||||||
.form-group.has-feedback.js-typeahead-container
|
|
||||||
.col-md-4.control-label
|
|
||||||
= f.label :registrar_typeahead, t(:registrar_name), class: 'required'
|
|
||||||
.col-md-7
|
|
||||||
= f.text_field(:registrar_typeahead,
|
|
||||||
class: 'form-control js-registrar-typeahead typeahead required',
|
|
||||||
placeholder: t(:registrar_name), autocomplete: 'off')
|
|
||||||
%span.glyphicon.glyphicon-ok.form-control-feedback.js-typeahead-ok.hidden
|
|
||||||
%span.glyphicon.glyphicon-remove.form-control-feedback.js-typeahead-remove
|
|
||||||
= f.hidden_field(:registrar_id, class: 'js-registrar-id')
|
|
||||||
|
|
||||||
.form-group
|
|
||||||
.col-md-4.control-label
|
|
||||||
= f.label :role, nil, class: 'required'
|
|
||||||
.col-md-7
|
|
||||||
= select_tag 'api_user[roles][]',
|
|
||||||
options_for_select(ApiUser::ROLES.map {|x| [x, x] }, @api_user.roles.try(:first)),
|
|
||||||
class: 'form-control selectize'
|
|
||||||
.checkbox
|
|
||||||
%label{for: 'api_user_active'}
|
|
||||||
= f.check_box(:active)
|
|
||||||
= t('.active')
|
|
||||||
|
|
||||||
%hr
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-md-8.text-right
|
|
||||||
= button_tag(t(:save), class: 'btn btn-primary')
|
|
||||||
|
|
||||||
:javascript
|
|
||||||
window.addEventListener('load', function() {
|
|
||||||
Autocomplete.bindAdminRegistrarSearch();
|
|
||||||
});
|
|
58
app/views/admin/api_users/_form.html.erb
Normal file
58
app/views/admin/api_users/_form.html.erb
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<%= form_for([:admin, @api_user.registrar, @api_user], html: { class: 'form-horizontal', autocomplete: 'off' }) do |f| %>
|
||||||
|
<%= render 'form_errors', target: @api_user %>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-4 control-label">
|
||||||
|
<%= f.label :username, nil, class: 'required' %>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-7">
|
||||||
|
<%= f.text_field :username, required: true, autofocus: true, class: 'form-control' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-4 control-label">
|
||||||
|
<%= f.label :plain_text_password, nil, class: 'required' %>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-7">
|
||||||
|
<%= f.text_field :plain_text_password, required: true, class: 'form-control' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-4 control-label">
|
||||||
|
<%= f.label :identity_code %>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-7">
|
||||||
|
<%= f.text_field(:identity_code, class: 'form-control') %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-4 control-label">
|
||||||
|
<%= f.label :roles, nil, for: nil, class: 'required' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-7">
|
||||||
|
<%= select_tag 'api_user[roles][]', options_for_select(ApiUser::ROLES.map { |x| [x, x] }, @api_user.roles.try(:first)), class: 'form-control selectize' %>
|
||||||
|
<div class="checkbox">
|
||||||
|
<label for="api_user_active">
|
||||||
|
<%= f.check_box(:active) %>
|
||||||
|
<%= ApiUser.human_attribute_name :active %>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8 text-right">
|
||||||
|
<%= button_tag t(".#{f.object.new_record? ? 'create' : 'update'}_btn"), class: 'btn btn-success' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
|
@ -1,5 +0,0 @@
|
||||||
- content_for :actions do
|
|
||||||
= link_to(t(:back_to_api_user), [:admin, @api_user], class: 'btn btn-default')
|
|
||||||
= render 'shared/title', name: "#{t(:edit)}: #{@api_user.username}"
|
|
||||||
|
|
||||||
= render 'form'
|
|
14
app/views/admin/api_users/edit.html.erb
Normal file
14
app/views/admin/api_users/edit.html.erb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
|
||||||
|
<li><%= link_to @api_user.registrar, admin_registrar_path(@api_user.registrar) %></li>
|
||||||
|
<li><%= t 'admin.registrars.show.api_users.header' %></li>
|
||||||
|
<li><%= link_to @api_user.username, admin_registrar_api_user_path(@api_user.registrar,
|
||||||
|
@api_user) %></li>
|
||||||
|
<li><%= t '.header' %></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div class="page-header">
|
||||||
|
<h1><%= t '.header' %></h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render 'form' %>
|
|
@ -1,25 +0,0 @@
|
||||||
- content_for :actions do
|
|
||||||
= link_to(t('.new_btn'), new_admin_api_user_path, class: 'btn btn-primary')
|
|
||||||
= render 'shared/title', name: t('.title')
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-md-12
|
|
||||||
.table-responsive
|
|
||||||
%table.table.table-hover.table-bordered.table-condensed
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th{class: 'col-xs-2'}
|
|
||||||
= sort_link(@q, 'username')
|
|
||||||
%th{class: 'col-xs-2'}
|
|
||||||
= sort_link(@q, 'registrar_name', t(:registrar_name))
|
|
||||||
%th{class: 'col-xs-2'}
|
|
||||||
= sort_link(@q, 'active', t('.active'))
|
|
||||||
%tbody
|
|
||||||
- @api_users.each do |x|
|
|
||||||
%tr
|
|
||||||
%td= link_to(x, [:admin, x])
|
|
||||||
%td= link_to(x.registrar, [:admin, x.registrar])
|
|
||||||
%td= x.active
|
|
||||||
.row
|
|
||||||
.col-md-12
|
|
||||||
= paginate @api_users
|
|
35
app/views/admin/api_users/index.html.erb
Normal file
35
app/views/admin/api_users/index.html.erb
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<div class="page-header">
|
||||||
|
<h1><%= t '.header' %></h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover table-bordered table-condensed">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="col-xs-2">
|
||||||
|
<%= sort_link(@q, 'username') %>
|
||||||
|
</th>
|
||||||
|
<th class="col-xs-2">
|
||||||
|
<%= sort_link(@q, 'registrar_name', Registrar.model_name.human) %>
|
||||||
|
</th>
|
||||||
|
<th class="col-xs-2">
|
||||||
|
<%= sort_link(@q, 'active', ApiUser.human_attribute_name(:active)) %>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<%= render @api_users %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<%= paginate @api_users %>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,3 +0,0 @@
|
||||||
= render 'shared/title', name: t('.title')
|
|
||||||
|
|
||||||
= render 'form'
|
|
11
app/views/admin/api_users/new.html.erb
Normal file
11
app/views/admin/api_users/new.html.erb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
|
||||||
|
<li><%= link_to @api_user.registrar, admin_registrar_path(@api_user.registrar) %></li>
|
||||||
|
<li><%= t '.header' %></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div class="page-header">
|
||||||
|
<h1><%= t '.header' %></h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render 'form' %>
|
|
@ -1,61 +0,0 @@
|
||||||
- content_for :actions do
|
|
||||||
= link_to(t(:edit), edit_admin_api_user_path(@api_user), class: 'btn btn-default')
|
|
||||||
= link_to(t(:delete), admin_api_user_path(@api_user),
|
|
||||||
method: :delete, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger')
|
|
||||||
= render 'shared/title', name: @api_user.username
|
|
||||||
|
|
||||||
- if @api_user.errors.any?
|
|
||||||
- @api_user.errors.each do |attr, err|
|
|
||||||
= err
|
|
||||||
%br
|
|
||||||
- if @api_user.errors.any?
|
|
||||||
%hr
|
|
||||||
.row
|
|
||||||
.col-md-12
|
|
||||||
.panel.panel-default
|
|
||||||
.panel-heading
|
|
||||||
%h3.panel-title= t(:general)
|
|
||||||
.panel-body
|
|
||||||
%dl.dl-horizontal
|
|
||||||
%dt= t(:username)
|
|
||||||
%dd= @api_user.username
|
|
||||||
|
|
||||||
%dt= t(:password)
|
|
||||||
%dd= @api_user.plain_text_password
|
|
||||||
|
|
||||||
%dt= t(:registrar_name)
|
|
||||||
%dd= link_to(@api_user.registrar, admin_registrar_path(@api_user.registrar))
|
|
||||||
|
|
||||||
%dt= t(:role)
|
|
||||||
%dd= @api_user.roles.join(', ')
|
|
||||||
|
|
||||||
%dt= t('.active')
|
|
||||||
%dd= @api_user.active
|
|
||||||
.row
|
|
||||||
.col-md-12
|
|
||||||
.panel.panel-default
|
|
||||||
.panel-heading.clearfix
|
|
||||||
.pull-left
|
|
||||||
= t(:certificates)
|
|
||||||
.pull-right
|
|
||||||
= link_to(t(:upload_crt),
|
|
||||||
new_admin_api_user_certificate_path(@api_user, crt: true), class: 'btn btn-primary btn-xs')
|
|
||||||
= link_to(t(:upload_csr),
|
|
||||||
new_admin_api_user_certificate_path(@api_user), class: 'btn btn-primary btn-xs')
|
|
||||||
|
|
||||||
.table-responsive
|
|
||||||
%table.table.table-hover.table-bordered.table-condensed
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th{class: 'col-xs-10'}= t('.subject')
|
|
||||||
%th{class: 'col-xs-2'}= t(:status)
|
|
||||||
%tbody
|
|
||||||
- @api_user.certificates.each do |x|
|
|
||||||
- if x.csr
|
|
||||||
%tr
|
|
||||||
%td= link_to(x.parsed_csr.try(:subject), admin_api_user_certificate_path(@api_user, x))
|
|
||||||
%td= x.status
|
|
||||||
- elsif x.crt
|
|
||||||
%tr
|
|
||||||
%td= link_to(x.parsed_crt.try(:subject), admin_api_user_certificate_path(@api_user, x))
|
|
||||||
%td= x.status
|
|
37
app/views/admin/api_users/show.html.erb
Normal file
37
app/views/admin/api_users/show.html.erb
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li><%= link_to t('admin.registrars.index.header'), admin_registrars_path %></li>
|
||||||
|
<li><%= link_to @api_user.registrar, admin_registrar_path(@api_user.registrar) %></li>
|
||||||
|
<li><%= t 'admin.registrars.show.api_users.header' %></li>
|
||||||
|
<li><%= @api_user.username %></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div class="page-header">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<h1><%= @api_user.username %></h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-4 text-right">
|
||||||
|
<%= link_to t('.edit_btn'), edit_admin_registrar_api_user_path(@api_user.registrar,
|
||||||
|
@api_user),
|
||||||
|
class: 'btn btn-primary' %>
|
||||||
|
<%= link_to t('.delete_btn'), admin_registrar_api_user_path(@api_user.registrar,
|
||||||
|
@api_user),
|
||||||
|
method: :delete,
|
||||||
|
data: { confirm: t('.delete_btn_confirm') },
|
||||||
|
class: 'btn btn-default' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<%= render 'admin/api_users/show/details' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<%= render 'admin/api_users/show/certificates' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
55
app/views/admin/api_users/show/_certificates.html.erb
Normal file
55
app/views/admin/api_users/show/_certificates.html.erb
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading clearfix">
|
||||||
|
<div class="pull-left">
|
||||||
|
<%= t(:certificates) %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pull-right">
|
||||||
|
<%= link_to(t(:upload_crt), new_admin_api_user_certificate_path(@api_user, crt: true), class: 'btn btn-primary btn-xs') %>
|
||||||
|
<%= link_to(t(:upload_csr), new_admin_api_user_certificate_path(@api_user), class: 'btn btn-primary btn-xs') %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover table-bordered table-condensed">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="col-xs-10">
|
||||||
|
<%= t('.subject') %>
|
||||||
|
</th>
|
||||||
|
<th class="col-xs-2">
|
||||||
|
<%= t(:status) %>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<% @api_user.certificates.each do |x| %>
|
||||||
|
<% if x.csr %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= link_to(x.parsed_csr.try(:subject),
|
||||||
|
admin_api_user_certificate_path(@api_user,
|
||||||
|
x)) %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= x.status %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% elsif x.crt %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= link_to(x.parsed_crt.try(:subject),
|
||||||
|
admin_api_user_certificate_path(@api_user,
|
||||||
|
x)) %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= x.status %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
26
app/views/admin/api_users/show/_details.html.erb
Normal file
26
app/views/admin/api_users/show/_details.html.erb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">
|
||||||
|
<%= t '.header' %>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel-body">
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt><%= ApiUser.human_attribute_name :username %></dt>
|
||||||
|
<dd><%= @api_user.username %></dd>
|
||||||
|
|
||||||
|
<dt><%= ApiUser.human_attribute_name :plain_text_password %></dt>
|
||||||
|
<dd><%= @api_user.plain_text_password %></dd>
|
||||||
|
|
||||||
|
<dt><%= Registrar.model_name.human %></dt>
|
||||||
|
<dd><%= link_to(@api_user.registrar, admin_registrar_path(@api_user.registrar)) %></dd>
|
||||||
|
|
||||||
|
<dt><%= ApiUser.human_attribute_name :roles %></dt>
|
||||||
|
<dd><%= @api_user.roles.join(', ') %></dd>
|
||||||
|
|
||||||
|
<dt><%= ApiUser.human_attribute_name :active %></dt>
|
||||||
|
<dd><%= @api_user.active %></dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -20,7 +20,7 @@
|
||||||
.panel-body
|
.panel-body
|
||||||
%dl.dl-horizontal
|
%dl.dl-horizontal
|
||||||
%dt= t(:api_user)
|
%dt= t(:api_user)
|
||||||
%dd= link_to(@certificate.api_user, [:admin, @api_user])
|
%dd= link_to(@certificate.api_user, [:admin, @api_user.registrar, @api_user])
|
||||||
|
|
||||||
%dt= t(:common_name)
|
%dt= t(:common_name)
|
||||||
%dd= @certificate.common_name
|
%dd= @certificate.common_name
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<%= render 'admin/registrars/show/users', registrar: @registrar %>
|
<%= render 'admin/registrars/show/api_users', registrar: @registrar %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,10 @@
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<% registrar.api_users.each do |user| %>
|
<% registrar.api_users.each do |api_user| %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= link_to(user, [:admin, user]) %></td>
|
<td><%= link_to api_user, admin_registrar_api_user_path(api_user.registrar, api_user) %></td>
|
||||||
<td><%= user.active %></td>
|
<td><%= api_user.active %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
|
@ -2,16 +2,34 @@ en:
|
||||||
admin:
|
admin:
|
||||||
api_users:
|
api_users:
|
||||||
index:
|
index:
|
||||||
new_btn: New API user
|
header: API users
|
||||||
title: API users
|
|
||||||
active: Active
|
|
||||||
|
|
||||||
show:
|
|
||||||
active: Active
|
|
||||||
subject: Subject
|
|
||||||
|
|
||||||
new:
|
new:
|
||||||
title: New API user
|
header: New API user
|
||||||
|
|
||||||
|
create:
|
||||||
|
created: API user has been successfully created
|
||||||
|
|
||||||
|
show:
|
||||||
|
edit_btn: Edit
|
||||||
|
delete_btn: Delete
|
||||||
|
delete_btn_confirm: Are you sure you want to delete this API user?
|
||||||
|
|
||||||
|
details:
|
||||||
|
header: Details
|
||||||
|
|
||||||
|
certificates:
|
||||||
|
subject: Subject
|
||||||
|
|
||||||
|
edit:
|
||||||
|
header: Edit API user
|
||||||
|
|
||||||
|
update:
|
||||||
|
updated: API user has been successfully updated
|
||||||
|
|
||||||
|
destroy:
|
||||||
|
deleted: API user has been successfully deleted
|
||||||
|
|
||||||
form:
|
form:
|
||||||
active: Active
|
create_btn: Create API user
|
||||||
|
update_btn: Update API user
|
||||||
|
|
|
@ -25,7 +25,7 @@ en:
|
||||||
preferences:
|
preferences:
|
||||||
header: Preferences
|
header: Preferences
|
||||||
|
|
||||||
users:
|
api_users:
|
||||||
header: API Users
|
header: API Users
|
||||||
new_btn: New API user
|
new_btn: New API user
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,4 @@ en:
|
||||||
attributes:
|
attributes:
|
||||||
api_user:
|
api_user:
|
||||||
plain_text_password: Password
|
plain_text_password: Password
|
||||||
errors:
|
roles: Role
|
||||||
models:
|
|
||||||
api_user:
|
|
||||||
attributes:
|
|
||||||
username:
|
|
||||||
blank: 'Username is missing'
|
|
||||||
taken: 'Username already exists'
|
|
||||||
plain_text_password:
|
|
||||||
blank: 'Password is missing'
|
|
||||||
registrar:
|
|
||||||
blank: 'Registrar is missing'
|
|
||||||
|
|
|
@ -277,7 +277,6 @@ en:
|
||||||
certificate_signing_req: 'Certificate signing request'
|
certificate_signing_req: 'Certificate signing request'
|
||||||
csr: 'CSR'
|
csr: 'CSR'
|
||||||
crt: 'CRT'
|
crt: 'CRT'
|
||||||
back_to_api_user: 'Back to API user'
|
|
||||||
|
|
||||||
dnskey: 'DNS key'
|
dnskey: 'DNS key'
|
||||||
dnskeys: 'DNS Keys'
|
dnskeys: 'DNS Keys'
|
||||||
|
|
|
@ -259,7 +259,7 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :registrars do
|
resources :registrars do
|
||||||
resources :api_users
|
resources :api_users, except: %i[index]
|
||||||
resources :white_ips
|
resources :white_ips
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -270,7 +270,8 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :admin_users
|
resources :admin_users
|
||||||
resources :api_users do
|
# /admin/api_users is mainly for manual testing
|
||||||
|
resources :api_users, only: :index do
|
||||||
resources :certificates do
|
resources :certificates do
|
||||||
member do
|
member do
|
||||||
post 'sign'
|
post 'sign'
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
require 'application_system_test_case'
|
|
||||||
|
|
||||||
class AdminAreaNewApiUserTest < ApplicationSystemTestCase
|
|
||||||
setup do
|
|
||||||
sign_in users(:admin)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_new_api_user_creation_with_required_params
|
|
||||||
visit admin_api_users_url
|
|
||||||
click_link_or_button 'New API user'
|
|
||||||
|
|
||||||
fill_in 'Username', with: 'newtest'
|
|
||||||
fill_in 'Password', with: 'testtest'
|
|
||||||
find('#api_user_registrar_id', visible: false).set(registrars(:bestnames).id)
|
|
||||||
|
|
||||||
assert_difference 'ApiUser.count' do
|
|
||||||
click_link_or_button 'Save'
|
|
||||||
end
|
|
||||||
|
|
||||||
assert_current_path admin_api_user_path(ApiUser.last)
|
|
||||||
assert_text 'Record created'
|
|
||||||
assert_text 'Username newtest'
|
|
||||||
assert_text 'Password testtest'
|
|
||||||
end
|
|
||||||
end
|
|
14
test/system/admin_area/api_users_test.rb
Normal file
14
test/system/admin_area/api_users_test.rb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
require 'application_system_test_case'
|
||||||
|
|
||||||
|
class AdminApiUsersSystemTest < ApplicationSystemTestCase
|
||||||
|
setup do
|
||||||
|
sign_in users(:admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_shows_api_user_list
|
||||||
|
visit admin_api_users_path
|
||||||
|
|
||||||
|
api_user = users(:api_bestnames)
|
||||||
|
assert_link api_user.username, href: admin_registrar_api_user_path(api_user.registrar, api_user)
|
||||||
|
end
|
||||||
|
end
|
75
test/system/admin_area/registrars/api_users_test.rb
Normal file
75
test/system/admin_area/registrars/api_users_test.rb
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
require 'application_system_test_case'
|
||||||
|
|
||||||
|
class AdminRegistrarsApiUsersSystemTest < ApplicationSystemTestCase
|
||||||
|
setup do
|
||||||
|
sign_in users(:admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_creates_new_api_user_with_required_attributes
|
||||||
|
username = 'john'
|
||||||
|
registrar = registrars(:bestnames)
|
||||||
|
|
||||||
|
visit admin_registrar_path(registrar)
|
||||||
|
click_on 'New API user'
|
||||||
|
|
||||||
|
fill_in 'Username', with: username
|
||||||
|
fill_in 'Password', with: valid_password
|
||||||
|
click_on 'Create API user'
|
||||||
|
|
||||||
|
assert_text 'API user has been successfully created'
|
||||||
|
assert_text "Username #{username}"
|
||||||
|
new_api_user = ApiUser.last
|
||||||
|
assert_current_path admin_registrar_api_user_path(registrar, new_api_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_shows_api_user_details
|
||||||
|
api_user = users(:api_bestnames)
|
||||||
|
|
||||||
|
visit admin_registrar_path(api_user.registrar)
|
||||||
|
click_on api_user.username
|
||||||
|
|
||||||
|
assert_text "Username #{api_user.username}"
|
||||||
|
assert_text "Password #{api_user.plain_text_password}"
|
||||||
|
assert_link api_user.registrar.name, href: admin_registrar_path(api_user.registrar)
|
||||||
|
assert_text "Role #{api_user.roles.first}"
|
||||||
|
assert_text "Active #{api_user.active}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_updates_api_user
|
||||||
|
api_user = users(:api_bestnames)
|
||||||
|
new_username = 'new username'
|
||||||
|
assert_not_equal new_username, api_user.username
|
||||||
|
|
||||||
|
visit admin_registrar_api_user_path(api_user.registrar, api_user)
|
||||||
|
click_link_or_button 'Edit'
|
||||||
|
fill_in 'Username', with: new_username
|
||||||
|
click_link_or_button 'Update API user'
|
||||||
|
|
||||||
|
assert_text 'API user has been successfully updated'
|
||||||
|
assert_text "Username #{new_username}"
|
||||||
|
assert_current_path admin_registrar_api_user_path(api_user.registrar, api_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_deletes_api_user
|
||||||
|
api_user = unassociated_api_user
|
||||||
|
|
||||||
|
visit admin_registrar_api_user_path(api_user.registrar, api_user)
|
||||||
|
click_on 'Delete'
|
||||||
|
|
||||||
|
assert_text 'API user has been successfully deleted'
|
||||||
|
assert_current_path admin_registrar_path(api_user.registrar)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def unassociated_api_user
|
||||||
|
new_api_user = users(:api_bestnames).dup
|
||||||
|
new_api_user.username = "unique-#{rand(100)}"
|
||||||
|
new_api_user.save!
|
||||||
|
new_api_user
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid_password
|
||||||
|
'testtest'
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue