Files
keepass2android/src/Kp2aBusinessLogic/database/edit/SetPassword.cs
Philipp Crocoll d2a06617eb Refactoring:
Wiped out the historical partial Java naming conventions, replaced by C#
removed unused fields/parameters
removed many unused usings
...
(Thanks to ReSharper :-))
2013-06-15 12:40:01 +02:00

104 lines
2.9 KiB
C#

/*
This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file is based on Keepassdroid, Copyright Brian Pellin.
Keepass2Android is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
Keepass2Android is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using Android.Content;
using KeePassLib;
using KeePassLib.Keys;
namespace keepass2android
{
public class SetPassword : RunnableOnFinish {
private readonly String _password;
private readonly String _keyfile;
private readonly Database _db;
private readonly bool _dontSave;
private readonly Context _ctx;
public SetPassword(Context ctx, Database db, String password, String keyfile, OnFinish finish): base(finish) {
_ctx = ctx;
_db = db;
_password = password;
_keyfile = keyfile;
_dontSave = false;
}
public SetPassword(Context ctx, Database db, String password, String keyfile, OnFinish finish, bool dontSave): base(finish) {
_ctx = ctx;
_db = db;
_password = password;
_keyfile = keyfile;
_dontSave = dontSave;
}
public override void Run ()
{
PwDatabase pm = _db.KpDatabase;
CompositeKey newKey = new CompositeKey ();
if (String.IsNullOrEmpty (_password) == false) {
newKey.AddUserKey (new KcpPassword (_password));
}
if (String.IsNullOrEmpty (_keyfile) == false) {
try {
newKey.AddUserKey (new KcpKeyFile (_keyfile));
} catch (Exception) {
//TODO MessageService.ShowWarning (strKeyFile, KPRes.KeyFileError, exKF);
return;
}
}
DateTime previousMasterKeyChanged = pm.MasterKeyChanged;
CompositeKey previousKey = pm.MasterKey;
pm.MasterKeyChanged = DateTime.Now;
pm.MasterKey = newKey;
// Save Database
OnFinishToRun = new AfterSave(previousKey, previousMasterKeyChanged, pm, OnFinishToRun);
SaveDb save = new SaveDb(_ctx, _db, OnFinishToRun, _dontSave);
save.Run();
}
private class AfterSave : OnFinish {
private readonly CompositeKey _backup;
private readonly DateTime _previousKeyChanged;
private PwDatabase _db;
public AfterSave(CompositeKey backup, DateTime previousKeyChanged, PwDatabase db, OnFinish finish): base(finish) {
_previousKeyChanged = previousKeyChanged;
_backup = backup;
_db = db;
}
public override void Run() {
if ( ! Success ) {
_db.MasterKey = _backup;
_db.MasterKeyChanged = _previousKeyChanged;
}
base.Run();
}
}
}
}