pub const BINDING_SOAP: &str = "urn:oasis:names:tc:SAML:2.0:bindings:SOAP";
pub const BINDING_PAOS: &str = "urn:oasis:names:tc:SAML:2.0:bindings:PAOS";
pub const BINDING_HTTP_REDIRECT: &str = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect";
pub const BINDING_HTTP_POST: &str = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST";
pub const BINDING_HTTP_ARTIFACT: &str = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact";
pub const BINDING_URI: &str = "urn:oasis:names:tc:SAML:2.0:bindings:URI";
pub const ENCODING_DEFLATE: &str = "urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE";
pub const CM_BEARER: &str = "urn:oasis:names:tc:SAML:2.0:cm:bearer";
pub const CM_HOLDER_OF_KEY: &str = "urn:oasis:names:tc:SAML:2.0:cm:holder-of-key";
pub const CM_SENDER_VOUCHES: &str = "urn:oasis:names:tc:SAML:2.0:cm:sender-vouches";
pub const NAMEID_UNSPECIFIED: &str = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
pub const NAMEID_EMAIL: &str = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
pub const NAMEID_X509: &str = "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName";
pub const NAMEID_WINDOWS: &str =
"urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName";
pub const NAMEID_ENTITY: &str = "urn:oasis:names:tc:SAML:2.0:nameid-format:entity";
pub const NAMEID_PERSISTENT: &str = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent";
pub const NAMEID_TRANSIENT: &str = "urn:oasis:names:tc:SAML:2.0:nameid-format:transient";
pub const NAMEID_KERBEROS: &str = "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos";
pub const NAMEID_ENCRYPTED: &str = "urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted";
pub const STATUS_SUCCESS: &str = "urn:oasis:names:tc:SAML:2.0:status:Success";
pub const STATUS_REQUESTER: &str = "urn:oasis:names:tc:SAML:2.0:status:Requester";
pub const STATUS_RESPONDER: &str = "urn:oasis:names:tc:SAML:2.0:status:Responder";
pub const STATUS_VERSION_MISMATCH: &str = "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch";
pub const STATUS_AUTHN_FAILED: &str = "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed";
pub const STATUS_INVALID_ATTR_NAME_OR_VALUE: &str =
"urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue";
pub const STATUS_INVALID_NAMEID_POLICY: &str =
"urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy";
pub const STATUS_NO_AUTHN_CONTEXT: &str = "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext";
pub const STATUS_NO_AVAILABLE_IDP: &str = "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP";
pub const STATUS_NO_PASSIVE: &str = "urn:oasis:names:tc:SAML:2.0:status:NoPassive";
pub const STATUS_NO_SUPPORTED_IDP: &str = "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP";
pub const STATUS_PARTIAL_LOGOUT: &str = "urn:oasis:names:tc:SAML:2.0:status:PartialLogout";
pub const STATUS_PROXY_COUNT_EXCEEDED: &str =
"urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded";
pub const STATUS_REQUEST_DENIED: &str = "urn:oasis:names:tc:SAML:2.0:status:RequestDenied";
pub const STATUS_REQUEST_UNSUPPORTED: &str =
"urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported";
pub const STATUS_REQUEST_VERSION_DEPRECATED: &str =
"urn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated";
pub const STATUS_REQUEST_VERSION_TOO_HIGH: &str =
"urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh";
pub const STATUS_REQUEST_VERSION_TOO_LOW: &str =
"urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow";
pub const STATUS_RESOURCE_NOT_RECOGNIZED: &str =
"urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized";
pub const STATUS_TOO_MANY_RESPONSES: &str = "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses";
pub const STATUS_UNKNOWN_ATTR_PROFILE: &str =
"urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile";
pub const STATUS_UNKNOWN_PRINCIPAL: &str = "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal";
pub const STATUS_UNSUPPORTED_BINDING: &str =
"urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding";
pub const AUTHN_CONTEXT_INTERNET_PROTOCOL: &str =
"urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocol";
pub const AUTHN_CONTEXT_IP_PASSWORD: &str =
"urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword";
pub const AUTHN_CONTEXT_KERBEROS: &str = "urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos";
pub const AUTHN_CONTEXT_PASSWORD: &str = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password";
pub const AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT: &str =
"urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport";
pub const AUTHN_CONTEXT_PREVIOUS_SESSION: &str =
"urn:oasis:names:tc:SAML:2.0:ac:classes:PreviousSession";
pub const AUTHN_CONTEXT_X509: &str = "urn:oasis:names:tc:SAML:2.0:ac:classes:X509";
pub const AUTHN_CONTEXT_UNSPECIFIED: &str = "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified";
pub const CONSENT_UNSPECIFIED: &str = "urn:oasis:names:tc:SAML:2.0:consent:unspecified";
pub const CONSENT_OBTAINED: &str = "urn:oasis:names:tc:SAML:2.0:consent:obtained";
pub const CONSENT_PRIOR: &str = "urn:oasis:names:tc:SAML:2.0:consent:prior";
pub const CONSENT_IMPLICIT: &str = "urn:oasis:names:tc:SAML:2.0:consent:current-implicit";
pub const CONSENT_EXPLICIT: &str = "urn:oasis:names:tc:SAML:2.0:consent:current-explicit";
pub const CONSENT_UNAVAILABLE: &str = "urn:oasis:names:tc:SAML:2.0:consent:unavailable";
pub const CONSENT_INAPPLICABLE: &str = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable";
pub const ATTRNAME_FORMAT_UNSPECIFIED: &str =
"urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified";
pub const ATTRNAME_FORMAT_URI: &str = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri";
pub const ATTRNAME_FORMAT_BASIC: &str = "urn:oasis:names:tc:SAML:2.0:attrname-format:basic";
pub const LOGOUT_REASON_USER: &str = "urn:oasis:names:tc:SAML:2.0:logout:user";
pub const LOGOUT_REASON_ADMIN: &str = "urn:oasis:names:tc:SAML:2.0:logout:admin";
pub const MIME_SAML_METADATA: &str = "application/samlmetadata+xml";
pub const MIME_SAML_ASSERTION: &str = "application/samlassertion+xml";
pub const SOAP_ACTION_SAML: &str = "http://www.oasis-open.org/committees/security";
pub const SOAP_CONTENT_TYPE: &str = "text/xml";
pub const CACHE_CONTROL_VALUE: &str = "no-cache, no-store";
pub const PRAGMA_VALUE: &str = "no-cache";
pub const CACHE_CONTROL_SOAP: &str = "no-cache, no-store, must-revalidate, private";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_binding_uris_start_with_urn() {
assert!(BINDING_SOAP.starts_with("urn:oasis:names:tc:SAML:2.0:bindings:"));
assert!(BINDING_PAOS.starts_with("urn:oasis:names:tc:SAML:2.0:bindings:"));
assert!(BINDING_HTTP_REDIRECT.starts_with("urn:oasis:names:tc:SAML:2.0:bindings:"));
assert!(BINDING_HTTP_POST.starts_with("urn:oasis:names:tc:SAML:2.0:bindings:"));
assert!(BINDING_HTTP_ARTIFACT.starts_with("urn:oasis:names:tc:SAML:2.0:bindings:"));
assert!(BINDING_URI.starts_with("urn:oasis:names:tc:SAML:2.0:bindings:"));
}
#[test]
fn test_confirmation_methods_start_with_urn() {
assert!(CM_BEARER.starts_with("urn:oasis:names:tc:SAML:2.0:cm:"));
assert!(CM_HOLDER_OF_KEY.starts_with("urn:oasis:names:tc:SAML:2.0:cm:"));
assert!(CM_SENDER_VOUCHES.starts_with("urn:oasis:names:tc:SAML:2.0:cm:"));
}
#[test]
fn test_nameid_format_v11_uris() {
assert!(NAMEID_UNSPECIFIED.contains("SAML:1.1"));
assert!(NAMEID_EMAIL.contains("SAML:1.1"));
assert!(NAMEID_X509.contains("SAML:1.1"));
assert!(NAMEID_WINDOWS.contains("SAML:1.1"));
}
#[test]
fn test_nameid_format_v20_uris() {
assert!(NAMEID_ENTITY.contains("SAML:2.0"));
assert!(NAMEID_PERSISTENT.contains("SAML:2.0"));
assert!(NAMEID_TRANSIENT.contains("SAML:2.0"));
assert!(NAMEID_KERBEROS.contains("SAML:2.0"));
assert!(NAMEID_ENCRYPTED.contains("SAML:2.0"));
}
#[test]
fn test_top_level_status_codes() {
assert!(STATUS_SUCCESS.ends_with("Success"));
assert!(STATUS_REQUESTER.ends_with("Requester"));
assert!(STATUS_RESPONDER.ends_with("Responder"));
assert!(STATUS_VERSION_MISMATCH.ends_with("VersionMismatch"));
}
#[test]
fn test_all_status_codes_are_urns() {
let codes = [
STATUS_SUCCESS,
STATUS_REQUESTER,
STATUS_RESPONDER,
STATUS_VERSION_MISMATCH,
STATUS_AUTHN_FAILED,
STATUS_INVALID_ATTR_NAME_OR_VALUE,
STATUS_INVALID_NAMEID_POLICY,
STATUS_NO_AUTHN_CONTEXT,
STATUS_NO_AVAILABLE_IDP,
STATUS_NO_PASSIVE,
STATUS_NO_SUPPORTED_IDP,
STATUS_PARTIAL_LOGOUT,
STATUS_PROXY_COUNT_EXCEEDED,
STATUS_REQUEST_DENIED,
STATUS_REQUEST_UNSUPPORTED,
STATUS_REQUEST_VERSION_DEPRECATED,
STATUS_REQUEST_VERSION_TOO_HIGH,
STATUS_REQUEST_VERSION_TOO_LOW,
STATUS_RESOURCE_NOT_RECOGNIZED,
STATUS_TOO_MANY_RESPONSES,
STATUS_UNKNOWN_ATTR_PROFILE,
STATUS_UNKNOWN_PRINCIPAL,
STATUS_UNSUPPORTED_BINDING,
];
for code in &codes {
assert!(
code.starts_with("urn:oasis:names:tc:SAML:2.0:status:"),
"Bad status code: {}",
code
);
}
}
}