Skip to content

Commit 73e5122

Browse files
authored
Merge pull request #108 from weiss/fix/cb-code-duplication
xmpp_sasl_scram: Deduplicate channel binding validation code
2 parents c13bdd0 + fe1c282 commit 73e5122

1 file changed

Lines changed: 13 additions & 18 deletions

File tree

src/xmpp_sasl_scram.erl

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -256,41 +256,36 @@ mech_step(#state{step = 4, algo = Algo} = State, ClientIn) ->
256256
{error, parser_failed}
257257
end.
258258

259-
cbind_valid(#state{channel_bindings = #{} = Bindings}, <<"p=", Binding/binary>>) ->
260-
maps:is_key(Binding, Bindings);
261-
cbind_valid(#state{channel_bindings = #{}}, _) ->
262-
false;
263-
cbind_valid(#state{channel_bindings = not_available}, <<"y", _/binary>>) ->
264-
true;
265-
cbind_valid(_, <<"y", _/binary>>) ->
266-
false;
267-
cbind_valid(_, <<"n", _/binary>>) ->
268-
true;
269-
cbind_valid(_, _) ->
270-
false.
271-
272259
extensions_valid(_State, Ext) ->
273260
lists:all(
274261
fun(<<"m=", _/binary>>) -> false;
275262
(_) -> true
276263
end, Ext).
277264

265+
cbind_valid(#state{channel_bindings = #{} = Bindings}, <<"p=", Binding/binary>>) ->
266+
maps:is_key(Binding, Bindings);
267+
cbind_valid(State, ChannelBindingSupport) ->
268+
cbind_check(State, ChannelBindingSupport).
269+
278270
cbind_verify(#state{channel_bindings = #{} = Bindings}, <<"p=", Binding/binary>>) ->
279271
case re:split(Binding, <<",">>, [{parts, 3}, {return, binary}]) of
280272
[Type, _, Data] ->
281273
maps:get(Type, Bindings, none) == Data;
282274
_ ->
283275
false
284276
end;
285-
cbind_verify(#state{channel_bindings = #{}}, _) ->
277+
cbind_verify(State, ChannelBindingSupport) ->
278+
cbind_check(State, ChannelBindingSupport).
279+
280+
cbind_check(#state{channel_bindings = #{}}, _) ->
286281
false;
287-
cbind_verify(#state{channel_bindings = not_available}, <<"y", _/binary>>) ->
282+
cbind_check(#state{channel_bindings = not_available}, <<"y", _/binary>>) ->
288283
true;
289-
cbind_verify(_, <<"y", _/binary>>) ->
284+
cbind_check(_, <<"y", _/binary>>) ->
290285
false;
291-
cbind_verify(_, <<"n", _/binary>>) ->
286+
cbind_check(_, <<"n", _/binary>>) ->
292287
true;
293-
cbind_verify(_, _) ->
288+
cbind_check(_, _) ->
294289
false.
295290

296291
parse_attribute(<<Name, $=, Val/binary>>) when Val /= <<>> ->

0 commit comments

Comments
 (0)