From 730c80ff9c83ff1b027ab804ecad599fbcaf7bd3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 7 Oct 2013 15:11:47 +0200
Subject: [PATCH] adding additional exceptions for special cases where creating
 a file might not be allowed

---
 .../sabre/exception/entitytoolarge.php        | 23 +++++++++++++++++++
 .../sabre/exception/unsupportedmediatype.php  | 22 ++++++++++++++++++
 lib/private/connector/sabre/file.php          |  7 ++++++
 lib/public/files/entitytoolargeexception.php  | 11 +++++++++
 lib/public/files/invalidcontentexception.php  | 11 +++++++++
 lib/public/files/invalidpathexception.php     | 11 +++++++++
 6 files changed, 85 insertions(+)
 create mode 100644 lib/private/connector/sabre/exception/entitytoolarge.php
 create mode 100644 lib/private/connector/sabre/exception/unsupportedmediatype.php
 create mode 100644 lib/public/files/entitytoolargeexception.php
 create mode 100644 lib/public/files/invalidcontentexception.php
 create mode 100644 lib/public/files/invalidpathexception.php

diff --git a/lib/private/connector/sabre/exception/entitytoolarge.php b/lib/private/connector/sabre/exception/entitytoolarge.php
new file mode 100644
index 0000000000..aa9b37a049
--- /dev/null
+++ b/lib/private/connector/sabre/exception/entitytoolarge.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * EntityTooLarge
+ *
+ * This exception is thrown whenever a user tries to upload a file which exceeds hard limitations
+ *
+ */
+class OC_Connector_Sabre_Exception_EntityTooLarge extends Sabre_DAV_Exception {
+
+    /**
+     * Returns the HTTP statuscode for this exception
+     *
+     * @return int
+     */
+    public function getHTTPCode() {
+
+//        return 413;
+
+	    return 450;
+    }
+
+}
diff --git a/lib/private/connector/sabre/exception/unsupportedmediatype.php b/lib/private/connector/sabre/exception/unsupportedmediatype.php
new file mode 100644
index 0000000000..a8b561280c
--- /dev/null
+++ b/lib/private/connector/sabre/exception/unsupportedmediatype.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Unsupported Media Type
+ *
+ * This exception is thrown whenever a user tries to upload a file which holds content which is not allowed
+ *
+ */
+class OC_Connector_Sabre_Exception_UnsupportedMediaType extends Sabre_DAV_Exception {
+
+    /**
+     * Returns the HTTP status code for this exception
+     *
+     * @return int
+     */
+    public function getHTTPCode() {
+
+        return 415;
+
+    }
+
+}
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 8ffec371e3..3c19da7c61 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -88,6 +88,13 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
 			}
 		} catch (\OCP\Files\NotPermittedException $e) {
 			throw new Sabre_DAV_Exception_Forbidden();
+		} catch (\OCP\Files\EntityTooLargeException $e) {
+			throw new OC_Connector_Sabre_Exception_EntityTooLarge();
+		} catch (\OCP\Files\InvalidContentException $e) {
+			throw new OC_Connector_Sabre_Exception_UnsupportedMediaType();
+		} catch (\OCP\Files\InvalidPathException $e) {
+			// TODO: add specific exception here
+			throw new Sabre_DAV_Exception_Forbidden();
 		}
 
 		// rename to correct path
diff --git a/lib/public/files/entitytoolargeexception.php b/lib/public/files/entitytoolargeexception.php
new file mode 100644
index 0000000000..3dff41bca0
--- /dev/null
+++ b/lib/public/files/entitytoolargeexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class EntityTooLargeException extends \Exception {}
diff --git a/lib/public/files/invalidcontentexception.php b/lib/public/files/invalidcontentexception.php
new file mode 100644
index 0000000000..184ec4d06d
--- /dev/null
+++ b/lib/public/files/invalidcontentexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class InvalidContentException extends \Exception {}
diff --git a/lib/public/files/invalidpathexception.php b/lib/public/files/invalidpathexception.php
new file mode 100644
index 0000000000..36090ae5b4
--- /dev/null
+++ b/lib/public/files/invalidpathexception.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Files;
+
+class InvalidPathException extends \Exception {}
-- 
GitLab