24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-02 21:17:12 +02:00

Add support for publish-only (#30)

This commit is contained in:
Christophe Romain 2015-04-21 17:23:59 +02:00
parent cf37f3977a
commit 6e4d6caebf
3 changed files with 18 additions and 8 deletions

View File

@ -3069,6 +3069,7 @@ get_roster_info(OwnerUser, OwnerServer, JID, AllowedGroups) ->
string_to_affiliation(<<"owner">>) -> owner; string_to_affiliation(<<"owner">>) -> owner;
string_to_affiliation(<<"publisher">>) -> publisher; string_to_affiliation(<<"publisher">>) -> publisher;
string_to_affiliation(<<"publish-only">>) -> publish_only;
string_to_affiliation(<<"member">>) -> member; string_to_affiliation(<<"member">>) -> member;
string_to_affiliation(<<"outcast">>) -> outcast; string_to_affiliation(<<"outcast">>) -> outcast;
string_to_affiliation(<<"none">>) -> none; string_to_affiliation(<<"none">>) -> none;
@ -3082,6 +3083,7 @@ string_to_subscription(_) -> false.
affiliation_to_string(owner) -> <<"owner">>; affiliation_to_string(owner) -> <<"owner">>;
affiliation_to_string(publisher) -> <<"publisher">>; affiliation_to_string(publisher) -> <<"publisher">>;
affiliation_to_string(publish_only) -> <<"publish-only">>;
affiliation_to_string(member) -> <<"member">>; affiliation_to_string(member) -> <<"member">>;
affiliation_to_string(outcast) -> <<"outcast">>; affiliation_to_string(outcast) -> <<"outcast">>;
affiliation_to_string(_) -> <<"none">>. affiliation_to_string(_) -> <<"none">>.
@ -4023,6 +4025,7 @@ features() ->
<<"presence-notifications">>, % OPTIONAL <<"presence-notifications">>, % OPTIONAL
<<"presence-subscribe">>, % RECOMMENDED <<"presence-subscribe">>, % RECOMMENDED
<<"publisher-affiliation">>, % RECOMMENDED <<"publisher-affiliation">>, % RECOMMENDED
<<"publish-only-affiliation">>, % OPTIONAL
<<"retrieve-default">>, <<"retrieve-default">>,
<<"shim">>]. % RECOMMENDED <<"shim">>]. % RECOMMENDED

View File

