string_to_affiliation(<<"owner">>) -> owner;
string_to_affiliation(<<"publisher">>) -> publisher;
+string_to_affiliation(<<"publish-only">>) -> publish_only;
string_to_affiliation(<<"member">>) -> member;
string_to_affiliation(<<"outcast">>) -> outcast;
string_to_affiliation(<<"none">>) -> none;
affiliation_to_string(owner) -> <<"owner">>;
affiliation_to_string(publisher) -> <<"publisher">>;
+affiliation_to_string(publish_only) -> <<"publish-only">>;
affiliation_to_string(member) -> <<"member">>;
affiliation_to_string(outcast) -> <<"outcast">>;
affiliation_to_string(_) -> <<"none">>.
<<"presence-notifications">>, % OPTIONAL
<<"presence-subscribe">>, % RECOMMENDED
<<"publisher-affiliation">>, % RECOMMENDED
+ <<"publish-only-affiliation">>, % OPTIONAL
<<"retrieve-default">>,
<<"shim">>]. % RECOMMENDED
<<"outcast-affiliation">>,
<<"persistent-items">>,
<<"publish">>,
+ <<"publish-only-affiliation">>,
<<"purge-nodes">>,
<<"retract-items">>,
<<"retrieve-affiliations">>,
if not Authorized ->
{error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
- Affiliation == outcast ->
+ (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN};
PendingSubscription ->
{error,
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 ->
%%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,
%%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,
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.
if not Authorized ->
{error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
- Affiliation == outcast ->
+ (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN};
PendingSubscription ->
{error,
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 ->
%%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,
%%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,
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.