Block by Time Script
Copy
function toString(n){return (n \< 10? '0' : '') + n;}
function tzOffset(s){
var i = s.indexOf(":");
return parseInt(s.substring(3, i)) \* 60 + parseInt(s.substring(i+1));
}
// In the line below, replace \<start_day\> with the start of the working day of
the week,
// and \<end_day\> with the end of the working day of the week.
// Example: var workDays = ["1","5"];
var workDays = ["\<start_day\>","\<end_day\>"];
// Replace \<start_time\> with the start of business hours,
// and \<end_time\> with the end of business hours.
// Example: var officeHours = ["08:00:00","17:00:00"];
var officeHours = ["\<start_time\>","\<end_time\>"];
// Replace \<time_zone\> with the office time zone.
// Example: var officeTimeZone = "UTC-08:00";
var officeTimeZone = "\<time_zone\>";
if (workDays[0] == "\<start_day\>" ZZ_BAR_ZZZZ_BAR_ZZ workDays[1] == "\<end_day\>"){
throw "\<start_day\> or \<end_day\> is not set. Please replace \<start_day\> and
\<end_day\> with the start and end of the working day of the week.";
}
var dayPatt = /\^[0-6]\$/i;
if (!workDays[0].match(dayPatt) ZZ_BAR_ZZZZ_BAR_ZZ !workDays[1].match(dayPatt)){
throw "\<start_day\> or \<end_day\> is not properly set. Please use a number
between 0 and 6. 0 means Sunday and 6 means Saturday.";
}
if (parseInt(workDays[0]) \> parseInt(workDays[1])){
throw "\<start_day\> or \<end_day\> is not properly set. Please make sure
\<start_day\> is no later than \<end_day\>.";
}
if (officeHours[0] == "\<start_time\>" ZZ_BAR_ZZZZ_BAR_ZZ officeHours[1] == "\<end_time\>"){
throw "\<start_time\> or \<end_time\> is not set. Please replace \<start_time\>
and \<end_time\> with the start and end time of office hours.";
}
var timePatt = /\^([01]?[0-9]\|2[0-3]):[0-5][0-9]:[0-5][0-9]\$/i;
if (!officeHours[0].match(timePatt) ZZ_BAR_ZZZZ_BAR_ZZ !officeHours[1].match(timePatt)){
throw "\<start_time\> or \<end_time\> is not properly set. Please use 24 hour
time notation 00:00:00 to 23:59:59.";
}
if (Date.parse("1970-01-01T"+officeHours[0]) \> Date.parse("1970-01-01T"+officeHours[1])){
throw "\<start_time\> or \<end_time\> is not properly set. Please make sure
\<start_time\> is no later than \<end_time\>.";
}
if (officeTimeZone == "\<time_zone\>"){
throw "\<time_zone\> is not set. Please replace \<time_zone\> with the office
time zone.";
}
var tzPatt = /\^UTC(\\+ZZ_BAR_ZZ\\-)([01]?[0-9]ZZ_BAR_ZZ2[0-3]):[0-5][0-9]\$/i;
if (!officeTimeZone.match(tzPatt)){
throw "\<time_zone\> is not properly set. Please use format UTC-nn:nn or
UTC+nn:nn where -nn:nn or +nn:nn is the time zone's offset from UTC.";
}
trace("ipaddress: " + context.ipAddress);
if (context.onPrem){
trace("onprem");
var d = new Date();
d.setMinutes(d.getMinutes() + d.getTimezoneOffset() + tzOffset(officeTimeZone));
var curTime = d.getTime();
var curDay = d.getDay();
trace("current time: " + d.toLocaleString());
trace("curDay: " + curDay);
if (curDay \< parseInt(workDays[0]) ZZ_BAR_ZZZZ_BAR_ZZ curDay \> parseInt(workDays[1])){
trace("block access - current day is not a working day.");
policy.Locked = true;
return;
}
var dateString = d.getFullYear() + '-' + toString(d.getMonth() + 1) + '-' + toString(d.getDate());
var startTime = Date.parse(dateString + 'T' + officeHours[0]);
trace("start time: " + dateString + 'T' + officeHours[0]);
var endTime = Date.parse(dateString + 'T' + officeHours[1]);
trace("end time: " + dateString + 'T' + officeHours[1]);
trace("curTime: " + curTime);
trace("startTime: " + startTime);
trace("endTime: " + endTime);
if (curTime \< startTime ZZ_BAR_ZZZZ_BAR_ZZ curTime \> endTime){
trace("block access - current time is not within office hours.");
policy.Locked = true;
}
}
else {
trace("off premises");
trace("block access - user is currently not on premise.");
policy.Locked = true;
}