From 30d7517b54b194e0fd1606d9a728a6b8e073f592 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Mon, 8 Oct 2012 12:11:55 +0200 Subject: [PATCH] updated cocal with hashing and url-shortener --- php/cocal.db | Bin 3072 -> 5120 bytes php/cocal.php | 133 +++++++++++++++++++++++++++++++++++++++++-------- php/scripts.js | 6 +-- 3 files changed, 113 insertions(+), 26 deletions(-) diff --git a/php/cocal.db b/php/cocal.db index e49e99b177d2f8c8dbfa46a3025b84ad82b97bb8..1453e195f20af5e75c674915a9fcdb01fdb1fc56 100644 GIT binary patch delta 497 zcmYL_y-UMD7{=e^BBn=%`c)(Sz(OenLGCVTso-D{1ks_OAc%|BKqVoqX{sp;J z(80k;DDB|j*45F`(MkLp#Ji@^;W+Mnf6u+o^G0S=dC=1{0HDJ@XyTTKzo#~p(eP5^ z=(btXba+#Sy8f(~q6ZivfD}sMokL12fYyqw4jMJp(BV;)fCgK@Omz{4b4+BBOO0HYtU@PS*+i3-_wm>j$UfduNr};C{KW#uJ*H z)XX6x$E>Oy5{p2i-3j~zuT~{0jNA#fAlZ3j6e!ssp~Wa1wA$MjzUz1i&nCDOjD$d! zf(10I_s`Dbh6bOao|pASWaKHKBxHpD;LJ2fS_IF^_7XC()Dm+<7})ju*G@7cwj`G$ z*omi%^h9mRQaBpFdY7x1 delta 100 zcmZqBXpmUIF)@IJg@Zwac{2ykI!3uOj0_B13=IqnoXnhDZXt#S#taO}k_ $line) { @@ -51,6 +53,10 @@ function curl_request($method, $url, $cookieFile = false, $params = array()) { $output = curl_exec($ch); curl_close($ch); + if ($cookieFile) { + curl_fixcookie($cookieFile); + } + return $output; } @@ -72,9 +78,39 @@ function crawl_address($room) { return ($r > 0) ? $matches[1] : false; } +function error() { + global $scriptUrl; + + header("HTTP/1.0 500 Internal Server Error"); + echo ' + + + + + + + + + +

Sorry an error occured!
Check your credentials and try again!

+ + '; + die(); +} /* Code */ -if (!empty($_GET['p']) && !empty($_GET['u'])) { +if (!empty($_GET['hash'])) { + $cipher = base64_decode($_GET['hash']); + if (strpos($cipher, ':')) { + list($matrnr, $passwd) = explode(':', $cipher); + } +} +else if (!empty($_GET['u']) && !empty($_GET['p'])) { + $matrnr = $_GET['u']; + $passwd = $_GET['p']; +} + +if (isset($matrnr) && isset($passwd)) { /* perform login to get session cookie */ $cookieFile = tempnam('/tmp', 'campus_'); @@ -86,16 +122,14 @@ if (!empty($_GET['p']) && !empty($_GET['u'])) { } curl_request('GET', $baseUrl . $homePath, $cookieFile); - curl_fixcookie($cookieFile); $loginParams = array( 'login' => urlencode('> Login'), - 'p' => urlencode($_GET['p']), - 'u' => urlencode($_GET['u']) + 'p' => urlencode($passwd), + 'u' => urlencode($matrnr) ); curl_request('POST', $baseUrl . $loginPath, $cookieFile, $loginParams); - curl_fixcookie($cookieFile); /* request calendar */ $calParams = array( @@ -104,11 +138,13 @@ if (!empty($_GET['p']) && !empty($_GET['u'])) { ); $response = curl_request('GET', $baseUrl . $calPath, $cookieFile, $calParams); - curl_fixcookie($cookieFile); /* filter some changes */ list($headers, $body) = explode("\r\n\r\n", $response, 2); + if (substr($body, 0, strlen("BEGIN:VCALENDAR")) != "BEGIN:VCALENDAR") { + error(); + } /* header pass through */ $headers = array_slice(explode("\r\n", $headers), 1); @@ -117,14 +153,14 @@ if (!empty($_GET['p']) && !empty($_GET['u'])) { switch($key) { case 'Content-Disposition': - $value = 'attachment; filename=campus_office_' . $_GET['u'] . '.ics'; + $value = 'attachment; filename=campus_office_' . $matrnr . '.ics'; break; case 'Content-Type': $value .= '; charset=utf-8'; break; } - if ($key != 'Content-Disposition') { + if ($key != 'Content-Length') { // ignore old length header($key . ': ' . $value); } } @@ -135,6 +171,11 @@ if (!empty($_GET['p']) && !empty($_GET['u'])) { if ($line) { list($key, $value) = explode(":", $line); switch ($key) { + case 'END': + if ($value == 'VEVENT') flush(); + unset($location); + break; + case 'LOCATION': $location = $value; $room = strtok($location, " "); @@ -153,6 +194,7 @@ if (!empty($_GET['p']) && !empty($_GET['u'])) { $value .= $location; break; } + echo $key . ':' . $value; } echo "\r\n"; @@ -172,6 +214,50 @@ else { /dev/nulll - CampusOffice to Google Sync + + @@ -185,20 +271,23 @@ else {

CampusOffice to Google Sync

-
- - - - - - - - - -
+ + + + + + + + + +
- -
+ + +