mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Add option to send mail when connection status change
This commit is contained in:
parent
80cb838778
commit
2679958caa
9 changed files with 155 additions and 0 deletions
15
luci-app-mail/Makefile
Normal file
15
luci-app-mail/Makefile
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
LUCI_TITLE:=LuCI Mail Configuration
|
||||||
|
LUCI_DEPENDS:=+msmtp-mta +ca-certificates
|
||||||
|
|
||||||
|
PKG_LICENSE:=GPLv3
|
||||||
|
|
||||||
|
include ../luci/luci.mk
|
||||||
|
|
||||||
|
# call BuildPackage - OpenWrt buildroot signature
|
8
luci-app-mail/luasrc/controller/mail.lua
Normal file
8
luci-app-mail/luasrc/controller/mail.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
local ucic = luci.model.uci.cursor()
|
||||||
|
local dt = require "luci.cbi.datatypes"
|
||||||
|
module("luci.controller.mail", package.seeall)
|
||||||
|
|
||||||
|
function index()
|
||||||
|
entry({"admin", "services", "mail"}, alias("admin", "services", "mail", "index"), _("Mail"))
|
||||||
|
entry({"admin", "services", "mail", "index"}, cbi("mail"))
|
||||||
|
end
|
44
luci-app-mail/luasrc/model/cbi/mail.lua
Normal file
44
luci-app-mail/luasrc/model/cbi/mail.lua
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
-- Copyright 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||||
|
-- Licensed to the public under the Apache License 2.0.
|
||||||
|
|
||||||
|
m = Map("mail", translate("Send mail"), translate("Send mail settings"))
|
||||||
|
|
||||||
|
s = m:section(TypedSection, "smtp", translate("SMTP"))
|
||||||
|
s.anonymous = true
|
||||||
|
s.addremove = false
|
||||||
|
|
||||||
|
server = s:option(Value, "server", translate("Server"))
|
||||||
|
server.datatype = "host"
|
||||||
|
server.placeholder = "smtp.gmail.com"
|
||||||
|
server.optional = false
|
||||||
|
|
||||||
|
port = s:option(Value, "port", translate("Port"))
|
||||||
|
port.datatype = "port"
|
||||||
|
port.optional = false
|
||||||
|
port.rmempty = true
|
||||||
|
port.default = "25"
|
||||||
|
|
||||||
|
tls = s:option(Flag, "tls", translate("TLS"))
|
||||||
|
tls.rmempty = false
|
||||||
|
|
||||||
|
tls_starttls = s:option(Flag, "tls_starttls", translate("STARTTLS"))
|
||||||
|
tls_starttls.rmempty = false
|
||||||
|
|
||||||
|
user = s:option(Value, "user", translate("User"))
|
||||||
|
user.rmempty = true
|
||||||
|
|
||||||
|
password = s:option(Value, "password", translate("Password"))
|
||||||
|
password.password = true
|
||||||
|
password.rmempty = true
|
||||||
|
|
||||||
|
from = s:option(Value, "from", translate("From"))
|
||||||
|
from.optional = false
|
||||||
|
from.rmempty = true
|
||||||
|
from.placeholder = "myself@gmail.com"
|
||||||
|
|
||||||
|
to = s:option(Value, "to", translate("To"))
|
||||||
|
to.optional = false
|
||||||
|
to.rmempty = true
|
||||||
|
to.placeholder = "myself@gmail.com"
|
||||||
|
|
||||||
|
return m
|
1
luci-app-mail/root/etc/config/mail
Normal file
1
luci-app-mail/root/etc/config/mail
Normal file
|
@ -0,0 +1 @@
|
||||||
|
config smtp 'default'
|
60
luci-app-mail/root/etc/init.d/msmtp
Executable file
60
luci-app-mail/root/etc/init.d/msmtp
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||||
|
|
||||||
|
START=90
|
||||||
|
STOP=10
|
||||||
|
|
||||||
|
USE_PROCD=1
|
||||||
|
|
||||||
|
validate_section() {
|
||||||
|
uci_validate_section mail smtp "${1}" \
|
||||||
|
'server:host' \
|
||||||
|
'tls:bool:0' \
|
||||||
|
'tls_starttls:bool:0' \
|
||||||
|
'from:string' \
|
||||||
|
'user:string' \
|
||||||
|
'password:string' \
|
||||||
|
'port:port:25'
|
||||||
|
}
|
||||||
|
|
||||||
|
config_account() {
|
||||||
|
local server tls tls_starttls from user password
|
||||||
|
|
||||||
|
validate_section "${1}" || {
|
||||||
|
_err "validation failed"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
cat > /tmp/msmtp.tmp <<-EOF
|
||||||
|
account default
|
||||||
|
host $server
|
||||||
|
port $port
|
||||||
|
EOF
|
||||||
|
[ -n "$user" ] && [ -n "$password" ] && {
|
||||||
|
cat >> /tmp/msmtp.tmp <<-EOF
|
||||||
|
auth on
|
||||||
|
user $user
|
||||||
|
password $password
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
[ -n "$from" ] && echo "from $from" >> /tmp/msmtp.tmp
|
||||||
|
[ "$tls" = "1" ] && {
|
||||||
|
cat >> /tmp/msmtp.tmp <<-EOF
|
||||||
|
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||||
|
tls on
|
||||||
|
EOF
|
||||||
|
} || {
|
||||||
|
echo 'tls off' >> /tmp/msmtp.tmp
|
||||||
|
}
|
||||||
|
[ "$tls_starttls" = "1" ] && {
|
||||||
|
echo 'tls_starttls on' >> /tmp/msmtp.tmp
|
||||||
|
} || {
|
||||||
|
echo 'tls_starttls off' >> /tmp/msmtp.tmp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
config_load mail
|
||||||
|
config_foreach config_account smtp
|
||||||
|
[ -f "/tmp/msmtp.tmp" ] && mv /tmp/msmtp.tmp /etc/msmtprc
|
||||||
|
}
|
8
luci-app-mail/root/etc/uci-defaults/4101-mail
Executable file
8
luci-app-mail/root/etc/uci-defaults/4101-mail
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
uci -q batch <<-EOF >/dev/null
|
||||||
|
delete ucitrack.@mail[-1]
|
||||||
|
add ucitrack mail
|
||||||
|
set ucitrack.@mail[-1].init=mail
|
||||||
|
commit ucitrack
|
||||||
|
EOF
|
||||||
|
exit 0
|
|
@ -72,6 +72,10 @@ o:value("httping","httping")
|
||||||
o:value("dns","dns")
|
o:value("dns","dns")
|
||||||
o:value("none","none")
|
o:value("none","none")
|
||||||
|
|
||||||
|
o = s:option(Flag, "mail_alert", translate("Mail alert"), translate("Send a mail when connection state change"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
|
|
||||||
o = s:option(DynamicList, "hosts", translate("Hosts"))
|
o = s:option(DynamicList, "hosts", translate("Hosts"))
|
||||||
o.placeholder = "4.2.2.1"
|
o.placeholder = "4.2.2.1"
|
||||||
o.default = { "4.2.2.1", "8.8.8.8" }
|
o.default = { "4.2.2.1", "8.8.8.8" }
|
||||||
|
@ -115,6 +119,10 @@ o:value("httping","httping")
|
||||||
o:value("dns","dns")
|
o:value("dns","dns")
|
||||||
o:value("none","none")
|
o:value("none","none")
|
||||||
|
|
||||||
|
o = s:option(Flag, "mail_alert", translate("Mail alert"), translate("Send a mail when connection status change"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
|
|
||||||
o = s:option(DynamicList, "hosts", translate("Hosts"))
|
o = s:option(DynamicList, "hosts", translate("Hosts"))
|
||||||
o.placeholder = "4.2.2.1"
|
o.placeholder = "4.2.2.1"
|
||||||
o.default = { "4.2.2.1", "8.8.8.8" }
|
o.default = { "4.2.2.1", "8.8.8.8" }
|
||||||
|
|
|
@ -122,10 +122,14 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
[ "$multipath_status" = "off" ] || {
|
[ "$multipath_status" = "off" ] || {
|
||||||
|
mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)"
|
||||||
|
[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
|
||||||
if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then
|
if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then
|
||||||
_log "$OMR_TRACKER_DEVICE switched off"
|
_log "$OMR_TRACKER_DEVICE switched off"
|
||||||
|
[ "$mail_alert" = "1" ] && echo -e "Subject: OpenMPTCProuter: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nOpenMPTCProuter detected a connection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE)." | sendmail $(uci -q get mail.default.to)
|
||||||
else
|
else
|
||||||
_log "$OMR_TRACKER_DEVICE switched off because $OMR_TRACKER_STATUS_MSG"
|
_log "$OMR_TRACKER_DEVICE switched off because $OMR_TRACKER_STATUS_MSG"
|
||||||
|
[ "$mail_alert" = "1" ] && echo -e "Subject: OpenMPTCProuter: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nOpenMPTCProuter detected a connection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE). The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
|
||||||
fi
|
fi
|
||||||
if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then
|
if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then
|
||||||
multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1
|
multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1
|
||||||
|
@ -213,6 +217,12 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR_TRACKER_STATUS" ]; then
|
||||||
|
mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)"
|
||||||
|
[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
|
||||||
|
[ "$mail_alert" = "1" ] && echo -e "Subject: OpenMPTCProuter: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nOpenMPTCProuter detected a connection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE)." | sendmail $(uci -q get mail.default.to)
|
||||||
|
fi
|
||||||
|
|
||||||
multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off")
|
multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off")
|
||||||
if [ "$multipath_config" = "master" ]; then
|
if [ "$multipath_config" = "master" ]; then
|
||||||
if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
|
if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
|
||||||
|
|
|
@ -37,6 +37,7 @@ MY_DEPENDS := \
|
||||||
luci-app-sqm sqm-scripts-extra \
|
luci-app-sqm sqm-scripts-extra \
|
||||||
luci-app-vnstat omr-quota luci-app-omr-quota \
|
luci-app-vnstat omr-quota luci-app-omr-quota \
|
||||||
luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass \
|
luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass \
|
||||||
|
luci-app-mail \
|
||||||
omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd iputils-traceroute6 \
|
omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd iputils-traceroute6 \
|
||||||
speedtestc \
|
speedtestc \
|
||||||
iftop \
|
iftop \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue