(.module: [library [lux #* ["." ffi (#+ import:)] [abstract [equivalence (#+ Equivalence)]] [data ["." product] ["." text ["%" format (#+ format)] [encoding ["." utf8]]]]]]) (type: .public User Text) (type: .public Password Text) (type: .public Identity {#user User #password Password}) (def: .public equivalence (Equivalence Identity) ($_ product.equivalence text.equivalence text.equivalence )) (import: java/util/Base64$Encoder ["#::." (encodeToString [[byte]] java/lang/String)]) (import: java/util/Base64 ["#::." (#static getEncoder [] java/util/Base64$Encoder)]) (def: .public (basic_auth user password) (-> User Password Text) (let [credentials (\ utf8.codec encoded (format user ":" password))] (|> (java/util/Base64::getEncoder) (java/util/Base64$Encoder::encodeToString credentials) (format "Basic "))))