(.module: [lux #* ["." host (#+ import:)] [abstract [equivalence (#+ Equivalence)]] [data ["." product] ["." text ["%" format (#+ format)] ["." encoding]]]]) (type: #export User Text) (type: #export Password Text) (type: #export Identity {#user User #password Password}) (def: #export 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: #export (basic_auth user password) (-> User Password Text) (let [credentials (\ encoding.utf8 encode (format user ":" password))] (|> (java/util/Base64::getEncoder) (java/util/Base64$Encoder::encodeToString credentials) (format "Basic "))))