mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-07 08:07:20 +02:00
Fixed #126
- Added cert store hot reload to fix newly ssl cert not loaded - Optimized SMTP structure and UI
This commit is contained in:
parent
fc9240fbac
commit
e24f31bdef
@ -101,6 +101,7 @@ func AcmeCheckAndHandleRenewCertificate(w http.ResponseWriter, r *http.Request)
|
|||||||
} else {
|
} else {
|
||||||
//This port do not support ACME
|
//This port do not support ACME
|
||||||
utils.SendErrorResponse(w, "ACME renew only support web server listening on port 80 (http) or 443 (https)")
|
utils.SendErrorResponse(w, "ACME renew only support web server listening on port 80 (http) or 443 (https)")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add a 3 second delay to make sure everything is settle down
|
//Add a 3 second delay to make sure everything is settle down
|
||||||
@ -109,6 +110,10 @@ func AcmeCheckAndHandleRenewCertificate(w http.ResponseWriter, r *http.Request)
|
|||||||
// Pass over to the acmeHandler to deal with the communication
|
// Pass over to the acmeHandler to deal with the communication
|
||||||
acmeHandler.HandleRenewCertificate(w, r)
|
acmeHandler.HandleRenewCertificate(w, r)
|
||||||
|
|
||||||
|
//Update the TLS cert store buffer
|
||||||
|
tlsCertManager.UpdateLoadedCertList()
|
||||||
|
|
||||||
|
//Restore original settings
|
||||||
if dynamicProxyRouter.Option.Port == 443 {
|
if dynamicProxyRouter.Option.Port == 443 {
|
||||||
if !isForceHttpsRedirectEnabledOriginally {
|
if !isForceHttpsRedirectEnabledOriginally {
|
||||||
//Default is off. Turn the redirection off
|
//Default is off. Turn the redirection off
|
||||||
|
@ -25,12 +25,6 @@ func HandleSMTPSet(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
domain, err := utils.PostPara(r, "domain")
|
|
||||||
if err != nil {
|
|
||||||
//Assume domain is empty, raised by issue #129
|
|
||||||
domain = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
portString, err := utils.PostPara(r, "port")
|
portString, err := utils.PostPara(r, "port")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.SendErrorResponse(w, "port must be a valid integer")
|
utils.SendErrorResponse(w, "port must be a valid integer")
|
||||||
@ -76,7 +70,6 @@ func HandleSMTPSet(w http.ResponseWriter, r *http.Request) {
|
|||||||
//Set the email sender properties
|
//Set the email sender properties
|
||||||
thisEmailSender := email.Sender{
|
thisEmailSender := email.Sender{
|
||||||
Hostname: strings.TrimSpace(hostname),
|
Hostname: strings.TrimSpace(hostname),
|
||||||
Domain: strings.TrimSpace(domain),
|
|
||||||
Port: port,
|
Port: port,
|
||||||
Username: strings.TrimSpace(username),
|
Username: strings.TrimSpace(username),
|
||||||
Password: strings.TrimSpace(password),
|
Password: strings.TrimSpace(password),
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
|
|
||||||
type Sender struct {
|
type Sender struct {
|
||||||
Hostname string //E.g. mail.gandi.net
|
Hostname string //E.g. mail.gandi.net
|
||||||
Domain string //E.g. arozos.com
|
|
||||||
Port int //E.g. 587
|
Port int //E.g. 587
|
||||||
Username string //Username of the email account
|
Username string //Username of the email account
|
||||||
Password string //Password of the email account
|
Password string //Password of the email account
|
||||||
@ -21,10 +20,9 @@ type Sender struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a new email sender object
|
// Create a new email sender object
|
||||||
func NewEmailSender(hostname string, domain string, port int, username string, password string, senderAddr string) *Sender {
|
func NewEmailSender(hostname string, port int, username string, password string, senderAddr string) *Sender {
|
||||||
return &Sender{
|
return &Sender{
|
||||||
Hostname: hostname,
|
Hostname: hostname,
|
||||||
Domain: domain,
|
|
||||||
Port: port,
|
Port: port,
|
||||||
Username: username,
|
Username: username,
|
||||||
Password: password,
|
Password: password,
|
||||||
@ -52,12 +50,8 @@ func (s *Sender) SendEmail(to string, subject string, content string) error {
|
|||||||
content + "\n\n")
|
content + "\n\n")
|
||||||
|
|
||||||
//Login to the SMTP server
|
//Login to the SMTP server
|
||||||
var auth smtp.Auth
|
//Username can be username (e.g. admin) or email (e.g. admin@example.com), depending on SMTP service provider
|
||||||
if s.Domain == "" {
|
auth := smtp.PlainAuth("", s.Username, s.Password, s.Hostname)
|
||||||
auth = smtp.PlainAuth("", s.Username, s.Password, s.Hostname)
|
|
||||||
} else {
|
|
||||||
auth = smtp.PlainAuth("", s.Username+"@"+s.Domain, s.Password, s.Hostname)
|
|
||||||
}
|
|
||||||
|
|
||||||
err := smtp.SendMail(s.Hostname+":"+strconv.Itoa(s.Port), auth, s.SenderAddr, []string{to}, msg)
|
err := smtp.SendMail(s.Hostname+":"+strconv.Itoa(s.Port), auth, s.SenderAddr, []string{to}, msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -65,21 +65,9 @@
|
|||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<p><i class="caret down icon"></i> Credentials for SMTP server authentications</p>
|
<p><i class="caret down icon"></i> Credentials for SMTP server authentications</p>
|
||||||
<div class="two fields">
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label>Sender Username</label>
|
<label>Sender Username / Email</label>
|
||||||
<input type="text" name="username" placeholder="E.g. admin">
|
<input type="text" name="username" placeholder="e.g. admin or admin@mydomain.com">
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field">
|
|
||||||
<label>Sender Domain</label>
|
|
||||||
<div class="ui labeled input">
|
|
||||||
<div class="ui basic label">
|
|
||||||
@
|
|
||||||
</div>
|
|
||||||
<input type="text" name="domain" min="1" max="65534" placeholder="E.g. arozos.com">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
@ -272,7 +260,6 @@
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var data = {
|
var data = {
|
||||||
hostname: $('input[name=hostname]').val(),
|
hostname: $('input[name=hostname]').val(),
|
||||||
domain: $('input[name=domain]').val(),
|
|
||||||
port: parseInt($('input[name=port]').val()),
|
port: parseInt($('input[name=port]').val()),
|
||||||
username: $('input[name=username]').val(),
|
username: $('input[name=username]').val(),
|
||||||
password: $('input[name=password]').val(),
|
password: $('input[name=password]').val(),
|
||||||
@ -306,7 +293,6 @@
|
|||||||
function initSMTPSettings(){
|
function initSMTPSettings(){
|
||||||
$.get("/api/tools/smtp/get", function(data){
|
$.get("/api/tools/smtp/get", function(data){
|
||||||
$('#email-form input[name=hostname]').val(data.Hostname);
|
$('#email-form input[name=hostname]').val(data.Hostname);
|
||||||
$('#email-form input[name=domain]').val(data.Domain);
|
|
||||||
$('#email-form input[name=port]').val(data.Port);
|
$('#email-form input[name=port]').val(data.Port);
|
||||||
$('#email-form input[name=username]').val(data.Username);
|
$('#email-form input[name=username]').val(data.Username);
|
||||||
$('#email-form input[name=senderAddr]').val(data.SenderAddr);
|
$('#email-form input[name=senderAddr]').val(data.SenderAddr);
|
||||||
@ -345,16 +331,6 @@
|
|||||||
form.find('input[name="hostname"]').parent().removeClass('error');
|
form.find('input[name="hostname"]').parent().removeClass('error');
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate domain, now allow empty string (for smtp that dont use domain as input)
|
|
||||||
/*
|
|
||||||
const domain = form.find('input[name="domain"]').val().trim();
|
|
||||||
if (!domainRegex.test(domain)) {
|
|
||||||
form.find('input[name="domain"]').parent().addClass('error');
|
|
||||||
isValid = false;
|
|
||||||
} else {
|
|
||||||
form.find('input[name="domain"]').parent().removeClass('error');
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// validate username
|
// validate username
|
||||||
const username = form.find('input[name="username"]').val().trim();
|
const username = form.find('input[name="username"]').val().trim();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user