Viewing file:
index.cgi (7.97 KB) -rwxr-xr-xSelect action/file-type:

(
+) |

(
+) |

(
+) |
Code (
+) |
Session (
+) |

(
+) |
SDB (
+) |

(
+) |

(
+) |

(
+) |

(
+) |

(
+) |
#!/usr/bin/perl
use CGI::Cookie;
use CGI qw(:standard);
use Time::Piece;
require "users.cgi";
require "cams.cgi";
use String::CRC32;
$lvl = "0";
$date = time();
$date=Time::Piece -> new($date);
$year = $date -> strftime ( "%Y" ),"\n";
$month = $date -> strftime ( "%m" ),"\n";
$day = $date -> strftime ( "%d" ),"\n";
$hour = $date -> strftime ( "%H" ),"\n";
$min = $date -> strftime ( "%M" ),"\n";
$sec = $date -> strftime ( "%S" ),"\n";
$date = sprintf("%s.%s.%s %s:%s:%s", $day, $month, $year, $hour, $min, $sec);
########## Part of auth ###########
$rip = $ENV{'REMOTE_ADDR'};
$non = substr(crc32($ENV{HTTP_USER_AGENT}),0,8);
authconfig();
$authl = param("authl");
$authp = param("authp");
$logout = param("logout");
$i = 0; $ok = "0";
getcooke($secr);
if ($secr <"1" and $authl ne "")
{
while ($i < $usr) { if ( @usrn[$i] eq $authl and @usrp[$i] eq $authp ) { $ok = "1"; $secr = @usrl[$i]; last } $i++; }
if ($ok ne "1") {system ("echo \"$date Auth error: $rip Login=$authl Password=$authp User Agent=$ENV{HTTP_USER_AGENT}\" >> $logfile"); sleep(5); }
setcooke();
}
logout();
if ($non ne $non1 and $non1 ne "") {system ("echo \"$date Wrong cookie: $rip Cookie=$cookie User Agent=$ENV{HTTP_USER_AGENT}\" >> $logfile"); $secr = "0"; $logout="1"; logout(); }
print $ct;
###################################
$lvl = $secr;
$num = $ARGV[0];
print "<html>
<head>
<meta charset=\"utf-8\">
<title>MiraNet Камеры</title>
<link href=\"video-js.css\" rel=\"stylesheet\">
<link href=\"videojs-hls-quality-selector.css\" rel=\"stylesheet\">
<link href=\"skin.css\" rel=\"stylesheet\">
<style>
.v{ width: 960px; height: 540px; margin-left: auto; margin-top: 10px; bg: #000000; }
body{ background-color: 191919; }
</style>
<style>
input {
font: bold 14px \"Arial\", Arial;
border-radius: 14px;
border: 1px solid #333333;
padding: 3px 4px;
background: #333333;
color: #dddddd;
}
</style>
<style>
p.pv1 {
font: bold 14px \"Helvetica Neue\", Helvetica, Arial, sans-serif;
line-height: 14px;
height:75px;
margin: 0px;
display: table-cell;
vertical-align: middle;
padding: 10px;
border: 1px solid #22ff22;
}
</style>
<style>
p.pv2 {
font: bold 14px \"Helvetica Neue\", Helvetica, Arial, sans-serif;
line-height: 14px;
height:75px;
margin: 0px;
display: table-cell;
vertical-align: middle;
padding: 10px;
}
</style>
</head>
<body link=\"#ffffff\" alink=\"#ffffff\" vlink=\"#ffffff\">
<table border=0 width=100% valign=\"top\"><tr><td width=60% valign=\"top\">";
if ($lvl < "1") {print "<form name=\"form\" action=\"\" method=\"POST\"><p align=\"right\"><font face=\"Arial\" color=\"#dddddd\"><b>Логин <input type=\"text\" name=\"authl\" size=\"10\">  Пароль <input type=\"password\" name=\"authp\" size=\"10\">  <input type=\"submit\" value=\" Войти \"></b></font></p></form>";}
else { print "<form name=\"form\" action=\"\" method=\"POST\"><p align=\"right\"><font face=\"Arial\" color=\"#dddddd\"><b>$user  <input type=\"hidden\" name=\"logout\" value=\"1\"><input type=\"submit\" value=\" Выйти \"></b></font></p></form>";}
if ($num eq "")
{
$i = 0;
while ($i < $cams)
{
if (@camr[$i] eq "0" or
$lvl eq "1" and @camr[$i] eq "1" or $lvl eq "1" and @camr[$i] eq "l" or
$lvl eq "2" and @camr[$i] eq "0" or $lvl eq "2" and @camr[$i] eq "1" or $lvl eq "2" and @camr[$i] eq "h" or
$lvl eq "3" and @camr[$i] eq "0" or $lvl eq "3" and @camr[$i] eq "1" or $lvl eq "3" and @camr[$i] eq "h" or $lvl eq "3" and @camr[$i] eq "3" ) { $num = $i; last; }
$i++;
}
}
$stream = @cams[$num];
print " <div class=\"v\">";
system ("echo \'$date Access: $rip Login=$user Camera=$num Level=$lvl Camera level=@camr[$num] Camera description= \"@camd[$num]\"\' >> $accesslog");
if (@camr[$num] eq "0" or
$lvl eq "1" and @camr[$num] eq "1" or $lvl eq "1" and @camr[$num] eq "l" or
$lvl eq "2" and @camr[$num] ne "3" or
$lvl eq "3")
{
print "<video id=\"my-video\" class=\"video-js vjs-16-9\" controls autoplay preload=\"auto\" width=\"960\" height=\"576\" aspectRatio=\"16:9\" data-setup='{}'>
<source src=\"$stream.m3u8\" type=\"application/vnd.apple.mpegurl\" />
</video>
<br><table border=\"1\" cellspacing=\"0\" bordercolor=\"#444444\" width=\"960\"><tr><td border=\"1\" bgcolor=\"#191919\"><font face=\"Arial\" color=\"#dddddd\"><br><b>   @camd[$num]</b><br> </font></center></td></tr></table>";
} else {
print "<center><h1><font color=\"#ff9999\"><br><br>Не достаточно прав<br>для просмотра этой камеры</font></h3></p></center>";
}
print " </div>
</td><td width=\"2%\"></td>
<td valign=\"top\"><font color=\"#ffffff\">";
$i = 0;
while ($i < $cams) {
$i1 = $i + 1;
if ($i eq $num) { $pv = "pv1"; } else { $pv = "pv2"; }
if (@camr[$i] eq "0" or
$lvl eq "1" and @camr[$i] eq "1" or $lvl eq "1" and @camr[$i] eq "l" or
$lvl eq "2" and @camr[$i] eq "0" or $lvl eq "2" and @camr[$i] eq "1" or $lvl eq "2" and @camr[$i] eq "h" or
$lvl eq "3" and @camr[$i] eq "0" or $lvl eq "3" and @camr[$i] eq "1" or $lvl eq "3" and @camr[$i] eq "h" or $lvl eq "3" and @camr[$i] eq "3")
{
print "<br><a href=\"?$i\"><p class=\"$pv\"><table border=\"0\"><tr><td><img src=/live/images/@camp[$i] align=\"middle\" hspace=\"10\"></td><td valign=\"center\"><font face=\"Arial\" color=\"#dddddd\">@camd[$i]</font></td></tr></table></p></a>";
}
$i++;
}
print " </font></td></tr></table>
</body>
<script src=\"video.min.js\"></script>
<script src=\"videojs-contrib-quality-levels.min.js\"></script>
<script src=\"videojs-hls-quality-selector.min.js\"></script>
<script src=\"jquery.js\"></script>
<script src=\"ru.js\"></script>
<script type=\"text/javascript\">
options = { }
var player = videojs('my-video',
{ fluid: true, controlBar: {'pictureInPictureToggle': false },
fillAlways: true,
language: 'ru',
width: '960',
height: '576',
aspectRatio: '16:9',
html5: {hls: { overrideNative: true, } } },
function onPlayerReady(){ player.autoplay('any'), setTimeout(function() { player.play(); }, 100); } );
player.hlsQualitySelector({ displayCurrentQuality: true });
</script>
</html>";
################# Auth #####################
sub setcooke {
if ($ok eq "1")
{
$secr1 = $secr;
$secr = sprintf("%s%s%s", $non, $secr, $authl);
$non1 = $non;
##### encode #####
$secr = `./mkpwd -e $secr`;
chop ($secr);
##################
system ("echo \"$date Auth success: $rip Login=$authl Level=$secr1 Cookie=$secr User Agent=$ENV{HTTP_USER_AGENT}\" >> $logfile");
my $cook = cookie(
-name => $cname,
-value => $secr,
-expires => '+3M',
-domain => $csite,
-path => '/',
);
$cook = sprintf header(-cookie=>$cook);
($cook) = split("charset=", $cook);
$cook = sprintf ("%s charset=UTF8\n\n", $cook);
print "$cook";
$ct = "";
$lvl = $secr1;
$secr = $secr1;
$user=$authl;
return;
}
}
sub getcooke {
my $secret = cookie($cname);
$secr = $secret;
$cookie = $secret;
##### decode #####
if ($secret ne "") { $secr1 = `./mkpwd -d $secret`; }
chop($secr1);
chop($secr1);
$non1 = substr($secr1, 0 ,8);
$secr = substr($secr1, 8, 1);
$user = substr($secr1, 9, 10);
##################
}
sub logout {
if ($logout eq "1")
{
$auth="0";
my $cook = cookie(
-name => $cname,
-value => '0',
-expires => '1',
-domain => $csite,
-path => '/',
);
$cook = sprintf header(-cookie=>$cook);
($cook) = split("charset=", $cook);
$cook = sprintf ("%s charset=UTF8", $cook);
print "$cook";
$secr = "0";
return;
}
}
sub authconfig {
$ct = "Content-type: text/html\n\n";
############### CONFIG ###############
$cname = "cooke.videomiranet";
$csite = "miranet.ru";
$logfile = "auth.log";
$accesslog = "access.log";
#$secr = "secret";
######################################
}