using System;
using System.IO;
using System.Windows.Forms;
using Axantum.PasswordSafe;
namespace Helpers.PasswordSafe
{
class ShowRecords
{
private ListView listView1;
public ShowRecords(ListView listView)
{
this.listView1 = listView;
}
private string m_Path;
private string m_Password;
private delegate void WorkerDelegate();
public void Open(string strPath, string strPassword)
{
this.m_Path = strPath;
this.m_Password = strPassword;
this.listView1.BeginInvoke(new WorkerDelegate(Worker));
}
private void Worker()
{
this.listView1.Items.Clear();
Stream pwsafeStream = new FileStream(m_Path, FileMode.Open, FileAccess.Read);
using (PasswordSafeReader reader = new PasswordSafeReader(pwsafeStream))
{
try
{
reader.SetPassphrase(m_Password);
m_Password = null;
}
catch
{
m_Password = null;
pwsafeStream.Close();
MessageBox.Show("Wrong password");
return;
}
while (reader.Read())
{
switch (reader.CurrentPartType)
{
case PasswordSafePartType.Header:
PasswordSafeHeader header = reader.Header;
/*
Console.WriteLine(header.DBDescription);//, Is.EqualTo(null), "DbDescription should be null");
Console.WriteLine(header.DBName);//, Is.EqualTo(null), "DbName should be null");
Console.WriteLine(header.LastSavedBy);//, Is.EqualTo("Svante"));
Console.WriteLine(header.LastSavedOn);//, Is.EqualTo("CORUSCANT"));
Console.WriteLine(header.LastUpdateHost);//, Is.EqualTo(null));
Console.WriteLine(header.LastUpdateUser);//, Is.EqualTo(null));
Console.WriteLine(header.MajorVersion);//, Is.EqualTo(3));
Console.WriteLine(header.MinorVersion);//, Is.EqualTo(5));
Console.WriteLine(header.TreeDisplayStatus.Count);//, Is.EqualTo(1));
if(header.TreeDisplayStatus.Count>0)
Console.WriteLine(header.TreeDisplayStatus[0]);//, Is.EqualTo(false));
Console.WriteLine(header.Uuid);//, Is.EqualTo(new Guid("{8a0e8e31-9885-d142-9c67-3fa78e63de61}")));
Console.WriteLine(header.WhatLastSaved);//, Is.EqualTo("Password Safe V3.08"));
Console.WriteLine(header.NonDefaultUserPrefs);//, Is.EqualTo(String.Empty));
*/
break;
case PasswordSafePartType.Record:
PasswordSafeRecord record = reader.Record;
/*
Console.WriteLine(record.AutoType);//, Is.EqualTo("Autotype1"), "AutoType");
Console.WriteLine(record.Notes);//, Is.EqualTo("Note1"), "Notes");
if (record.PasswordHistory != null)
{
Console.WriteLine(record.PasswordHistory.Status);//, Is.EqualTo(1), "PasswordHistory.Status");
Console.WriteLine(record.PasswordHistory.MaxHistory);//, Is.EqualTo(3), "PasswordHistory.MaxHistory");
Console.WriteLine(record.PasswordHistory.PasswordHistory.Count);//, Is.EqualTo(2), "PasswordHistory.Count");
}
Console.WriteLine(record.Password.Password);//, Is.EqualTo("Password3"), "Password");
Console.WriteLine(record.Password.ExpiresUtc);//, Is.EqualTo(new DateTime(2010, 12, 31, 11, 34, 0, DateTimeKind.Utc)), "ExpiresUtc");
Console.WriteLine(record.Password.ModifiedUtc);//, Is.EqualTo(new DateTime(2007, 10, 11, 09, 51, 29, DateTimeKind.Utc)), "ModifiedUtc");
Console.WriteLine(record.TimeRecordAccessedUtc);//, Is.EqualTo(DateTime.MinValue), "TimeRecordAccessedUtc");
Console.WriteLine(record.TimeRecordCreatedUtc);//, Is.EqualTo(new DateTime(2007, 10, 11, 09, 50, 30, DateTimeKind.Utc)), "TimeRecordCreatedUtc");
Console.WriteLine(record.TimeRecordModifiedUtc);//, Is.EqualTo(new DateTime(2007, 10, 11, 09, 51, 29, DateTimeKind.Utc)), "TimeRecordModifiedUtc");
Console.WriteLine(record.Title);//, Is.EqualTo("Title1"));
Console.WriteLine(record.ResourceLocator);//, Is.EqualTo("http://www.url1.com/"));
Console.WriteLine(record.User);//, Is.EqualTo("Username1"));
Console.WriteLine(record.Uuid);//, Is.EqualTo(new Guid("{3973f18e-c986-034f-a974-acaa2d4c31cb}")));
*/
ListViewItem lvi = new ListViewItem(record.Title);
lvi.SubItems.Add(record.User);
lvi.SubItems.Add(record.Notes);
lvi.Tag = record.Password.Password;
this.listView1.Items.Add(lvi);
break;
case PasswordSafePartType.End:
break;
default:
Console.WriteLine("Unexpected part type");
break;
}
}
}
}
}
}