2017-09-18 18:40:43 +02:00
|
|
|
|
using System;
|
|
|
|
|
using Windows.Storage;
|
|
|
|
|
using ModernKeePass.ViewModels;
|
2017-09-26 15:38:58 +02:00
|
|
|
|
using ModernKeePassLib;
|
|
|
|
|
using ModernKeePassLib.Interfaces;
|
|
|
|
|
using ModernKeePassLib.Keys;
|
|
|
|
|
using ModernKeePassLib.Serialization;
|
2017-09-18 18:40:43 +02:00
|
|
|
|
|
|
|
|
|
namespace ModernKeePass.Common
|
|
|
|
|
{
|
|
|
|
|
public class DatabaseHelper
|
|
|
|
|
{
|
2017-10-10 15:00:31 +02:00
|
|
|
|
public enum DatabaseStatus
|
|
|
|
|
{
|
|
|
|
|
Closed = 0,
|
|
|
|
|
Opening = 1,
|
|
|
|
|
Opened = 2
|
|
|
|
|
}
|
2017-09-28 17:51:30 +02:00
|
|
|
|
private readonly PwDatabase _pwDatabase = new PwDatabase();
|
2017-09-18 18:40:43 +02:00
|
|
|
|
|
|
|
|
|
public GroupVm RootGroup { get; set; }
|
2017-10-10 15:00:31 +02:00
|
|
|
|
public DatabaseStatus Status { get; private set; } = DatabaseStatus.Closed;
|
2017-10-11 14:30:07 +02:00
|
|
|
|
|
|
|
|
|
public string Name { get; private set; }
|
|
|
|
|
public string Open(StorageFile databaseFile, string password)
|
2017-09-18 18:40:43 +02:00
|
|
|
|
{
|
|
|
|
|
var key = new CompositeKey();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
key.AddUserKey(new KcpPassword(password));
|
2017-10-11 14:30:07 +02:00
|
|
|
|
_pwDatabase.Open(IOConnectionInfo.FromFile(databaseFile), key, new NullStatusLogger());
|
2017-09-28 17:51:30 +02:00
|
|
|
|
|
2017-10-10 15:00:31 +02:00
|
|
|
|
if (_pwDatabase.IsOpen)
|
|
|
|
|
{
|
2017-10-11 14:30:07 +02:00
|
|
|
|
Name = databaseFile.Name;
|
2017-10-10 15:00:31 +02:00
|
|
|
|
Status = DatabaseStatus.Opened;
|
|
|
|
|
RootGroup = new GroupVm(_pwDatabase.RootGroup, null);
|
|
|
|
|
}
|
2017-09-18 18:40:43 +02:00
|
|
|
|
}
|
|
|
|
|
catch (ArgumentNullException)
|
|
|
|
|
{
|
|
|
|
|
return "Password cannot be empty";
|
|
|
|
|
}
|
|
|
|
|
catch (InvalidCompositeKeyException)
|
|
|
|
|
{
|
|
|
|
|
return "Wrong password";
|
|
|
|
|
}
|
2017-09-22 15:40:24 +02:00
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
return ex.Message;
|
|
|
|
|
}
|
2017-09-18 18:40:43 +02:00
|
|
|
|
return string.Empty;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Save()
|
|
|
|
|
{
|
2017-10-10 15:00:31 +02:00
|
|
|
|
if (_pwDatabase != null && _pwDatabase.IsOpen)
|
|
|
|
|
_pwDatabase.Save(new NullStatusLogger());
|
2017-09-27 18:01:21 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Close()
|
|
|
|
|
{
|
2017-10-10 15:00:31 +02:00
|
|
|
|
_pwDatabase?.Close();
|
|
|
|
|
Status = DatabaseStatus.Closed;
|
2017-09-18 18:40:43 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|