[phodav] server: add read-only property
- From: Marc-Andre Lureau <malureau src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [phodav] server: add read-only property
- Date: Sat, 14 Feb 2015 00:53:50 +0000 (UTC)
commit c6940696e96e02cf54d0a0f7166b142390587579
Author: Marc-André Lureau <marcandre lureau gmail com>
Date: Sat Feb 14 01:53:05 2015 +0100
server: add read-only property
libphodav/phodav-server.c | 29 ++++++++++++++++++++++++++++-
1 files changed, 28 insertions(+), 1 deletions(-)
---
diff --git a/libphodav/phodav-server.c b/libphodav/phodav-server.c
index 81ee4e9..820984d 100644
--- a/libphodav/phodav-server.c
+++ b/libphodav/phodav-server.c
@@ -47,6 +47,7 @@ struct _PhodavServer
gchar *root;
PathHandler *root_handler; /* weak ref */
GHashTable *paths;
+ gboolean readonly;
};
struct _PhodavServerClass
@@ -61,6 +62,7 @@ enum {
PROP_0,
PROP_ROOT,
PROP_SERVER,
+ PROP_READONLY,
};
static void server_callback (SoupServer *server,
@@ -217,6 +219,10 @@ phodav_server_get_property (GObject *gobject,
g_value_set_object (value, self->server);
break;
+ case PROP_READONLY:
+ g_value_set_boolean (value, self->readonly);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -239,6 +245,10 @@ phodav_server_set_property (GObject *gobject,
update_root_handler (self);
break;
+ case PROP_READONLY:
+ self->readonly = g_value_get_boolean (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -273,6 +283,15 @@ phodav_server_class_init (PhodavServerClass *klass)
SOUP_TYPE_SERVER,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (gobject_class, PROP_READONLY,
+ g_param_spec_boolean ("read-only",
+ "Read-only access",
+ "Read-only access",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
gboolean
@@ -435,7 +454,15 @@ server_callback (SoupServer *server, SoupMessage *msg,
"text/xml", params);
g_hash_table_destroy (params);
- if (msg->method == SOUP_METHOD_OPTIONS)
+ if (handler->self->readonly &&
+ (msg->method == SOUP_METHOD_PROPPATCH ||
+ msg->method == SOUP_METHOD_MKCOL ||
+ msg->method == SOUP_METHOD_DELETE ||
+ msg->method == SOUP_METHOD_MOVE ||
+ msg->method == SOUP_METHOD_COPY ||
+ msg->method == SOUP_METHOD_LOCK))
+ status = SOUP_STATUS_FORBIDDEN;
+ else if (msg->method == SOUP_METHOD_OPTIONS)
{
soup_message_headers_append (msg->response_headers, "DAV", "1,2");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]