From 1e76cbc6a2a18b2df66ed081b1ee2b3994a18d0f Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 29 Jan 2019 17:41:45 +0100 Subject: [PATCH] auth_helpers.rs: implement assemble_csrf_prevention_token --- src/auth_helpers.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/auth_helpers.rs b/src/auth_helpers.rs index 0ad3f8b6..a55010b8 100644 --- a/src/auth_helpers.rs +++ b/src/auth_helpers.rs @@ -5,9 +5,29 @@ use lazy_static::lazy_static; use openssl::rsa::{Rsa}; use openssl::pkey::{PKey, Public, Private}; +use openssl::sha; use std::path::PathBuf; +pub fn assemble_csrf_prevention_token( + secret: &[u8], + username: &str, +) -> String { + + let epoch = std::time::SystemTime::now().duration_since( + std::time::SystemTime::UNIX_EPOCH).unwrap().as_secs(); + + let stamp = format!("{:08X}:{}:", epoch, username); + + let mut hasher = sha::Sha256::new(); + hasher.update(stamp.as_bytes()); + hasher.update(secret); + + let digest = hasher.finish(); + + base64::encode_config(&digest, base64::STANDARD_NO_PAD) +} + pub fn generate_csrf_key() -> Result<(), Error> { let path = PathBuf::from("/etc/proxmox-backup/csrf.key");