$dbredirect->{dsn} = "DBI:SQLite:dbname=".$sitecfg->{datapath}.'/'.$p->{db}.'.sqlite';
}
}
-$html->{conn} = $dbredirect;
+#if ()
+#$html->{conn} = $dbredirect;
# if ($sess == undef){
# $html->{error} = "No Authorisation";
# print JSON::PP::encode_json($html);
use File::Basename;
use Exporter 'import';
our @EXPORT_OK = qw($sitecfg);
-my $cfgpath='dks';
+my $cfgpath=$ENV{HOME}.'/.hourtrax';
if ($^O eq "MSWin32"){
- $cfgpath = $ENV{APPDATA}.'/dks';
+ $cfgpath = $ENV{APPDATA}.'/hourtrax';
} elsif ($^O eq "darwin"){
- $cfgpath = $ENV{HOME}.'/.dks';
-} else {
- $cfgpath = $ENV{HOME}.'/.dks';
-}
+ $cfgpath = $ENV{HOME}.'/Library/Application Support/hourtrax';
+}
$cfgpath =~ s/\\/\//g;
our $sitecfg ={
#cookiename => undef,
use JSON::PP;
use dksconfig qw/$sitecfg/;
use dksdb;
+use Digest::SHA::PurePerl qw(sha256_hex);
# use session;
#use sendemail;
my $apppath = &getappconfigpath();
my $loginname= "";
- print "read:". $apppath.'/'.&getAppName().'.passwd'."\n";
+ #print "read:". $apppath.'/'.&getAppName().'.passwd'."\n";
if (-e $apppath.'/'.&getAppName().'.passwd'){
open(AUTH,$apppath.'/'.&getAppName().'.passwd');
while (my $l = <AUTH>){
stopCheckIdle();
}
console.log("Current Panel:" + currentpanel);
- document.getElementById("pnl_" + currentpanel).style.display = 'block';
+ if (currentpanel){
+ document.getElementById("pnl_" + currentpanel).style.display = 'block';
+ }
+
return false;
}
var cdate = new Date().toISOString().substring(0,10);
document.getElementById("btntrackin").disabled = true;
document.getElementById("btntrackout").disabled = true;
- console.log(cdate + "<=>" + data[0].cmpdaydate);
- if (data && data[0]){
+ //console.log(cdate + "<=>" + data[0].cmpdaydate);
+ if (data && data[0] && data.length > 0){
lasttrack=data[0];
- if (data[0].cmpdaydate == cdate){
+ if (data[0].cmpdaydate && (data[0].cmpdaydate == cdate)){
console.log("IN:" + data[0].stamp_in);
console.log("out:" + data[0].stamp_out);
if ((data[0].stamp_in != null) && (data[0].stamp_out != null)){
document.getElementById("btntrackin").disabled = false;
}
//
- document.getElementById("lasttrack").innerHTML = "<u>Dernier Pointage</u>: <strong>" + ((data[0].daydate)?data[0].daydate:"") + "</strong> "+ ((data[0].stamp_in)?" Entrée:<strong>" + data[0].stamp_in:"") + "</strong> Sortie: <strong>" +((data[0].stamp_out)? + data[0].stamp_out:"N/A") + "</strong>";
+ document.getElementById("lasttrack").innerHTML = "<u>Dernier Pointage</u>:<br/><strong>" + ((data[0].daydate)?data[0].daydate:"") + "</strong> "+ ((data[0].stamp_in)?" Entrée:<strong>" + data[0].stamp_in:"N/A") + "</strong> Sortie: <strong>" +((data[0].stamp_out)?data[0].stamp_out:"N/A") + "</strong>";
} else {
lasttrack = null;
document.getElementById("btntrackin").disabled = false;
var sql = "";
//intervaltime = 60;
if (direction == 'in'){
- sql = "INSERT INTO hours (id_staff, stamp_in,daydate ) VALUES ("+currentuser.id+",CURRENT_TIMESTAMP,CURRENT_DATE);";
+ sql = "INSERT INTO hours (id_staff, stamp_in) VALUES ("+currentuser.id+",CURRENT_TIMESTAMP);";
} else if (direction == 'out'){
- sql = "UPDATE hours SET stamp_out=CURRENT_TIMESTAMP where id_staff='"+ currentuser.userid+"' and id='"+lasttrack.id+"';";
+ sql = "UPDATE hours SET stamp_out=CURRENT_TIMESTAMP where id_staff='"+ currentuser.id+"' and id='"+lasttrack.id+"';";
}
//console.log(sql);
req.reqdata("POST","db.cgi",{"sql":sql},showstatus);
+++ /dev/null
-var login = {\r
- userid: null,\r
- pinfield: null,\r
- gotoLogin: function (btn){\r
- document.getElementById("reload").style.visibility = 'visible';\r
- document.getElementById("mnuviews").style.visibility = 'hidden';\r
- login.pinfield = 'pincode';\r
- console.log(typeof(btn));\r
- console.log(btn);\r
- app.intervaltime = 60;\r
- \r
- if (typeof(btn) == "object"){\r
- if (btn){\r
- console.log(btn);\r
- document.getElementById("pinmessage").innerHTML = '';\r
- document.getElementById('pincode').value = '';\r
- document.getElementById("usergreeting1").innerHTML ="Bonjour <strong>" + btn.dataset.prename + "</strong>, entrez votre code pin:";\r
- login.userid= btn.dataset.id;\r
- } else {\r
- login.userid= btn.dataset.id;\r
- document.getElementById("usergreeting1").innerHTML="Bonjour <strong>" + btn.getAttribute('data-prename') + "</strong>, Entrez votre code pin:";\r
- document.getElementById("pinmessage").innerHTML = '';\r
- app.startCheckIdle();\r
- }\r
- \r
- } else if ((typeof(btn) == "string") && (btn == 'notpasswd')) {\r
- document.getElementById("usergreeting1").innerHTML ="Bonjour <strong>" + document.getElementById("btn_user_" + login.userid).dataset.prename + "</strong>, entrez votre code pin:";\r
- \r
- }\r
- app.showscreen('scruserpin'); \r
- },\r
- gotoNewLogin: function (btn){\r
- document.getElementById("reload").style.visibility = 'visible';\r
- document.getElementById("mnuviews").style.visibility = 'hidden';\r
- console.log("New Login!");\r
- console.log(btn);\r
- app.intervaltime = 60;\r
- if (btn != null){\r
- login.userid= btn.getAttribute('data-id');\r
- document.getElementById("usergreeting2").innerHTML="Bonjour, " + btn.getAttribute('data-prename') + "! Entrez votre nouveau code pin:";\r
- app.startCheckIdle();\r
- }\r
- \r
- login.pinfield = "newpincode1";\r
- document.getElementById("newpincode1").value = "";\r
- document.getElementById("newpincode2").value = "";\r
- document.getElementById("pinmessage2").innerHTML = '';\r
- app.showscreen('scrnewuserpin');\r
- \r
- },\r
- gotoUsers: function(){\r
- var sqlq = "select id,prename,surname,case when pin is null then 'nopin' else null end as haspin, case when blocked is not null then 'blocked' else null end as isblocked from staff st left join (select id_staff,max(startdate) as startdate from contract where startdate <= CURRENT_DATE group by id_staff) co on (st.id=co.id_staff);";\r
- req.reqdata("POST","db.cgi",{"sql":sqlq},login.loadUsers);\r
- \r
- },\r
- setPin:function (key){\r
- app.intervaltime = 60;\r
- if (key == 'COR'){\r
- document.getElementById('pincode').value = '';\r
- document.getElementById('newpincode1').value = '';\r
- document.getElementById('newpincode2').value = '';\r
- if (login.pinfield == "newpincode2"){\r
- login.pinfield = "newpincode1";\r
- }\r
- document.getElementById("pinmessage").innerHTML = '';\r
- document.getElementById("pinmessage2").innerHTML = '';\r
- } else if (key == 'OK'){\r
- if (login.pinfield == 'pincode'){\r
- app.showscreen('scrloader');\r
- //var xa = {"type":"querysorted","sql":"select id from staff where id='"+login.userid+"' and pin='"+document.getElementById("pincode").value+"';"};\r
- req.reqdata("POST","db.cgi",{"sql":"select id from staff where id='"+login.userid+"' and pin='"+document.getElementById("pincode").value+"';"},login.getAccess);\r
- \r
- } else if (login.pinfield == 'newpincode1'){\r
- login.pinfield = 'newpincode2';\r
- } else if (login.pinfield == 'newpincode2'){\r
- var pin1 = document.getElementById("newpincode1").value;\r
- var pin2 = document.getElementById("newpincode2").value;\r
- if ((pin1.length < 4) || (pin2.length < 4)){\r
- document.getElementById("pinmessage2").innerHTML = 'minimum 4 nombre requis!';\r
- } \r
- else if (pin1 != pin2){\r
- document.getElementById("pinmessage2").innerHTML = 'les codes pin sont pas identiques!';\r
- } else {\r
- app.showscreen('scrloader');\r
- //var xa = {"type":"exec",;\r
- req.reqdata("POST","db.cgi",{"db":"hourtrax","type":"exec","sql":"UPDATE staff SET pin='"+ pin1 +"' WHERE id='"+login.userid+"';"},login.gotoLogin);\r
- \r
- }\r
- }\r
- \r
- } else {\r
- //console.log("Add number " + key);\r
- var cobj = document.getElementById(login.pinfield);\r
- var cpin = cobj.value;\r
- \r
- cobj.value = cpin + key;\r
- }\r
- },\r
- getAccess: function(data){\r
- app.intervaltime = 60;\r
- console.log(data);\r
- console.log('getAccess');\r
- if ((data) && (data[0])){\r
- \r
- req.reqdata("POST","db.cgi",{"sql":"update staff set loginattemps=null where id='"+login.userid+"';"},null)\r
- \r
- // console.log("Access OK!")\r
- // if (ret){\r
- var xq = "select last_id, case when current_stamp_in is not null then strftime('%d.%m.%Y<br/>%H:%M',current_stamp_in) else null end as current_stamp_in, case when current_stamp_out is not null then strftime('%d.%m.%Y<br/>%H:%M',current_stamp_out) else null end as current_stamp_out,cast((daytrack / 3600.0) as integer) || ':' || case when cast(((daytrack % 3600.0) / 60.0) as integer) < 10 then '0' else '' end || cast(((daytrack % 3600.0) / 60.0) as integer) as monthtrack from (select max(id) as last_id, case when date(max(stamp_in)) = CURRENT_DATE then max(stamp_in) else null end as current_stamp_in,case when date(max(stamp_out)) = CURRENT_DATE then max(stamp_out) else null end as current_stamp_out,sum(case when stamp_out is not null then cast(strftime('%s',stamp_out) as integer) - cast(strftime('%s',stamp_in) as integer) else 0 end) as daytrack from hours where id_staff='"+ login.userid+"' and stamp_in between date('now','start of month') and date('now','start of month','+1 month','-1 day'));";\r
- req.reqdata("POST","db.cgi",{"sql":xq},track.loadtrackscreen);\r
- \r
- // }\r
- } else {\r
- //var xa = {"type":"exec","sql":"update staff set loginattemps=(select case when max(loginattemps) is null then 1 else loginattemps+1 end as newattemps from staff where id='"+login.userid+"') where id='"+login.userid+'";'};\r
- req.reqdata("POST","db.cgi",{"sql":"update staff set loginattemps=(select case when max(loginattemps) is null then 1 else loginattemps+1 end as newattemps from staff where id='"+login.userid+"') where id='"+login.userid+'";'},null);\r
- \r
- document.getElementById("pinmessage").innerHTML = 'code pin pas correcte!';\r
- login.gotoLogin('notpassed');\r
- }\r
- \r
- //console.log(data);\r
-// if(login.curpincode == '1234'){\r
-// \r
-// } else {\r
-// login.curpincode = '';\r
-// login.pinenc = '';\r
-// document.getElementById("pincode").innerHTML = login.pinenc;\r
-// document.getElementById("pinmessage").innerHTML = 'Code pas correcte';\r
-// }\r
- },\r
- loadUsers: function(data){\r
- document.getElementById("reload").style.visibility = 'hidden';\r
- document.getElementById("mnuviews").style.visibility = 'hidden';\r
- var ulist = document.getElementById("scruserlist");\r
- ulist.innerHTML = '';\r
- console.log('loadUsers');\r
- console.log( data);\r
- if (data != null){\r
- var btns = '';\r
- for (var i in data){\r
- console.log(i);\r
- var disabled = ";"\r
- if (data[i].isblocked != null){\r
- diabled='disabled="1"';\r
- }\r
- btns += '<button class="user" onclick="login.goto'+((data[i].haspin == null)?"":"New")+'Login(this);" id="btn_user_'+data[i].id+'" data-id="'+ data[i].id+'" data-prename="'+data[i].prename+'" data-surname="'+data[i].surname+'" data-haspin="'+data[i].haspin+'" '+ disabled +'>'+ data[i].prename+'<br/>'+ data[i].surname+'</button>';\r
- }\r
- ulist.innerHTML = btns;\r
- }\r
- app.stopCheckIdle();\r
- app.showscreen('scruserlist');\r
- }\r
-}\r
-\r
+++ /dev/null
-var app={\r
- interval: null,\r
- intervaltime: 60,\r
- currentscreen: 'scrloader',\r
- showscreen: function screen(screenid){\r
- //console.log("old screen:" + app.currentscreen);\r
- document.getElementById(app.currentscreen).style.display = 'none';\r
- document.getElementById(screenid).style.display = 'block';\r
- app.currentscreen = screenid;\r
- //console.log("new screen:" + app.currentscreen);\r
- },\r
- checkIdle: function(){\r
- if (app.intervaltime < 0){\r
- location.href = "clock.html";\r
- } else {\r
- app.intervaltime = app.intervaltime - 1; \r
- }\r
- },\r
- startCheckIdle: function(){\r
- window.setInterval(app.checkIdle(),1000);\r
- \r
- },\r
- stopCheckIdle: function(){\r
- window.clearInterval(app.interval);\r
- },\r
- database: 'hourtrax'\r
- \r
-}\r
-\r
-window.onload = function() {\r
- //console.log('window - onload');\r
- login.gotoUsers();\r
-};\r
-\r
+++ /dev/null
-[% USE date %]
-[% vstamp=date.format(date.now, '%d%m%Y%H%M%S') %]
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-<title>DKS Hourtrax</title>
-<meta http-equiv="cache-control" content="max-age=0" />
- <meta http-equiv="cache-control" content="no-cache" />
- <meta http-equiv="expires" content="0" />
- <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
- <meta http-equiv="pragma" content="no-cache" />
-<link rel="stylesheet" href="[% abspath %][% staticpath %]css/clock.css?v=[% vstamp %]" type="text/css">
-<link rel="stylesheet" href="[% abspath %][% staticpath %]css/w3pro.css?v=[% vstamp %]">
-</head>
-<body>
-<header>
- <h1 style="float: left;">HourTrax </h1>
- <button id="reload" style="top: -20px; height: 50px; width: 100px;" onclick="parent.admin.loadapp('timeclock');">Autre Utilisateur</button>
- <div id="mnuviews" style="float: left;">
- <button id="mnubtnnewpincode" style="top: -20px; height: 50px; width: 100px;" onclick="login.gotoNewLogin(null);">Changer PIN</button>
- <button id="mnubtnstamp" style="top: -20px; height: 50px; width: 100px;" onclick="track.loadtrackscreen();">Pointer</button>
- </div>
-
-</header>
-<div id="scruserlist" style="float: left; text-align: center;">
-
- </div>
- <div id="scruserpin">
- <div class="usergreeting" id="usergreeting1">Bonjour Prename,</div>
- <div class="pincode"><input type="password" value="" id="pincode" readonly="1"/></div>
- <div id="pinmessage"></div>
- <div id="keypad">
- <button class="btnkeypad" onclick="login.setPin('1');">1</button>
- <button class="btnkeypad" onclick="login.setPin('2');">2</button>
- <button class="btnkeypad" onclick="login.setPin('3');">3</button>
- <button class="btnkeypad" onclick="login.setPin('4');">4</button>
- <button class="btnkeypad" onclick="login.setPin('5');">5</button>
- <button class="btnkeypad" onclick="login.setPin('6');">6</button>
- <button class="btnkeypad" onclick="login.setPin('7');">7</button>
- <button class="btnkeypad" onclick="login.setPin('8');">8</button>
- <button class="btnkeypad" onclick="login.setPin('9');">9</button>
- <button class="btnkeypad" onclick="login.setPin('COR');" style="color: red;">COR</button>
- <button class="btnkeypad" onclick="login.setPin('0');">0</button>
- <button class="btnkeypad" onclick="login.setPin('OK');" style="color: green;">OK</button>
- </div>
- </div>
- <div id="scrnewuserpin">
- <div class="usergreeting" id="usergreeting2">Bonjour Prename,</div>
- <div class="pincode"><input type="password" value="" id="newpincode1" readonly="1" placeholder="nouveau pin..."/><input type="password" value="" id="newpincode2" readonly="1" placeholder="confirmez pin.."/></div>
- <div id="pinmessage2"></div>
- <div id="keypad">
- <button class="btnkeypad" onclick="login.setPin('1');">1</button>
- <button class="btnkeypad" onclick="login.setPin('2');">2</button>
- <button class="btnkeypad" onclick="login.setPin('3');">3</button>
- <button class="btnkeypad" onclick="login.setPin('4');">4</button>
- <button class="btnkeypad" onclick="login.setPin('5');">5</button>
- <button class="btnkeypad" onclick="login.setPin('6');">6</button>
- <button class="btnkeypad" onclick="login.setPin('7');">7</button>
- <button class="btnkeypad" onclick="login.setPin('8');">8</button>
- <button class="btnkeypad" onclick="login.setPin('9');">9</button>
- <button class="btnkeypad" onclick="login.setPin('COR');" style="color: red;">COR</button>
- <button class="btnkeypad" onclick="login.setPin('0');">0</button>
- <button class="btnkeypad" onclick="login.setPin('OK');" style="color: green;">OK</button>
- </div>
- </div>
- <div id="scrtimetracker">
- <div class="usergreeting" id="usergreeting3">Prénom Nom</div>
- <div class="usergreeting"><strong>Total heures mois courrant:</strong> <span id="monthhours">00:00 h</span></div>
- <div id="timetracker">
- <button class="btntrack" id="btntrackin" onclick="track.setTrack('in');">Entrée<br/><span id="lasttrackin"></span></button><button class="btntrack" id="btntrackout" onclick="track.setTrack('out');">Sortie<br/><span id="lasttrackout"></span></button>
- </div>
- </div>
- <div id="scrloader" style="text-align: center;">
-
- <progress style=" margin: auto; margin-top: 200px; width: 300px;" min="0" max="100"></progress>
-
- </div>
- <div id="scrstatus" style="text-align: center;">
-
- <div id="statusmsg" style=" margin: auto; margin-top: 100px; width: 600px; font-size: 20px;" ></div>
-
- </div>
-
-
-<script>
-var app = "[% app %]";
-</script>
-<script src="[% abspath %][% staticpath %]js/request.js"></script>
-<script src="[% abspath %][% staticpath %]js/admin.js"></script>
-<!-- <script src="js/database.js"></script> -->
-<script src="login.js?v=[% vstamp %]"></script>
-<script src="track.js?v=[% vstamp %]"></script>
-<script src="oldindex.js?v=[% vstamp %]"></script>
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-var track = {\r
- trackid: null,\r
- setTrack: function(type){\r
- app.showscreen('scrloader');\r
- console.log(type);\r
- var tracksql = "";\r
- if (type == 'in'){\r
- tracksql = "insert into hours (id_staff,stamp_in) VALUES ('"+ login.userid+"',CURRENT_TIMESTAMP);";\r
- } else if (type == 'out'){\r
- tracksql = "update hours set stamp_out=CURRENT_TIMESTAMP where id_staff='"+ login.userid+"' and id='"+track.trackid+"';";\r
- }\r
- //var xt = {"type":"exec","sql":tracksql};\r
- console.log("TRACK SQL: " + tracksql);\r
- req.reqdata("POST","db.cgi",{"sql":tracksql},track.loadsuccessscreen);\r
- },\r
- loadtrackscreen: function(data){\r
- \r
- console.log('loadtrackscreen');\r
- document.getElementById("mnuviews").style.visibility = 'visible';\r
- console.log(data);\r
- if (data) {\r
- var btn=document.getElementById("btn_user_" + login.userid); \r
- document.getElementById("usergreeting3").innerHTML = btn.getAttribute("data-prename") + " " + btn.getAttribute("data-surname"); \r
- document.getElementById("monthhours").innerHTML = data[0].monthtrack + "h";\r
- document.getElementById("btntrackin").setAttribute("disabled",false);\r
- document.getElementById("btntrackout").setAttribute("disabled",false);\r
- document.getElementById("lasttrackin").innerHTML = ' <br/> ';\r
- document.getElementById("lasttrackout").innerHTML = ' <br/> ';\r
- track.trackid = data[0].last_id;\r
- if (data[0].current_stamp_in != null){\r
- document.getElementById("lasttrackin").innerHTML = data[0].current_stamp_in;\r
- }\r
- if (data[0].current_stamp_out != null){\r
- document.getElementById("lasttrackout").innerHTML = data[0].current_stamp_out;\r
- }\r
- if ((data[0].current_stamp_in == null) && (data[0].current_stamp_out == null)){\r
- document.getElementById("btntrackin").removeAttribute("disabled");\r
- } else if ((data[0].current_stamp_in != null) && (data[0].current_stamp_out == null)){\r
- document.getElementById("btntrackout").removeAttribute("disabled");\r
- } else if ((data[0].current_stamp_in != null) && (data[0].current_stamp_out != null)) {\r
- if (data[0].current_stamp_in > data[0].current_stamp_out){\r
- document.getElementById("btntrackout").removeAttribute("disabled");\r
- } else {\r
- document.getElementById("btntrackin").removeAttribute("disabled");\r
- }\r
- }\r
- }\r
- //document.getElementById("usergreeting3").value = ""\r
- app.showscreen('scrtimetracker');\r
- },\r
- loadsuccessscreen: function(data){\r
- console.log(data);\r
- document.getElementById("statusmsg").innerHTML = "L'heure est enregistré";\r
- app.showscreen('scrstatus');\r
- track.trackid = null;\r
- setTimeout("parent.admin.loadapp('timeclock');",3000);\r
- }\r
-}
\ No newline at end of file
console.log("new windows");\r
win = new BrowserWindow({show: true, width: 800, height: 470,frame: false, WebPreferences: {sandbox: true}})\r
win.setMenu(null)\r
- //win.maximize()\r
- //win.setFullScreen(true)\r
+ win.maximize()\r
+ win.setFullScreen(true)\r
// child(executablePath, parameters, function(err, data) {\r
// if(err){\r
// console.error('stderr',err);\r
\r
// and load the index.html of the app.\r
win.loadURL(myurl)\r
- console.log("Test load URL")\r
+ //console.log("Test load URL")\r
// Open the DevTools.\r
- win.webContents.openDevTools({ mode: 'detach' });\r
+ //win.webContents.openDevTools({ mode: 'detach' });\r
\r
// Emitted when the window is closed.\r
win.on('closed', () => {\r
use Plack::Middleware::DirIndex;
use Plack::Request;
use Plack::Runner;
+use Digest::SHA::PurePerl qw(sha256_hex);
#use Module::Service;
#use Module::Test;
# use Module::SQLite;
print $^O."\n";
print $RealBin."\n";
-my $datadir = $RealBin.'/data';
+my $datadir=$ENV{HOME}.'/.hourtrax';
+if ($^O eq "MSWin32"){
+ $datadir = $ENV{APPDATA}.'/hourtrax';
+} elsif ($^O eq "darwin"){
+ $datadir = $ENV{HOME}.'/Library/Application Support/hourtrax';
+}
#my $webdir = dirname($RealBin).'/web';
print "Datadir:".$datadir."\n";
my @match = grep { /par-.*inc$/} @INC;
-# if ($^O ne "MSWin32"){
-# use POSIX qw(setsid);
-# open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
-# open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
-# open STDERR, '>/dev/null' or die "Can't write to /dev/null: $!";
+if ($^O ne "MSWin32"){
+ use POSIX qw(setsid);
+ #open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
+ # open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
+ # open STDERR, '>/dev/null' or die "Can't write to /dev/null: $!";
-# die "cannot start process $!" unless defined (my $child = fork);
-# exit 0 if $child;
-# setsid() or die "cannot start new session $!";
-# chdir('/');
-# umask(0);
-# system("echo ".$$." > /home/dks/data/hourtrax.pid");
-# }
+ die "cannot start process $!" unless defined (my $child = fork);
+ exit 0 if $child;
+ setsid() or die "cannot start new session $!";
+ chdir('/');
+ umask(0);
+ system("echo ".$$." > ".$datadir."/hourtrax.pid");
+}
my $basedir = dirname($0);
if (scalar(@match) > 0){
}
my $cfgpath = "";
-#print "BASEDIR:".$basedir."\n";
-
-
-# sub version {
-# require Twiggy;
-# print "Twiggy $Twiggy::VERSION\n";
-# }
-my $name = basename($0);
-$name =~ s/srv\.pl$//;
-$name =~ s/srv\.exe$//;
-$name = lc($name);
+# my $name = basename($0);
+# $name =~ s/srv\.pl$//;
+# $name =~ s/srv\.exe$//;
+# $name = lc($name);
sub authen_cb {
my($username, $password, $env) = @_;
my $auth = 0;
#print "Check AUTH\n";
- if (-e $datadir.'/'.$name.'.passwd'){
- open(AUTH,$datadir.'/'.$name.'.passwd');
+ if (-e $datadir.'/auth.passwd'){
+ open(AUTH,$datadir.'/auth.passwd');
while (my $l = <AUTH>){
chomp($l);
if ($l eq $username.'='.$password){
my $allapp = builder {
- enable_if { $_[0]->{REMOTE_ADDR} ne 'localhost' && $_[0]->{REMOTE_ADDR} ne '127.0.0.1' } "Auth::Basic", authenticator => \&authen_cb;
+ #enable_if { $_[0]->{REMOTE_ADDR} ne 'localhost' && $_[0]->{REMOTE_ADDR} ne '127.0.0.1' } "Auth::Basic", authenticator => \&authen_cb;
enable "Plack::Middleware::DirIndex", dir_index => 'index.html';
- mount "/" => Plack::App::WrapCGI->new(script => dirname($0)."/CGI/index.cgi")->to_app;
+ mount "/" => Plack::App::WrapCGI->new(script => $RealBin."/CGI/index.cgi")->to_app;
- opendir(API,dirname($0)."/CGI/api");
+ opendir(API,$RealBin."/CGI/api");
while (my $s = readdir(API)){
+ chomp($s);
+ print $s."\n";
if ($s =~ /\.cgi$/){
- mount "/api/".$s => Plack::App::WrapCGI->new(script => dirname($0)."/CGI/api/".$s)->to_app;
+ print "Start /api/$s\n";
+ mount "/api/".$s => Plack::App::WrapCGI->new(script => $RealBin."/CGI/api/".$s)->to_app;
}
}
closedir(API);
- mount "/htdocs" => Plack::App::File->new(root => dirname($0)."/htdocs")->to_app;
+ mount "/htdocs" => Plack::App::File->new(root => $RealBin."/htdocs")->to_app;
};
-my @args = ("-p","6060","--error-log","error.log","--access-log","access.log");
+my @args = ("-p","6060");
+#,"--error-log",$datadir."/error.log","--access-log",$datadir."/access.log");
my $runner = Plack::Runner->new(server => 'Starlight', env => 'deployment', ipv6 => '1' );#env => development, test
$runner->parse_options(@args);
$runner->run($allapp);