refactoring, use less UrlUtil and more IFileStorage
This commit is contained in:
@@ -82,7 +82,12 @@ namespace keepass2android.Io
|
||||
UrlUtil.GetFileName(ioc.Path));
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return UrlUtil.GetExtension(ioc.Path);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -201,7 +201,12 @@ namespace keepass2android.Io
|
||||
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return UrlUtil.GetExtension(ioc.Path);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
{
|
||||
return (!ioc.IsLocalFile()) && (ioc.CredSaveMode != IOCredSaveMode.SaveCred);
|
||||
}
|
||||
|
||||
@@ -448,7 +448,12 @@ namespace keepass2android.Io
|
||||
return _cachedStorage.GetFilenameWithoutPathAndExt(ioc);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return _cachedStorage.GetFileExtension(ioc);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
{
|
||||
return _cachedStorage.RequiresCredentials(ioc);
|
||||
}
|
||||
|
||||
@@ -88,11 +88,13 @@ namespace keepass2android.Io
|
||||
IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction);
|
||||
|
||||
string GetFilenameWithoutPathAndExt(IOConnectionInfo ioc);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the the given ioc must be filled with username/password
|
||||
/// </summary>
|
||||
bool RequiresCredentials(IOConnectionInfo ioc);
|
||||
|
||||
string GetFileExtension(IOConnectionInfo ioc);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the the given ioc must be filled with username/password
|
||||
/// </summary>
|
||||
bool RequiresCredentials(IOConnectionInfo ioc);
|
||||
|
||||
/// <summary>
|
||||
/// Creates the directory described by ioc
|
||||
|
||||
@@ -128,10 +128,12 @@ namespace keepass2android.Io
|
||||
}
|
||||
|
||||
//creates a local ioc where the sourceIoc can be stored to
|
||||
public static IOConnectionInfo GetInternalIoc(IOConnectionInfo sourceIoc, Context ctx)
|
||||
public static IOConnectionInfo GetInternalIoc(IOConnectionInfo sourceIoc, Context ctx, IKp2aApp app)
|
||||
{
|
||||
Java.IO.File internalDirectory = IoUtil.GetInternalDirectory(ctx);
|
||||
string targetPath = UrlUtil.GetFileName(sourceIoc.Path);
|
||||
var filestorage = app.GetFileStorage(sourceIoc);
|
||||
|
||||
string targetPath = filestorage.GetFilenameWithoutPathAndExt(sourceIoc);
|
||||
targetPath = targetPath.Trim("|\\?*<\":>+[]/'".ToCharArray());
|
||||
if (targetPath == "")
|
||||
targetPath = "internal";
|
||||
@@ -153,7 +155,7 @@ namespace keepass2android.Io
|
||||
|
||||
public static IOConnectionInfo ImportFileToInternalDirectory(IOConnectionInfo sourceIoc, Context ctx, IKp2aApp app)
|
||||
{
|
||||
var targetIoc = GetInternalIoc(sourceIoc, ctx);
|
||||
var targetIoc = GetInternalIoc(sourceIoc, ctx, app);
|
||||
|
||||
|
||||
IoUtil.Copy(targetIoc, sourceIoc, app);
|
||||
|
||||
@@ -177,7 +177,12 @@ namespace keepass2android.Io
|
||||
_jfs.GetFilename(IocToPath(ioc)));
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return UrlUtil.GetExtension(ioc.Path);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -314,7 +314,12 @@ namespace keepass2android.Io
|
||||
UrlUtil.GetFileName(ioc.Path));
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return UrlUtil.GetExtension(ioc.Path);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,12 @@ namespace keepass2android.Io
|
||||
return _baseStorage.GetFilenameWithoutPathAndExt(ioc);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return _baseStorage.GetFileExtension(ioc);
|
||||
}
|
||||
|
||||
public bool RequiresCredentials(IOConnectionInfo ioc)
|
||||
{
|
||||
return _baseStorage.RequiresCredentials(ioc);
|
||||
}
|
||||
|
||||
@@ -491,6 +491,11 @@ namespace keepass2android.Io
|
||||
GetFilename(IocToPath(ioc)));
|
||||
}
|
||||
|
||||
public string GetFileExtension(IOConnectionInfo ioc)
|
||||
{
|
||||
return UrlUtil.GetExtension(OneDrive2ItemLocation.FromString(ioc.Path).LocalPathString);
|
||||
}
|
||||
|
||||
private string GetFilename(string path)
|
||||
{
|
||||
string localPath = "/"+OneDrive2ItemLocation.FromString(path).LocalPath;
|
||||
|
||||
@@ -25,9 +25,7 @@ using KeePass.Util.Spr;
|
||||
|
||||
using KeePassLib;
|
||||
using KeePassLib.Collections;
|
||||
using KeePassLib.Cryptography;
|
||||
using KeePassLib.Delegates;
|
||||
using KeePassLib.Security;
|
||||
using KeePassLib.Utility;
|
||||
|
||||
namespace KeePass.Util
|
||||
@@ -89,41 +87,8 @@ namespace KeePass.Util
|
||||
return str;
|
||||
}
|
||||
*/
|
||||
private static string ReplaceHmacOtpPlaceholder(string strText,
|
||||
SprContext ctx)
|
||||
{
|
||||
PwEntry pe = ctx.Entry;
|
||||
PwDatabase pd = ctx.Database;
|
||||
if((pe == null) || (pd == null)) return strText;
|
||||
|
||||
string str = strText;
|
||||
|
||||
const string strHmacOtpPlh = @"{HMACOTP}";
|
||||
if(str.IndexOf(strHmacOtpPlh, StrUtil.CaseIgnoreCmp) >= 0)
|
||||
{
|
||||
const string strKeyField = "HmacOtp-Secret";
|
||||
const string strCounterField = "HmacOtp-Counter";
|
||||
|
||||
byte[] pbSecret = StrUtil.Utf8.GetBytes(pe.Strings.ReadSafe(
|
||||
strKeyField));
|
||||
|
||||
string strCounter = pe.Strings.ReadSafe(strCounterField);
|
||||
ulong uCounter;
|
||||
ulong.TryParse(strCounter, out uCounter);
|
||||
|
||||
string strValue = HmacOtp.Generate(pbSecret, uCounter, 6, false, -1);
|
||||
|
||||
pe.Strings.Set(strCounterField, new ProtectedString(false,
|
||||
(uCounter + 1).ToString()));
|
||||
pd.Modified = true;
|
||||
|
||||
str = StrUtil.ReplaceCaseInsensitive(str, strHmacOtpPlh, strValue);
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
public static bool EntriesHaveSameParent(PwObjectList<PwEntry> v)
|
||||
public static bool EntriesHaveSameParent(PwObjectList<PwEntry> v)
|
||||
{
|
||||
if(v == null) { Debug.Assert(false); return true; }
|
||||
if(v.UCount == 0) return true;
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace keepass2android
|
||||
_key = new CompositeKey(); //use a temporary key which should be changed after creation
|
||||
}
|
||||
|
||||
db.KpDatabase.New(_ioc, _key);
|
||||
db.KpDatabase.New(_ioc, _key, _app.GetFileStorage(_ioc).GetFilenameWithoutPathAndExt(_ioc));
|
||||
|
||||
db.KpDatabase.KdfParameters = (new AesKdf()).GetDefaultParameters();
|
||||
db.KpDatabase.Name = "Keepass2Android Password Database";
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace keepass2android
|
||||
}
|
||||
|
||||
//ok, try to load the database. Let's start with Kdbx format and retry later if that is the wrong guess:
|
||||
_format = new KdbxDatabaseFormat(KdbpFile.GetFormatToUse(_ioc));
|
||||
_format = new KdbxDatabaseFormat(KdbpFile.GetFormatToUse(_app.GetFileStorage(_ioc).GetFileExtension(_ioc)));
|
||||
TryLoad(databaseStream);
|
||||
|
||||
|
||||
|
||||
@@ -230,7 +230,7 @@ namespace keepass2android
|
||||
|
||||
PwDatabase pwImp = new PwDatabase();
|
||||
PwDatabase pwDatabase = _db.KpDatabase;
|
||||
pwImp.New(new IOConnectionInfo(), pwDatabase.MasterKey);
|
||||
pwImp.New(new IOConnectionInfo(), pwDatabase.MasterKey, _app.GetFileStorage(ioc).GetFilenameWithoutPathAndExt(ioc));
|
||||
pwImp.MemoryProtection = pwDatabase.MemoryProtection.CloneDeep();
|
||||
pwImp.MasterKey = pwDatabase.MasterKey;
|
||||
var stream = GetStreamForBaseFile(fileStorage, ioc);
|
||||
|
||||
Reference in New Issue
Block a user