use std::time;
use nitrokey::{Authenticate, ConfigureOtp, Device, GenerateOtp};
fn main() -> Result<(), nitrokey::Error> {
let mut manager = nitrokey::take()?;
let device = manager.connect()?;
let data = nitrokey::OtpSlotData::new(
1,
"test",
"3132333435363738393031323334353637383930",
nitrokey::OtpMode::SixDigits,
);
let mut admin = device.authenticate_admin("12345678")?;
admin.write_totp_slot(data, 30)?;
let mut device = admin.device();
let time = time::SystemTime::now()
.duration_since(time::UNIX_EPOCH)
.expect("Invalid system time");
device.set_time(time.as_secs(), true)?;
let config = device.get_config()?;
let otp = if config.user_password {
let user = device.authenticate_user("123456")?;
user.get_totp_code(1)
} else {
device.get_totp_code(1)
}?;
println!("Generated OTP code: {}", otp);
Ok(())
}