use opcua_types::{
match_extension_object_owned, AnonymousIdentityToken, ExtensionObject, IssuedIdentityToken,
UAString, UserNameIdentityToken, X509IdentityToken,
};
pub(crate) const POLICY_ID_ANONYMOUS: &str = "anonymous";
pub(crate) const POLICY_ID_USER_PASS_NONE: &str = "userpass_none";
pub(crate) const POLICY_ID_USER_PASS_RSA_15: &str = "userpass_rsa_15";
pub(crate) const POLICY_ID_USER_PASS_RSA_OAEP: &str = "userpass_rsa_oaep";
pub(crate) const POLICY_ID_USER_PASS_RSA_OAEP_SHA256: &str = "userpass_rsa_oaep_sha256";
pub(crate) const POLICY_ID_ISSUED_TOKEN_NONE: &str = "userpass_none";
pub(crate) const POLICY_ID_ISSUED_TOKEN_RSA_15: &str = "userpass_rsa_15";
pub(crate) const POLICY_ID_ISSUED_TOKEN_RSA_OAEP: &str = "userpass_rsa_oaep";
pub(crate) const POLICY_ID_ISSUED_TOKEN_RSA_OAEP_SHA256: &str = "userpass_rsa_oaep_sha256";
pub(crate) const POLICY_ID_X509: &str = "x509";
pub enum IdentityToken {
None,
Anonymous(AnonymousIdentityToken),
UserName(UserNameIdentityToken),
X509(X509IdentityToken),
IssuedToken(IssuedIdentityToken),
Invalid(ExtensionObject),
}
impl IdentityToken {
pub fn new(o: ExtensionObject) -> Self {
if o.is_null() {
IdentityToken::Anonymous(AnonymousIdentityToken {
policy_id: UAString::from(POLICY_ID_ANONYMOUS),
})
} else {
match_extension_object_owned!(o,
v: AnonymousIdentityToken => Self::Anonymous(v),
v: UserNameIdentityToken => Self::UserName(v),
v: X509IdentityToken => Self::X509(v),
v: IssuedIdentityToken => Self::IssuedToken(v),
_ => Self::Invalid(o)
)
}
}
}