summaryrefslogtreecommitdiff
path: root/src/node_hometree.erl
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2015-04-21 17:23:59 +0200
committerChristophe Romain <christophe.romain@process-one.net>2015-04-21 17:23:59 +0200
commit6e4d6caebf19584200b6478d170bda5090ef2a2b (patch)
treef00049da7ca85ac7f3132c4459fc1f977f125f9a /src/node_hometree.erl
parentFix typo, oups... (diff)
Add support for publish-only (#30)
Diffstat (limited to 'src/node_hometree.erl')
-rw-r--r--src/node_hometree.erl12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/node_hometree.erl b/src/node_hometree.erl
index f2e592aa..296fbdde 100644
--- a/src/node_hometree.erl
+++ b/src/node_hometree.erl
@@ -114,6 +114,7 @@ features() ->
<<"outcast-affiliation">>,
<<"persistent-items">>,
<<"publish">>,
+ <<"publish-only-affiliation">>,
<<"purge-nodes">>,
<<"retract-items">>,
<<"retrieve-affiliations">>,
@@ -221,7 +222,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
if not Authorized ->
{error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
- Affiliation == outcast ->
+ (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN};
PendingSubscription ->
{error,
@@ -377,7 +378,9 @@ publish_item(Nidx, Publisher, PublishModel, MaxItems, ItemId, Payload) ->
end,
if not ((PublishModel == open) or
(PublishModel == publishers) and
- ((Affiliation == owner) or (Affiliation == publisher))
+ ((Affiliation == owner)
+ or (Affiliation == publisher)
+ or (Affiliation == publish_only))
or (Subscribed == true)) ->
{error, ?ERR_FORBIDDEN};
true ->
@@ -743,7 +746,7 @@ get_items(Nidx, JID, AccessModel, PresenceSubscription, RosterGroup, _SubId, _RS
%%InvalidSubId ->
%% Entity is subscribed but specifies an invalid subscription ID
%{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
- Affiliation == outcast ->
+ (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN};
(AccessModel == presence) and not PresenceSubscription ->
{error,
@@ -784,7 +787,7 @@ get_item(Nidx, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, _Sub
%%InvalidSubId ->
%% Entity is subscribed but specifies an invalid subscription ID
%{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
- Affiliation == outcast ->
+ (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN};
(AccessModel == presence) and not PresenceSubscription ->
{error,
@@ -832,6 +835,7 @@ path_to_node(Path) -> iolist_to_binary(str:join([<<"">> | Path], <<"/">>)).
can_fetch_item(owner, _) -> true;
can_fetch_item(member, _) -> true;
can_fetch_item(publisher, _) -> true;
+can_fetch_item(publish_only, _) -> false;
can_fetch_item(outcast, _) -> false;
can_fetch_item(none, Subscriptions) -> is_subscribed(Subscriptions).
%can_fetch_item(_Affiliation, _Subscription) -> false.