%% @doc <p>Convert an affiliation type from string to atom.</p>
string_to_affiliation("owner") -> owner;
string_to_affiliation("publisher") -> publisher;
+string_to_affiliation("member") -> member;
string_to_affiliation("outcast") -> outcast;
string_to_affiliation("none") -> none;
string_to_affiliation(_) -> false.
%% @doc <p>Convert an affiliation type from atom to string.</p>
affiliation_to_string(owner) -> "owner";
affiliation_to_string(publisher) -> "publisher";
+affiliation_to_string(member) -> "member";
affiliation_to_string(outcast) -> "outcast";
affiliation_to_string(_) -> "none".
"access-open", % OPTIONAL this relates to access_model option in node_default
"access-presence", % OPTIONAL this relates to access_model option in node_pep
%TODO "access-roster", % OPTIONAL
- %TODO "access-whitelist", % OPTIONAL
+ "access-whitelist", % OPTIONAL
% see plugin "auto-create", % OPTIONAL
% see plugin "auto-subscribe", % RECOMMENDED
"collections", % RECOMMENDED
%TODO "cache-last-item",
%TODO "leased-subscription", % OPTIONAL
% see plugin "manage-subscriptions", % OPTIONAL
- %TODO "member-affiliation", % RECOMMENDED
+ "member-affiliation", % RECOMMENDED
%TODO "meta-data", % RECOMMENDED
% see plugin "modify-affiliations", % OPTIONAL
%TODO "multi-collection", % OPTIONAL
State = get_state(Host, Node, SubscriberKey),
#pubsub_state{affiliation = Affiliation,
subscription = Subscription} = State,
+ Whitelisted = lists:member(Affiliation, [member, publisher, owner]),
if
not Authorized ->
%% JIDs do not match
(AccessModel == roster) and (not RosterGroup) ->
%% Entity is not authorized to create a subscription (not in roster group)
{error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, "not-in-roster-group")};
- (AccessModel == whitelist) -> % TODO: to be done
- %% Node has whitelist access model
+ (AccessModel == whitelist) and (not Whitelisted) ->
+ %% Node has whitelist access model and entity lacks required affiliation
{error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "closed-node")};
(AccessModel == authorize) -> % TODO: to be done
%% Node has authorize access model
#pubsub_state{affiliation = Affiliation,
subscription = Subscription} = State,
Subscribed = not ((Subscription == none) or (Subscription == pending)),
+ Whitelisted = lists:member(Affiliation, [member, publisher, owner]),
if
%%SubID == "", ?? ->
%% Entity has multiple subscriptions to the node but does not specify a subscription ID
(AccessModel == roster) and (not RosterGroup) ->
%% Entity is not authorized to create a subscription (not in roster group)
{error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, "not-in-roster-group")};
- (AccessModel == whitelist) -> % TODO: to be done
- %% Node has whitelist access model
+ (AccessModel == whitelist) and (not Whitelisted) ->
+ %% Node has whitelist access model and entity lacks required affiliation
{error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "closed-node")};
(AccessModel == authorize) -> % TODO: to be done
%% Node has authorize access model
#pubsub_state{affiliation = Affiliation,
subscription = Subscription} = State,
Subscribed = not ((Subscription == none) or (Subscription == pending)),
+ Whitelisted = lists:member(Affiliation, [member, publisher, owner]),
if
%%SubID == "", ?? ->
%% Entity has multiple subscriptions to the node but does not specify a subscription ID
(AccessModel == roster) and (not RosterGroup) ->
%% Entity is not authorized to create a subscription (not in roster group)
{error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, "not-in-roster-group")};
- (AccessModel == whitelist) -> % TODO: to be done
- %% Node has whitelist access model
+ (AccessModel == whitelist) and (not Whitelisted) ->
+ %% Node has whitelist access model and entity lacks required affiliation
{error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "closed-node")};
(AccessModel == authorize) -> % TODO: to be done
%% Node has authorize access model