xmpp.chapril.org-ejabberd/src/muc_register.erl

365 lines
11 KiB
Erlang

%% Created automatically by xdata generator (xdata_codec.erl)
%% Source: muc_register.xdata
%% Form type: http://jabber.org/protocol/muc#register
%% Document: XEP-0045
-module(muc_register).
-export([decode/1, decode/2, encode/1, encode/2,
format_error/1]).
-include("xmpp_codec.hrl").
-include("muc_register.hrl").
-export_type([property/0, result/0, form/0]).
dec_bool(<<"1">>) -> true;
dec_bool(<<"0">>) -> false;
dec_bool(<<"true">>) -> true;
dec_bool(<<"false">>) -> false.
enc_bool(true) -> <<"1">>;
enc_bool(false) -> <<"0">>.
format_error({form_type_mismatch, Type}) ->
<<"FORM_TYPE doesn't match '", Type/binary, "'">>;
format_error({bad_var_value, Var, Type}) ->
<<"Bad value of field '", Var/binary, "' of type '",
Type/binary, "'">>;
format_error({missing_value, Var, Type}) ->
<<"Missing value of field '", Var/binary, "' of type '",
Type/binary, "'">>;
format_error({too_many_values, Var, Type}) ->
<<"Too many values for field '", Var/binary,
"' of type '", Type/binary, "'">>;
format_error({unknown_var, Var, Type}) ->
<<"Unknown field '", Var/binary, "' of type '",
Type/binary, "'">>;
format_error({missing_required_var, Var, Type}) ->
<<"Missing required field '", Var/binary, "' of type '",
Type/binary, "'">>.
decode(Fs) -> decode(Fs, []).
decode(Fs, Acc) ->
case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
Fs)
of
false -> decode(Fs, Acc, [<<"muc#register_roomnick">>]);
#xdata_field{values =
[<<"http://jabber.org/protocol/muc#register">>]} ->
decode(Fs, Acc, [<<"muc#register_roomnick">>]);
_ ->
erlang:error({?MODULE,
{form_type_mismatch,
<<"http://jabber.org/protocol/muc#register">>}})
end.
encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
encode(List, Translate) when is_list(List) ->
Fs = [case Opt of
{allow, Val} -> [encode_allow(Val, Translate)];
{allow, _, _} -> erlang:error({badarg, Opt});
{email, Val} -> [encode_email(Val, Translate)];
{email, _, _} -> erlang:error({badarg, Opt});
{faqentry, Val} -> [encode_faqentry(Val, Translate)];
{faqentry, _, _} -> erlang:error({badarg, Opt});
{first, Val} -> [encode_first(Val, Translate)];
{first, _, _} -> erlang:error({badarg, Opt});
{last, Val} -> [encode_last(Val, Translate)];
{last, _, _} -> erlang:error({badarg, Opt});
{roomnick, Val} -> [encode_roomnick(Val, Translate)];
{roomnick, _, _} -> erlang:error({badarg, Opt});
{url, Val} -> [encode_url(Val, Translate)];
{url, _, _} -> erlang:error({badarg, Opt});
#xdata_field{} -> [Opt];
_ -> []
end
|| Opt <- List],
FormType = #xdata_field{var = <<"FORM_TYPE">>,
type = hidden,
values =
[<<"http://jabber.org/protocol/muc#register">>]},
[FormType | lists:flatten(Fs)].
decode([#xdata_field{var = <<"muc#register_allow">>,
values = [Value]}
| Fs],
Acc, Required) ->
try dec_bool(Value) of
Result ->
decode(Fs, [{allow, Result} | Acc],
lists:delete(<<"muc#register_allow">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_allow">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_allow">>,
values = []} =
F
| Fs],
Acc, Required) ->
decode([F#xdata_field{var = <<"muc#register_allow">>,
values = [<<>>]}
| Fs],
Acc, Required);
decode([#xdata_field{var = <<"muc#register_allow">>}
| _],
_, _) ->
erlang:error({?MODULE,
{too_many_values, <<"muc#register_allow">>,
<<"http://jabber.org/protocol/muc#register">>}});
decode([#xdata_field{var = <<"muc#register_email">>,
values = [Value]}
| Fs],
Acc, Required) ->
try Value of
Result ->
decode(Fs, [{email, Result} | Acc],
lists:delete(<<"muc#register_email">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_email">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_email">>,
values = []} =
F
| Fs],
Acc, Required) ->
decode([F#xdata_field{var = <<"muc#register_email">>,
values = [<<>>]}
| Fs],
Acc, Required);
decode([#xdata_field{var = <<"muc#register_email">>}
| _],
_, _) ->
erlang:error({?MODULE,
{too_many_values, <<"muc#register_email">>,
<<"http://jabber.org/protocol/muc#register">>}});
decode([#xdata_field{var = <<"muc#register_faqentry">>,
values = Values}
| Fs],
Acc, Required) ->
try [Value || Value <- Values] of
Result ->
decode(Fs, [{faqentry, Result} | Acc],
lists:delete(<<"muc#register_faqentry">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_faqentry">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_first">>,
values = [Value]}
| Fs],
Acc, Required) ->
try Value of
Result ->
decode(Fs, [{first, Result} | Acc],
lists:delete(<<"muc#register_first">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_first">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_first">>,
values = []} =
F
| Fs],
Acc, Required) ->
decode([F#xdata_field{var = <<"muc#register_first">>,
values = [<<>>]}
| Fs],
Acc, Required);
decode([#xdata_field{var = <<"muc#register_first">>}
| _],
_, _) ->
erlang:error({?MODULE,
{too_many_values, <<"muc#register_first">>,
<<"http://jabber.org/protocol/muc#register">>}});
decode([#xdata_field{var = <<"muc#register_last">>,
values = [Value]}
| Fs],
Acc, Required) ->
try Value of
Result ->
decode(Fs, [{last, Result} | Acc],
lists:delete(<<"muc#register_last">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_last">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_last">>,
values = []} =
F
| Fs],
Acc, Required) ->
decode([F#xdata_field{var = <<"muc#register_last">>,
values = [<<>>]}
| Fs],
Acc, Required);
decode([#xdata_field{var = <<"muc#register_last">>}
| _],
_, _) ->
erlang:error({?MODULE,
{too_many_values, <<"muc#register_last">>,
<<"http://jabber.org/protocol/muc#register">>}});
decode([#xdata_field{var = <<"muc#register_roomnick">>,
values = [Value]}
| Fs],
Acc, Required) ->
try Value of
Result ->
decode(Fs, [{roomnick, Result} | Acc],
lists:delete(<<"muc#register_roomnick">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_roomnick">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_roomnick">>,
values = []} =
F
| Fs],
Acc, Required) ->
decode([F#xdata_field{var = <<"muc#register_roomnick">>,
values = [<<>>]}
| Fs],
Acc, Required);
decode([#xdata_field{var = <<"muc#register_roomnick">>}
| _],
_, _) ->
erlang:error({?MODULE,
{too_many_values, <<"muc#register_roomnick">>,
<<"http://jabber.org/protocol/muc#register">>}});
decode([#xdata_field{var = <<"muc#register_url">>,
values = [Value]}
| Fs],
Acc, Required) ->
try Value of
Result ->
decode(Fs, [{url, Result} | Acc],
lists:delete(<<"muc#register_url">>, Required))
catch
_:_ ->
erlang:error({?MODULE,
{bad_var_value, <<"muc#register_url">>,
<<"http://jabber.org/protocol/muc#register">>}})
end;
decode([#xdata_field{var = <<"muc#register_url">>,
values = []} =
F
| Fs],
Acc, Required) ->
decode([F#xdata_field{var = <<"muc#register_url">>,
values = [<<>>]}
| Fs],
Acc, Required);
decode([#xdata_field{var = <<"muc#register_url">>} | _],
_, _) ->
erlang:error({?MODULE,
{too_many_values, <<"muc#register_url">>,
<<"http://jabber.org/protocol/muc#register">>}});
decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
if Var /= <<"FORM_TYPE">> ->
erlang:error({?MODULE,
{unknown_var, Var,
<<"http://jabber.org/protocol/muc#register">>}});
true -> decode(Fs, Acc, Required)
end;
decode([], _, [Var | _]) ->
erlang:error({?MODULE,
{missing_required_var, Var,
<<"http://jabber.org/protocol/muc#register">>}});
decode([], Acc, []) -> Acc.
encode_allow(Value, Translate) ->
Values = case Value of
undefined -> [];
Value -> [enc_bool(Value)]
end,
Opts = [],
#xdata_field{var = <<"muc#register_allow">>,
values = Values, required = false, type = boolean,
options = Opts, desc = <<>>,
label =
Translate(<<"Allow this person to register with the "
"room?">>)}.
encode_email(Value, Translate) ->
Values = case Value of
<<>> -> [];
Value -> [Value]
end,
Opts = [],
#xdata_field{var = <<"muc#register_email">>,
values = Values, required = false, type = 'text-single',
options = Opts, desc = <<>>,
label = Translate(<<"Email Address">>)}.
encode_faqentry(Value, Translate) ->
Values = case Value of
[] -> [];
Value -> [Value]
end,
Opts = [],
#xdata_field{var = <<"muc#register_faqentry">>,
values = Values, required = false, type = 'text-multi',
options = Opts, desc = <<>>,
label = Translate(<<"FAQ Entry">>)}.
encode_first(Value, Translate) ->
Values = case Value of
<<>> -> [];
Value -> [Value]
end,
Opts = [],
#xdata_field{var = <<"muc#register_first">>,
values = Values, required = false, type = 'text-single',
options = Opts, desc = <<>>,
label = Translate(<<"Given Name">>)}.
encode_last(Value, Translate) ->
Values = case Value of
<<>> -> [];
Value -> [Value]
end,
Opts = [],
#xdata_field{var = <<"muc#register_last">>,
values = Values, required = false, type = 'text-single',
options = Opts, desc = <<>>,
label = Translate(<<"Family Name">>)}.
encode_roomnick(Value, Translate) ->
Values = case Value of
<<>> -> [];
Value -> [Value]
end,
Opts = [],
#xdata_field{var = <<"muc#register_roomnick">>,
values = Values, required = false, type = 'text-single',
options = Opts, desc = <<>>,
label = Translate(<<"Nickname">>)}.
encode_url(Value, Translate) ->
Values = case Value of
<<>> -> [];
Value -> [Value]
end,
Opts = [],
#xdata_field{var = <<"muc#register_url">>,
values = Values, required = false, type = 'text-single',
options = Opts, desc = <<>>,
label = Translate(<<"A Web Page">>)}.