Skip to content

Commit 5b51bd8

Browse files
committed
Added Open method in PxDatabase
1 parent f7a8a09 commit 5b51bd8

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

PassXYZLib/PxDatabase.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,41 @@ public void Open(string filename, string password)
291291
Open(ioc, cmpKey, logger);
292292
}
293293

294+
/// <summary>
295+
/// Open database with user information.
296+
/// If the device lock is enabled, we need to set DefaultFolder first.
297+
/// </summary>
298+
/// <param name="user">an instance of PassXYZLib.User</param>
299+
public void Open(PassXYZLib.User user)
300+
{
301+
if (user == null)
302+
{ Debug.Assert(false); throw new ArgumentNullException("PassXYZLib.User"); }
303+
304+
var logger = new KPCLibLogger();
305+
306+
IOConnectionInfo ioc = IOConnectionInfo.FromPath(user.Path);
307+
CompositeKey cmpKey = new CompositeKey();
308+
cmpKey.AddUserKey(new KcpPassword(user.Password));
309+
310+
if (user.IsDeviceLockEnabled)
311+
{
312+
PassXYZ.Utils.Settings.DefaultFolder = PxDataFile.KeyFilePath;
313+
var pxKeyProvider = new PassXYZ.Services.PxKeyProvider(user.Username, false);
314+
if (pxKeyProvider.IsInitialized)
315+
{
316+
KeyProviderQueryContext ctxKP = new KeyProviderQueryContext(new IOConnectionInfo(), false, false);
317+
byte[] pbProvKey = pxKeyProvider.GetKey(ctxKP);
318+
cmpKey.AddUserKey(new KcpCustomKey(pxKeyProvider.Name, pbProvKey, true));
319+
}
320+
else
321+
{
322+
throw new KeePassLib.Keys.InvalidCompositeKeyException();
323+
}
324+
}
325+
326+
Open(ioc, cmpKey, logger);
327+
}
328+
294329
private void EnsureRecycleBin(ref PwGroup pgRecycleBin)
295330
{
296331
if (pgRecycleBin == this.RootGroup)

0 commit comments

Comments
 (0)