codevise/cert_watch

View on GitHub
admin/cert_watch/certificates.rb

Summary

Maintainability
A
35 mins
Test Coverage
require 'cert_watch/views/all'

module CertWatch
  ActiveAdmin.register Certificate, as: 'Certificate' do
    menu priority: 100

    actions :index, :new, :create, :show, :edit, :update

    config.batch_actions = false

    index do
      column :domain do |certificate|
        link_to(certificate.domain, admin_certificate_path(certificate))
      end
      column :state do |certificate|
        cert_watch_certificate_state(certificate)
      end
      column :last_renewed_at
      column :last_renewal_failed_at
      column :last_installed_at
      column :last_install_failed_at
    end

    scope :all
    scope :installed
    scope :processing
    scope :failed
    scope :abandoned

    filter :domain
    filter :last_renewed_at
    filter :provider, as: :select, collection: Certificate::PROVIDERS

    form do |f|
      f.inputs do
        f.input :domain
        f.input :public_key
        f.input :private_key
        f.input :chain
      end
      f.actions
    end

    action_item(:renew, only: :show) do
      if resource.can_renew?
        button_to(I18n.t('cert_watch.admin.certificates.renew'),
                  renew_admin_certificate_path(resource),
                  method: :post,
                  data: {
                    rel: 'renew',
                    confirm: I18n.t('cert_watch.admin.certificates.confirm_renew')
                  })
      end
    end

    action_item(:install, only: :show) do
      if resource.can_install?
        button_to(I18n.t('cert_watch.admin.certificates.install'),
                  install_admin_certificate_path(resource),
                  method: :post,
                  data: {
                    rel: 'install',
                    confirm: I18n.t('cert_watch.admin.certificates.confirm_install')
                  })
      end
    end

    member_action :renew, method: :post do
      resource = Certificate.find(params[:id])
      resource.renew
      redirect_to(admin_certificate_path(resource))
    end

    member_action :install, method: :post do
      resource = Certificate.find(params[:id])
      resource.install
      redirect_to(admin_certificate_path(resource))
    end

    show title: :domain do |certificate|
      attributes_table_for(certificate) do
        row :domain
        row :state do
          cert_watch_certificate_state(certificate)
        end
        row :created_at
        row :last_renewed_at
        row :last_renewal_failed_at
        row :last_installed_at
        row :last_install_failed_at
        row :public_key
      end
    end

    before_create do |certificate|
      certificate.provider = 'custom'
    end

    controller do
      def permitted_params
        params.permit(certificate: [:domain, :public_key, :private_key, :chain])
      end
    end
  end
end