@ -114,6 +114,7 @@ features() ->
<<"outcast-affiliation">>, <<"outcast-affiliation">>,
<<"persistent-items">>, <<"persistent-items">>,
<<"publish">>, <<"publish">>,
<<"publish-only-affiliation">>,
<<"purge-nodes">>, <<"purge-nodes">>,
<<"retract-items">>, <<"retract-items">>,
<<"retrieve-affiliations">>, <<"retrieve-affiliations">>,
@ -221,7 +222,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
if not Authorized -> if not Authorized ->
{error, {error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)}; ?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
Affiliation == outcast -> (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
PendingSubscription -> PendingSubscription ->
{error, {error,
@ -377,7 +378,9 @@ publish_item(Nidx, Publisher, PublishModel, MaxItems, ItemId, Payload) ->
end, end,
if not ((PublishModel == open) or if not ((PublishModel == open) or
(PublishModel == publishers) and (PublishModel == publishers) and
((Affiliation == owner) or (Affiliation == publisher)) ((Affiliation == owner)
or (Affiliation == publisher)
or (Affiliation == publish_only))
or (Subscribed == true)) -> or (Subscribed == true)) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
true -> true ->
@ -743,7 +746,7 @@ get_items(Nidx, JID, AccessModel, PresenceSubscription, RosterGroup, _SubId, _RS
%%InvalidSubId -> %%InvalidSubId ->
%% Entity is subscribed but specifies an invalid subscription ID %% Entity is subscribed but specifies an invalid subscription ID
%{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")}; %{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
Affiliation == outcast -> (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
(AccessModel == presence) and not PresenceSubscription -> (AccessModel == presence) and not PresenceSubscription ->
{error, {error,
@ -784,7 +787,7 @@ get_item(Nidx, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, _Sub
%%InvalidSubId -> %%InvalidSubId ->
%% Entity is subscribed but specifies an invalid subscription ID %% Entity is subscribed but specifies an invalid subscription ID
%{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")}; %{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
Affiliation == outcast -> (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
(AccessModel == presence) and not PresenceSubscription -> (AccessModel == presence) and not PresenceSubscription ->
{error, {error,
@ -832,6 +835,7 @@ path_to_node(Path) -> iolist_to_binary(str:join([<<"">> | Path], <<"/">>)).
can_fetch_item(owner, _) -> true; can_fetch_item(owner, _) -> true;
can_fetch_item(member, _) -> true; can_fetch_item(member, _) -> true;
can_fetch_item(publisher, _) -> true; can_fetch_item(publisher, _) -> true;
can_fetch_item(publish_only, _) -> false;
can_fetch_item(outcast, _) -> false; can_fetch_item(outcast, _) -> false;
can_fetch_item(none, Subscriptions) -> is_subscribed(Subscriptions). can_fetch_item(none, Subscriptions) -> is_subscribed(Subscriptions).
%can_fetch_item(_Affiliation, _Subscription) -> false. %can_fetch_item(_Affiliation, _Subscription) -> false.

View File

@ -162,7 +162,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
if not Authorized -> if not Authorized ->
{error, {error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)}; ?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
Affiliation == outcast -> (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
PendingSubscription -> PendingSubscription ->
{error, {error,
@ -299,7 +299,9 @@ publish_item(Nidx, Publisher, PublishModel, MaxItems, ItemId, Payload) ->
end, end,
if not ((PublishModel == open) or if not ((PublishModel == open) or
(PublishModel == publishers) and (PublishModel == publishers) and
((Affiliation == owner) or (Affiliation == publisher)) ((Affiliation == owner)
or (Affiliation == publisher)
or (Affiliation == publish_only))
or (Subscribed == true)) -> or (Subscribed == true)) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
true -> true ->
@ -868,7 +870,7 @@ get_items(Nidx, JID, AccessModel, PresenceSubscription, RosterGroup, _SubId, RSM
%%InvalidSubId -> %%InvalidSubId ->
%% Entity is subscribed but specifies an invalid subscription ID %% Entity is subscribed but specifies an invalid subscription ID
%{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")}; %{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
Affiliation == outcast -> (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
(AccessModel == presence) and not PresenceSubscription -> (AccessModel == presence) and not PresenceSubscription ->
{error, {error,
@ -927,7 +929,7 @@ get_item(Nidx, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, _Sub
%%InvalidSubId -> %%InvalidSubId ->
%% Entity is subscribed but specifies an invalid subscription ID %% Entity is subscribed but specifies an invalid subscription ID
%{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")}; %{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
Affiliation == outcast -> (Affiliation == outcast) or (Affiliation == publish_only) ->
{error, ?ERR_FORBIDDEN}; {error, ?ERR_FORBIDDEN};
(AccessModel == presence) and not PresenceSubscription -> (AccessModel == presence) and not PresenceSubscription ->
{error, {error,
@ -1005,6 +1007,7 @@ path_to_node(Path) ->
can_fetch_item(owner, _) -> true; can_fetch_item(owner, _) -> true;
can_fetch_item(member, _) -> true; can_fetch_item(member, _) -> true;
can_fetch_item(publisher, _) -> true; can_fetch_item(publisher, _) -> true;
can_fetch_item(publish_only, _) -> false;
can_fetch_item(outcast, _) -> false; can_fetch_item(outcast, _) -> false;
can_fetch_item(none, Subscriptions) -> is_subscribed(Subscriptions). can_fetch_item(none, Subscriptions) -> is_subscribed(Subscriptions).
%can_fetch_item(_Affiliation, _Subscription) -> false. %can_fetch_item(_Affiliation, _Subscription) -> false.