@@ -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