Merge pull request #564 from cshore/pull-request-app-firewall-timedate

Pull request app firewall timedate
This commit is contained in:
Jo-Philipp Wich 2015-12-15 23:08:17 +01:00
commit f25c4e07bc
4 changed files with 117 additions and 1 deletions

View file

@ -316,4 +316,34 @@ else
translate("Passes additional arguments to iptables. Use with care!"))
end
o = s:option(MultiValue, "weekdays", translate("Week Days"))
o.oneline = true
o.widget = "checkbox"
o:value("sun", translate("Sunday"))
o:value("mon", translate("Monday"))
o:value("tue", translate("Tuesday"))
o:value("wed", translate("Wednesday"))
o:value("thu", translate("Thursday"))
o:value("fri", translate("Friday"))
o:value("sat", translate("Saturday"))
o = s:option(MultiValue, "monthdays", translate("Month Days"))
o.oneline = true
o.widget = "checkbox"
for i = 1,31 do
o:value(translate(i))
end
o = s:option(Value, "start_time", translate("Start Time (hh:mm:ss)"))
o.datatype = "timehhmmss"
o = s:option(Value, "stop_time", translate("Stop Time (hh:mm:ss)"))
o.datatype = "timehhmmss"
o = s:option(Value, "start_date", translate("Start Date (yyyy-mm-dd)"))
o.datatype = "dateyyyymmdd"
o = s:option(Value, "stop_date", translate("Stop Date (yyyy-mm-dd)"))
o.datatype = "dateyyyymmdd"
o = s:option(Flag, "utc_time", translate("Time in UTC"))
o.default = o.disabled
return m

View file

@ -322,6 +322,47 @@ var cbi_validators = {
'phonedigit': function()
{
return (this.match(/^[0-9\*#!\.]+$/) != null);
},
'timehhmmss': function()
{
return (this.match(/^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$/) != null);
},
'dateyyyymmdd': function()
{
if (this == null) {
return false;
}
if (this.match(/^(\d\d\d\d)-(\d\d)-(\d\d)/)) {
var year = RegExp.$1;
var month = RegExp.$2;
var day = RegExp.$2
var days_in_month = [ 31, 28, 31, 30, 31, 30, 31, 31, 30 , 31, 30, 31 ];
function is_leap_year(year) {
return ((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0);
}
function get_days_in_month(month, year) {
if ((month == 2) && is_leap_year(year)) {
return 29;
} else {
return days_in_month[month];
}
}
/* Firewall rules in the past don't make sense */
if (year < 2015) {
return false;
}
if ((month <= 0) || (month > 12)) {
return false;
}
if ((day <= 0) || (day > get_days_in_month(month, year))) {
return false;
}
return true;
} else {
return false;
}
}
};

View file

@ -341,3 +341,48 @@ end
function phonedigit(val)
return (val:match("^[0-9\*#!%.]+$") ~= nil)
end
function timehhmmss(val)
return (val:match("^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$") ~= nil)
end
function dateyyyymmdd(val)
if val ~= nil then
yearstr, monthstr, daystr = val:match("^(%d%d%d%d)-(%d%d)-(%d%d)$")
if (yearstr == nil) or (monthstr == nil) or (daystr == nil) then
return false;
end
year = tonumber(yearstr)
month = tonumber(monthstr)
day = tonumber(daystr)
if (year == nil) or (month == nil) or (day == nil) then
return false;
end
local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
local function is_leap_year(year)
return (year % 4 == 0) and ((year % 100 ~= 0) or (year % 400 == 0))
end
function get_days_in_month(month, year)
if (month == 2) and is_leap_year(year) then
return 29
else
return days_in_month[month]
end
end
if (year < 2015) then
return false
end
if ((month == 0) or (month > 12)) then
return false
end
if ((day == 0) or (day > get_days_in_month(month, year))) then
return false
end
return true
end
return false
end

View file

@ -12,7 +12,7 @@
c = c + 1
%>
<input class="cbi-input-checkbox" type="checkbox" onclick="cbi_d_update(this.id)" onchange="cbi_d_update(this.id)"<%= attr("id", cbid..c) .. attr("name", cbid) .. attr("value", key) .. ifattr(luci.util.contains(v, key), "checked", "checked") %> />
<label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label><br />
<label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label><% if not self.oneline then %><br /><% else %> <% end %>
<% if c == self.size then c = 0 %><br />
<% end end %>
<% end %>