master
Manager Bot 3 years ago
parent 5feb6e1d91
commit 049c3faada
  1. 8
      Web/lib/MJB/Web.pm
  2. 8
      Web/lib/MJB/Web/Controller/Admin.pm
  3. 29
      Web/lib/MJB/Web/Task/UpdateSSLCerts.pm
  4. 7
      Web/templates/admin/index.html.ep

@ -72,9 +72,10 @@ sub startup ($self) {
$self->minion->add_task( sync_blog_media => 'MJB::Web::Task::SyncBlogMedia' );
# SSL cert related jobs.
$self->minion->add_task( mk_wildcard_ssl => 'MJB::Web::Task::WildCardSSL' );
$self->minion->add_task( create_ssl_cert => 'MJB::Web::Task::CreateSSLCert' );
$self->minion->add_task( sync_ssl_certs => 'MJB::Web::Task::SyncSSLCerts' );
$self->minion->add_task( mk_wildcard_ssl => 'MJB::Web::Task::WildCardSSL' );
$self->minion->add_task( create_ssl_cert => 'MJB::Web::Task::CreateSSLCert' );
$self->minion->add_task( sync_ssl_certs => 'MJB::Web::Task::SyncSSLCerts' );
$self->minion->add_task( update_ssl_certs => 'MJB::Web::Task::UpdateSSLCerts' );
# Standard router.
my $r = $self->routes->under( '/' => sub ($c) {
@ -226,6 +227,7 @@ sub startup ($self) {
$admin->get ( '/admin/alerts' )->to('Admin#alerts' )->name('show_admin_alerts' );
$admin->post( '/admin/alert/:id' )->to('Admin#do_alert_read' )->name('do_admin_alert_read' );
$admin->get ( '/admin/jobs' )->to('Admin#jobs' )->name('show_admin_jobs' );
$admin->post( '/admin/update_ssl' )->to('Admin#do_update_ssl' )->name('do_admin_update_ssl' );
}

@ -187,4 +187,12 @@ sub do_domain_remove ( $c ) {
$c->redirect_to( $c->url_for( 'show_admin_domains' ) );
}
sub do_update_ssl ( $c ) {
my $id = $c->minion->enqueue( 'update_ssl_certs', [ ], { queue => 'certbot' } );
$c->db->admin_jobs->create({ minion_job_id => $id });
$c->flash( confirmation => "Scheduled job to update SSL certs." );
$c->redirect_to( $c->url_for( 'show_admin_jobs' ) );
}
1;

@ -0,0 +1,29 @@
package MJB::Web::Task::UpdateSSLCerts;
use Mojo::Base 'MJB::Web::Task', -signatures;
use IPC::Run3;
#==
# This task pushes all of the let's encrypt ssl certs from certbot to
# the webservers. It can be used after certificates have been renewed
# to ensure they are on the webservers.
#
# It should be in the certbot queue.
#==
sub run ( $job ) {
$job->note( _mds_template => 'update_ssl_certs' );
# Renew the SSL Certificates
$job->system_command( [ 'sudo', 'letsencrypt renew' ] );
$job->note( is_renew_done => 1 );
# Push the SSL Certificates
$job->system_command( [ 'sudo', 'letsencrypt-cert-push' ] );
$job->note( is_sync_done => 1 );
$job->finish();
}
1;

@ -4,3 +4,10 @@
%= include '_base/status_window';
<div class="mt-3 row">
<div class="col">
<form style="margin-top: 1.5em; display: inline;" method="POST" action="<%= $c->url_for( 'do_admin_update_ssl' ) %>">
<button type="submit" class="btn btn-sm btn-outline-danger">Update SSL Certs</button>
</form>
</div>
</div>

Loading…
Cancel
Save