11package io .r2dbc .postgresql .authentication ;
22
33import com .ongres .scram .client .ScramClient ;
4- import com .ongres .scram .client .ScramSession ;
54import com .ongres .scram .common .exception .ScramInvalidServerSignatureException ;
65import com .ongres .scram .common .exception .ScramParseException ;
76import com .ongres .scram .common .exception .ScramServerErrorException ;
1716import reactor .core .Exceptions ;
1817import reactor .util .annotation .Nullable ;
1918
20- import static com .ongres .scram .client .ScramClient .ChannelBinding .NO ;
21- import static com .ongres .scram .common .stringprep .StringPreparations .NO_PREPARATION ;
19+ import static com .ongres .scram .common .StringPreparation .NO_PREPARATION ;
2220
2321public class SASLAuthenticationHandler implements AuthenticationHandler {
2422
2523 private final CharSequence password ;
2624
2725 private final String username ;
2826
29- private ScramSession .ClientFinalProcessor clientFinalProcessor ;
30-
31- private ScramSession scramSession ;
27+ private ScramClient scramClient ;
3228
3329 /**
3430 * Create a new handler.
@@ -73,24 +69,20 @@ public FrontendMessage handle(AuthenticationMessage message) {
7369 }
7470
7571 private FrontendMessage handleAuthenticationSASL (AuthenticationSASL message ) {
76- ScramClient scramClient = ScramClient
77- .channelBinding (NO )
72+ scramClient = ScramClient .builder ()
73+ .advertisedMechanisms (message .getAuthenticationMechanisms ())
74+ .username (this .username )
75+ .password (this .password .toString ().toCharArray ())
7876 .stringPreparation (NO_PREPARATION )
79- .selectMechanismBasedOnServerAdvertised (message .getAuthenticationMechanisms ().toArray (new String [0 ]))
80- .setup ();
81-
82- this .scramSession = scramClient .scramSession (this .username );
77+ .build ();
8378
84- return new SASLInitialResponse (ByteBufferUtils .encode (this . scramSession . clientFirstMessage ()), scramClient .getScramMechanism ().getName ());
79+ return new SASLInitialResponse (ByteBufferUtils .encode (scramClient . clientFirstMessage (). toString ()), scramClient .getScramMechanism ().getName ());
8580 }
8681
8782 private FrontendMessage handleAuthenticationSASLContinue (AuthenticationSASLContinue message ) {
8883 try {
89- this .clientFinalProcessor = this .scramSession
90- .receiveServerFirstMessage (ByteBufferUtils .decode (message .getData ()))
91- .clientFinalProcessor (this .password .toString ());
92-
93- return new SASLResponse (ByteBufferUtils .encode (clientFinalProcessor .clientFinalMessage ()));
84+ scramClient .serverFirstMessage (ByteBufferUtils .decode (message .getData ()));
85+ return new SASLResponse (ByteBufferUtils .encode (scramClient .clientFinalMessage ().toString ()));
9486 } catch (ScramParseException e ) {
9587 throw Exceptions .propagate (e );
9688 }
@@ -99,7 +91,7 @@ private FrontendMessage handleAuthenticationSASLContinue(AuthenticationSASLConti
9991 @ Nullable
10092 private FrontendMessage handleAuthenticationSASLFinal (AuthenticationSASLFinal message ) {
10193 try {
102- this . clientFinalProcessor . receiveServerFinalMessage (ByteBufferUtils .decode (message .getAdditionalData ()));
94+ scramClient . serverFinalMessage (ByteBufferUtils .decode (message .getAdditionalData ()));
10395 return null ;
10496 } catch (ScramParseException | ScramInvalidServerSignatureException | ScramServerErrorException e ) {
10597 throw Exceptions .propagate (e );
0 commit comments