diff --git a/Web/lib/MJB/Web.pm b/Web/lib/MJB/Web.pm index 9bbf9b1..07beefb 100644 --- a/Web/lib/MJB/Web.pm +++ b/Web/lib/MJB/Web.pm @@ -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' ); } diff --git a/Web/lib/MJB/Web/Controller/Admin.pm b/Web/lib/MJB/Web/Controller/Admin.pm index 7960c1b..5a00127 100644 --- a/Web/lib/MJB/Web/Controller/Admin.pm +++ b/Web/lib/MJB/Web/Controller/Admin.pm @@ -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; diff --git a/Web/lib/MJB/Web/Task/UpdateSSLCerts.pm b/Web/lib/MJB/Web/Task/UpdateSSLCerts.pm new file mode 100644 index 0000000..a5057b0 --- /dev/null +++ b/Web/lib/MJB/Web/Task/UpdateSSLCerts.pm @@ -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; diff --git a/Web/templates/admin/index.html.ep b/Web/templates/admin/index.html.ep index 64f4d77..b79121a 100644 --- a/Web/templates/admin/index.html.ep +++ b/Web/templates/admin/index.html.ep @@ -4,3 +4,10 @@ %= include '_base/status_window'; +
+
+
+ +
+
+