master
Manager Bot 3 years ago
parent e0e56a2e4a
commit 1e52285dbe
  1. 1
      Web/lib/MJB/Web.pm
  2. 7
      Web/lib/MJB/Web/Controller/Admin.pm
  3. 23
      Web/lib/MJB/Web/Task/WildCardSSL.pm
  4. 9
      Web/templates/admin/domains.html.ep

@ -64,6 +64,7 @@ sub startup ($self) {
$self->minion->add_task( sync_blog_media => 'MJB::Web::Task::SyncBlogMedia' ); $self->minion->add_task( sync_blog_media => 'MJB::Web::Task::SyncBlogMedia' );
# SSL cert related jobs. # 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( create_ssl_cert => 'MJB::Web::Task::CreateSSLCert' );
$self->minion->add_task( sync_ssl_certs => 'MJB::Web::Task::SyncSSLCerts' ); $self->minion->add_task( sync_ssl_certs => 'MJB::Web::Task::SyncSSLCerts' );

@ -96,10 +96,11 @@ sub domains ( $c ) {
sub do_domain ( $c ) { sub do_domain ( $c ) {
my $fqdn = $c->param('domain_fqdn'); my $fqdn = $c->param('domain_fqdn');
my $ssl = $c->param('ssl_challenge');
my $domain = try { my $domain = try {
$c->db->storage->schema->txn_do( sub { $c->db->storage->schema->txn_do( sub {
$c->db->hosted_domains->create({ name => $fqdn }); $c->db->hosted_domains->create({ name => $fqdn, letsencrypt_challenge => $ssl });
}); });
} catch { } catch {
$c->flash( error_message => "domain could not be created: $_" ); $c->flash( error_message => "domain could not be created: $_" );
@ -107,6 +108,10 @@ sub do_domain ( $c ) {
return; return;
}; };
if ( $ssl eq 'dns-linode' ) {
$c->minion->enqueue( 'mk_wildcard_ssl', [ $domain->id ], { queue => 'certbot' } );
}
$c->flash( confirmation => "Added $fqdn to domain pool." ); $c->flash( confirmation => "Added $fqdn to domain pool." );
$c->redirect_to( $c->url_for( 'show_admin_domains' ) ); $c->redirect_to( $c->url_for( 'show_admin_domains' ) );
} }

@ -0,0 +1,23 @@
package MJB::Web::Task::WildCardSSL;
use Mojo::Base 'MJB::Web::Task', -signatures;
use IPC::Run3;
sub run ( $job, $hosted_domain_id ) {
$job->note( _mds_template => 'build_static' );
my $domain = $job->app->db->hosted_domain( $hosted_domain_id );
# Get the SSL Certificate
my $result_fetch = $job->system_command( [
qw(sudo certbot certonly --dns-linode ----dns-linode-credentials /etc/letsencrypt/.secrets/linode.ini -d ), '*.' . $domain->name, qw(--agree-tos --register-unsafely-without-email)
]);
# Push the SSL Certs to all hosts
my $result_sync = $job->system_command( [
qw(sudo letsencrypt-cert-push)
]);
$job->finish();
}
1;

@ -11,6 +11,15 @@
<div class="col-auto"> <div class="col-auto">
<input type="text" class="form-control" id="domain_fqdn" name="domain_fqdn" /> <input type="text" class="form-control" id="domain_fqdn" name="domain_fqdn" />
</div> </div>
<div class="col-auto">
<label for="ssl_challenge" class="col-form-label">SSL Challenge</label>
</div>
<div class="col-auto">
<select name="ssl_challenge" class="form-select" aria-label="Select Domain Name">
<option name="ssl_challenge" value="http">HTTP</option>
<option name="ssl_challenge" value="dns-linode">DNS - Linode</option>
</select>
</div>
<div class="col-auto"> <div class="col-auto">
<button type="submit" class="btn btn-sm btn-primary">Add Hosted Domain</button> <button type="submit" class="btn btn-sm btn-primary">Add Hosted Domain</button>
</div> </div>

Loading…
Cancel
Save