Updated DELETE to work with new request object.

This commit is contained in:
Andrew McMillan 2006-11-27 01:38:00 +13:00
parent 9c7c3e55a5
commit 00bae378cf
4 changed files with 21 additions and 34 deletions

View File

@ -16,52 +16,39 @@ dbg_error_log("delete", "DELETE method handler");
* truth about Evolution's broken handling of this: http://bugzilla.gnome.org/show_bug.cgi?id=349573 * truth about Evolution's broken handling of this: http://bugzilla.gnome.org/show_bug.cgi?id=349573
*/ */
if ( !isset($etag_if_match) && isset($etag_none_match) && isset($_SERVER['HTTP_USER_AGENT']) if ( !isset($request->etag_if_match) && isset($request->etag_none_match) && isset($_SERVER['HTTP_USER_AGENT'])
&& preg_match('#Evolution/([0-9]+[.][0-9]+)#', $_SERVER['HTTP_USER_AGENT'], $matches ) ) { && preg_match('#Evolution/([0-9]+[.][0-9]+)#', $_SERVER['HTTP_USER_AGENT'], $matches ) ) {
if ( doubleval($matches[1]) <= 1.9 ) { if ( doubleval($matches[1]) <= 1.9 ) {
$etag_if_match = $etag_none_match; $request->etag_if_match = $request->etag_none_match;
unset($etag_none_match); unset($request->etag_none_match);
} }
} }
if ( !isset($permissions['write']) ) { if ( ! $request->AllowedTo('delete') ) {
header("HTTP/1.1 403 Forbidden"); $request->DoResponse( 403, translate("You may not delete entries from this calendar.") );
header("Content-type: text/plain");
if ( isset($etag_none_match) && $etag_none_match == $delete_row->dav_etag ) {
echo "Permission denied";
}
exit(0);
} }
/** /**
* We read the resource first, so we can check if it matches (or does not match) * We read the resource first, so we can check if it matches (or does not match)
*/ */
$qry = new PgQuery( "SELECT * FROM caldav_data WHERE user_no = ? AND dav_name = ?;", (isset($path_user_no)?$path_user_no:$session->user_no), $request_path ); $qry = new PgQuery( "SELECT * FROM caldav_data WHERE user_no = ? AND dav_name = ?;", (isset($request->user_no)?$request->user_no:$session->user_no), $request->path );
if ( $qry->Exec("DELETE") && $qry->rows == 1 ) { if ( $qry->Exec("DELETE") && $qry->rows == 1 ) {
$delete_row = $qry->Fetch(); $delete_row = $qry->Fetch();
if ( (isset($etag_if_match) && $etag_if_match != $delete_row->dav_etag) ) { if ( (isset($request->etag_if_match) && $request->etag_if_match != $delete_row->dav_etag) ) {
header("HTTP/1.1 412 Precondition Failed"); $request->DoResponse( 412, translate("Resource does not match 'If-Match' header - not deleted") );
header("Content-type: text/plain");
if ( isset($etag_if_match) && $etag_if_match != $delete_row->dav_etag ) {
echo "Resource does not match 'If-Match' header - not deleted\n";
}
exit(0);
} }
$qry = new PgQuery( "DELETE FROM caldav_data WHERE user_no = ? AND dav_name = ?;", (isset($path_user_no)?$path_user_no:$session->user_no), $request_path ); $qry = new PgQuery( "DELETE FROM caldav_data WHERE user_no = ? AND dav_name = ?;", (isset($request->user_no)?$request->user_no:$session->user_no), $request->path );
if ( $qry->Exec("DELETE") ) { if ( $qry->Exec("DELETE") ) {
header("HTTP/1.1 200 Deleted", true, 200); @dbg_error_log( "DELETE", "DELETE: User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
header("Content-length: 0"); $request->DoResponse( 200, "" );
@dbg_error_log( "DELETE", "DELETE: User: %d, ETag: %s, Path: %s", $session->user_no, $etag_if_match, $request_path);
} }
else { else {
header("HTTP/1.1 500 Infernal Server Error"); $request->DoResponse( 500, translate("Error querying database.") );
@dbg_error_log( "DELETE", "DELETE failed: User: %d, ETag: %s, Path: %s, SQL: %s", $session->user_no, $etag_if_match, $request_path, $qry->querystring);
} }
} }
else { else {
header("HTTP/1.1 404 Not Found"); $request->DoResponse( 404, "");
@dbg_error_log( "DELETE", "DELETE row not found: User: %d, ETag: %s, Path: %s", $qry->rows, $session->user_no, $etag_if_match, $request_path);
} }
?> ?>

View File

@ -1,7 +1,7 @@
HTTP/1.1 412 Precondition Failed HTTP/1.1 412 Precondition Failed
Date: Dow, 01 Jan 2000 00:00:00 GMT Date: Dow, 01 Jan 2000 00:00:00 GMT
Server: Apache/2.2.3 (Debian) DAV/2 Server: Apache/2.2.3 (Debian) DAV/2
Content-Length: 56 Content-Length: 55
Content-Type: text/plain; charset=UTF-8 Content-Type: text/plain; charset=UTF-8
Resource does not match 'If-Match' header - not deleted Resource does not match 'If-Match' header - not deleted

View File

@ -1,6 +1,6 @@
HTTP/1.1 200 Deleted HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT Date: Dow, 01 Jan 2000 00:00:00 GMT
Server: Apache/2.2.3 (Debian) DAV/2 Server: Apache/2.2.3 (Debian) DAV/2
Content-length: 0 Content-Length: 0
Content-Type: text/html; charset=UTF-8 Content-Type: text/plain; charset=UTF-8

View File

@ -1,6 +1,6 @@
HTTP/1.1 200 Deleted HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT Date: Dow, 01 Jan 2000 00:00:00 GMT
Server: Apache/2.2.3 (Debian) DAV/2 Server: Apache/2.2.3 (Debian) DAV/2
Content-length: 0 Content-Length: 0
Content-Type: text/html; charset=UTF-8 Content-Type: text/plain; charset=UTF-8