mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-04-26 09:02:27 +00:00
Added the ability to specify the SSL key type (ECDSA or RSA) for each site in the Nginx Proxy Manager. This enhancement is particularly useful for environments with IoT devices that have limitations with specific key types, such as RSA-only support. The implementation includes: - Backend support for storing and validating the `ssl_key_type` field. - Swagger schema updated to validate the new input. - Frontend update to allow users to select the SSL key type via a dropdown menu. This feature ensures greater flexibility and compatibility in managing SSL certificates for diverse setups.
291 lines
20 KiB
Plaintext
291 lines
20 KiB
Plaintext
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title"><%- i18n('proxy-hosts', 'form-title', {id: id}) %></h5>
|
|
<button type="button" class="close cancel" aria-label="Close" data-dismiss="modal"> </button>
|
|
</div>
|
|
<div class="modal-body has-tabs">
|
|
<div class="alert alert-danger mb-0 rounded-0" id="le-error-info" role="alert"></div>
|
|
<form>
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
<li role="presentation" class="nav-item"><a href="#details" aria-controls="tab1" role="tab" data-toggle="tab" class="nav-link active"><i class="fe fe-zap"></i> <%- i18n('all-hosts', 'details') %></a></li>
|
|
<li role="presentation" class="nav-item"><a href="#locations" aria-controls="tab4" role="tab" data-toggle="tab" class="nav-link"><i class="fe fe-layers"></i> <%- i18n('all-hosts', 'locations') %></a></li>
|
|
<li role="presentation" class="nav-item"><a href="#ssl-options" aria-controls="tab2" role="tab" data-toggle="tab" class="nav-link"><i class="fe fe-shield"></i> <%- i18n('str', 'ssl') %></a></li>
|
|
<li role="presentation" class="nav-item"><a href="#advanced" aria-controls="tab3" role="tab" data-toggle="tab" class="nav-link"><i class="fe fe-settings"></i> <%- i18n('all-hosts', 'advanced') %></a></li>
|
|
</ul>
|
|
<div class="tab-content">
|
|
|
|
<!-- Locations -->
|
|
<div class="tab-pane" id="locations">
|
|
<div class="row">
|
|
<div class="col-sm-12">
|
|
<button type="button" class="btn btn-secondary add_location"><%- i18n('locations', 'new_location') %></button>
|
|
<div class="locations_container mt-3"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Details -->
|
|
<div role="tabpanel" class="tab-pane active" id="details">
|
|
<div class="row">
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('all-hosts', 'domain-names') %> <span class="form-required">*</span></label>
|
|
<input type="text" name="domain_names" class="form-control" id="input-domains" value="<%- domain_names.join(',') %>" required>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-3 col-md-3">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('proxy-hosts', 'forward-scheme') %><span class="form-required">*</span></label>
|
|
<select name="forward_scheme" class="form-control custom-select" placeholder="http">
|
|
<option value="http" <%- forward_scheme === 'http' ? 'selected' : '' %>>http</option>
|
|
<option value="https" <%- forward_scheme === 'https' ? 'selected' : '' %>>https</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-5 col-md-5">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('proxy-hosts', 'forward-host') %><span class="form-required">*</span></label>
|
|
<input type="text" name="forward_host" class="form-control text-monospace" placeholder="" value="<%- forward_host %>" autocomplete="off" maxlength="255" required>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-4 col-md-4">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('proxy-hosts', 'forward-port') %> <span class="form-required">*</span></label>
|
|
<input name="forward_port" type="number" class="form-control text-monospace" placeholder="80" value="<%- forward_port %>" required>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6 col-md-6">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="caching_enabled" value="1"<%- caching_enabled ? ' checked' : '' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('all-hosts', 'caching-enabled') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6 col-md-6">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="block_exploits" value="1"<%- block_exploits ? ' checked' : '' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('all-hosts', 'block-exploits') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="allow_websocket_upgrade" value="1"<%- allow_websocket_upgrade ? ' checked' : '' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('proxy-hosts', 'allow-websocket-upgrade') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('proxy-hosts', 'access-list') %></label>
|
|
<select name="access_list_id" class="form-control custom-select" placeholder="<%- i18n('access-lists', 'public') %>">
|
|
<option selected value="0" data-data="{"id":0}" <%- access_list_id ? '' : 'selected' %>><%- i18n('access-lists', 'public') %></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- SSL -->
|
|
<div role="tabpanel" class="tab-pane" id="ssl-options">
|
|
<div class="row">
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('all-hosts', 'ssl-certificate') %></label>
|
|
<select name="certificate_id" class="form-control custom-select" placeholder="<%- i18n('all-hosts', 'none') %>">
|
|
<option selected value="0" data-data="{"id":0}" <%- certificate_id ? '' : 'selected' %>><%- i18n('all-hosts', 'none') %></option>
|
|
<option selected value="new" data-data="{"id":"new"}"><%- i18n('all-hosts', 'new-cert') %></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('all-hosts', 'ssl-key-type') %></label>
|
|
<select name="ssl_key_type" class="form-control custom-select">
|
|
<option value="ecdsa" data-data="{"id":"ecdsa"}" <%- ssl_key_type == 'ecdsa' ? 'selected' : '' %>>ECDSA</option>
|
|
<option value="rsa" data-data="{"id":"rsa"}" <%- ssl_key_type == 'rsa' ? 'selected' : '' %>>RSA</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6 col-md-6">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="ssl_forced" value="1"<%- ssl_forced ? ' checked' : '' %><%- certificate_id ? '' : ' disabled' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('all-hosts', 'force-ssl') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6 col-md-6">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="http2_support" value="1"<%- http2_support ? ' checked' : '' %><%- certificate_id ? '' : ' disabled' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('all-hosts', 'http2-support') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6 col-md-6">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="hsts_enabled" value="1"<%- hsts_enabled ? ' checked' : '' %><%- certificate_id && ssl_forced ? '' : ' disabled' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('all-hosts', 'hsts-enabled') %> <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank"><i class="fe fe-help-circle"></i></a></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6 col-md-6">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="hsts_subdomains" value="1"<%- hsts_subdomains ? ' checked' : '' %><%- certificate_id && ssl_forced && hsts_enabled ? '' : ' disabled' %>>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%- i18n('all-hosts', 'hsts-subdomains') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- DNS challenge -->
|
|
<div class="col-sm-12 col-md-12 letsencrypt">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input
|
|
type="checkbox"
|
|
class="custom-switch-input"
|
|
name="meta[dns_challenge]"
|
|
value="1"
|
|
<%- getUseDnsChallenge() ? 'checked' : '' %>
|
|
>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%= i18n('ssl', 'dns-challenge') %></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-12 col-md-12 letsencrypt">
|
|
<fieldset class="form-fieldset dns-challenge">
|
|
<div class="text-red mb-4"><i class="fe fe-alert-triangle"></i> <%= i18n('ssl', 'certbot-warning') %></div>
|
|
|
|
<!-- Certbot DNS plugin selection -->
|
|
<div class="row">
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('ssl', 'dns-provider') %> <span class="form-required">*</span></label>
|
|
<select
|
|
name="meta[dns_provider]"
|
|
id="dns_provider"
|
|
class="form-control custom-select"
|
|
>
|
|
<option
|
|
value=""
|
|
disabled
|
|
hidden
|
|
<%- getDnsProvider() === null ? 'selected' : '' %>
|
|
>Please Choose...</option>
|
|
<% _.each(dns_plugins, function(plugin_info, plugin_name){ %>
|
|
<option
|
|
value="<%- plugin_name %>"
|
|
<%- getDnsProvider() === plugin_name ? 'selected' : '' %>
|
|
><%- plugin_info.name %></option>
|
|
<% }); %>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Certbot credentials file content -->
|
|
<div class="row credentials-file-content">
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('ssl', 'credentials-file-content') %> <span class="form-required">*</span></label>
|
|
<textarea
|
|
name="meta[dns_provider_credentials]"
|
|
class="form-control text-monospace"
|
|
id="dns_provider_credentials"
|
|
><%- getDnsProviderCredentials() %></textarea>
|
|
<div class="text-secondary small">
|
|
<i class="fe fe-info"></i>
|
|
<%= i18n('ssl', 'credentials-file-content-info') %>
|
|
</div>
|
|
<div class="text-red small">
|
|
<i class="fe fe-alert-triangle"></i>
|
|
<%= i18n('ssl', 'stored-as-plaintext-info') %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- DNS propagation delay -->
|
|
<div class="row">
|
|
<div class="col-sm-12 col-md-12">
|
|
<div class="form-group mb-0">
|
|
<label class="form-label"><%- i18n('ssl', 'propagation-seconds') %></label>
|
|
<input
|
|
type="number"
|
|
min="0"
|
|
name="meta[propagation_seconds]"
|
|
class="form-control"
|
|
id="propagation_seconds"
|
|
value="<%- getPropagationSeconds() %>"
|
|
>
|
|
<div class="text-secondary small">
|
|
<i class="fe fe-info"></i>
|
|
<%= i18n('ssl', 'propagation-seconds-info') %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<!-- Lets encrypt -->
|
|
<div class="col-sm-12 col-md-12 letsencrypt">
|
|
<div class="form-group">
|
|
<label class="form-label"><%- i18n('ssl', 'letsencrypt-email') %> <span class="form-required">*</span></label>
|
|
<input name="meta[letsencrypt_email]" type="email" class="form-control" placeholder="" value="<%- getLetsencryptEmail() %>" required disabled>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-12 col-md-12 letsencrypt">
|
|
<div class="form-group">
|
|
<label class="custom-switch">
|
|
<input type="checkbox" class="custom-switch-input" name="meta[letsencrypt_agree]" value="1" required disabled>
|
|
<span class="custom-switch-indicator"></span>
|
|
<span class="custom-switch-description"><%= i18n('ssl', 'letsencrypt-agree', {url: 'https://letsencrypt.org/repository/'}) %> <span class="form-required">*</span></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Advanced -->
|
|
<div role="tabpanel" class="tab-pane" id="advanced">
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<p><%- i18n('all-hosts', 'advanced-config-var-headline') %></p>
|
|
<ul class="text-monospace">
|
|
<li><code>$server</code> <%- i18n('proxy-hosts', 'forward-host') %></li>
|
|
<li><code>$port</code> <%- i18n('proxy-hosts', 'forward-port') %></li>
|
|
<li><code>$forward_scheme</code> <%- i18n('proxy-hosts', 'forward-scheme') %></li>
|
|
</ul>
|
|
<div class="form-group mb-0">
|
|
<label class="form-label"><%- i18n('all-hosts', 'advanced-config') %></label>
|
|
<textarea name="advanced_config" rows="8" class="form-control text-monospace" placeholder="# <%- i18n('all-hosts', 'advanced-warning') %>"><%- advanced_config %></textarea>
|
|
</div>
|
|
<p class="small text-gray"><i class="fe fe-alert-triangle"></i> <%- i18n('all-hosts', 'advanced-config-header-info') %></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary cancel" data-dismiss="modal"><%- i18n('str', 'cancel') %></button>
|
|
<button type="button" class="btn btn-teal save"><%- i18n('str', 'save') %></button>
|
|
</div>
|
|
</div>
|