pub struct ScramClientFirst {
pub gs2_header: String,
pub authzid: Option<String>,
pub username: String,
pub nonce: String,
pub extensions: Vec<(String, String)>,
pub bare: String,
}Expand description
A parsed SCRAM client-first message.
Fields§
§gs2_header: StringThe GS2 header exactly as the client sent it, n,, or n,a=<authzid>,.
authzid: Option<String>The decoded GS2 authorization id, None when the header carries none.
username: StringThe decoded SCRAM username (n=), with =2C and =3D unescaped.
nonce: StringThe client nonce (r=).
extensions: Vec<(String, String)>The SCRAM extensions after the nonce, in the order the client sent
them, for example ("tokenauth", "true").
bare: Stringclient-first-message-bare as Kafka’s
ClientFirstMessage.clientFirstMessageBare rebuilds it, the first part
of the AuthMessage both sides sign: n=<saslname as sent>,r=<nonce>,
then ,<key>=<value> for each distinct extension key. A reserved m=
attribute is dropped, and a repeated key keeps its last value, as the
map that ScramExtensions builds does.
Kafka iterates that map through Map.copyOf, whose order is fixed for
one entry but randomized per JVM for two or more, so no order matches
Kafka every time for a client that sends several distinct extensions.
The keys keep the order in which the client first sent them, which is
the order Kafka’s own client signs.
Implementations§
Source§impl ScramClientFirst
impl ScramClientFirst
Sourcepub fn parse(bytes: &[u8]) -> Result<Self, AuthError>
pub fn parse(bytes: &[u8]) -> Result<Self, AuthError>
Parse a client-first message.
§Errors
AuthError::MalformedMessage when the message is not UTF-8, has a
GS2 header other than n,, or n,a=<authzid>,, or does not follow
Kafka’s client-first grammar.
Sourcepub fn extension(&self, key: &str) -> Option<&str>
pub fn extension(&self, key: &str) -> Option<&str>
The value of extension key, if the client sent it.
When the client sent key more than once, the last value wins, as in
the map that Kafka’s ScramExtensions builds.
Sourcepub fn token_authenticated(&self) -> bool
pub fn token_authenticated(&self) -> bool
True when the client sent tokenauth=true, Kafka’s
ScramExtensions.tokenAuthenticated.
Trait Implementations§
Source§impl Clone for ScramClientFirst
impl Clone for ScramClientFirst
Source§fn clone(&self) -> ScramClientFirst
fn clone(&self) -> ScramClientFirst
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ScramClientFirst
impl Debug for ScramClientFirst
impl Eq for ScramClientFirst
Source§impl PartialEq for ScramClientFirst
impl PartialEq for ScramClientFirst
Source§fn eq(&self, other: &ScramClientFirst) -> bool
fn eq(&self, other: &ScramClientFirst) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for ScramClientFirst
Auto Trait Implementations§
impl Freeze for ScramClientFirst
impl RefUnwindSafe for ScramClientFirst
impl Send for ScramClientFirst
impl Sync for ScramClientFirst
impl Unpin for ScramClientFirst
impl UnsafeUnpin for ScramClientFirst
impl UnwindSafe for ScramClientFirst
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);