public override string GetReadableOTP(PwEntry pe) { if (pe == null) { return(string.Empty); } EntryOTP otp = EnsureEntry(pe); if (otp.ValidTo <= DateTime.UtcNow) { if (otp.kpotp.Valid) { otp.ReadableOTP = otp.kpotp.ReadableOTP(otp.kpotp.GetOTP()); otp.ValidTo = DateTime.UtcNow.AddSeconds(otp.kpotp.RemainingSeconds); } else { otp.ReadableOTP = PluginTranslation.PluginTranslate.Error; otp.ValidTo = DateTime.MaxValue; } UpdateOTPBuffer(pe, otp); } if ((otp.ValidTo == DateTime.MaxValue) || (otp.kpotp.Type == KPOTPType.HOTP)) { return(otp.ReadableOTP); } else { int r = (otp.ValidTo - DateTime.UtcNow).Seconds; return(otp.ReadableOTP + (r < 6 ? " (" + r.ToString() + ")" : string.Empty)); } }
public override string GetReadableOTP(PwEntry pe) { if (!SetEntry(pe, false)) { return(string.Empty); } EntryOTP otp = EnsureEntry(); if (otp.ValidTo < DateTime.UtcNow) { if (otp.kpotp.Valid) { otp.ReadableOTP = otp.kpotp.ReadableOTP(otp.kpotp.GetOTP()); otp.ValidTo = DateTime.UtcNow.AddSeconds(otp.kpotp.RemainingSeconds); } else if (otp.Loaded) { otp.ReadableOTP = PluginTranslate.Error; otp.ValidTo = DateTime.MaxValue; } if (otp.Loaded) { UpdateOTPBuffer(pe, otp); } } if ((!otp.Loaded && Config.UseDBForOTPSeeds(otp.db)) || (otp.ValidTo == DateTime.MaxValue)) { return(otp.ReadableOTP); } int r = (otp.ValidTo - DateTime.UtcNow).Seconds; return(otp.ReadableOTP + (r < 6 ? " (" + r.ToString() + ")" : string.Empty)); }
internal static void UpdateOTPBuffer(PwEntry pe, EntryOTP otp) { //Empty db path = db is closed if ((otp.db == null) || string.IsNullOrEmpty(otp.db.IOConnectionInfo.Path)) { m_dEntryOTPData.Remove(pe); return; } m_dEntryOTPData[pe] = otp; }