本文整理汇总了C#中PwEntry.Touch方法的典型用法代码示例。如果您正苦于以下问题:C# PwEntry.Touch方法的具体用法?C# PwEntry.Touch怎么用?C# PwEntry.Touch使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PwEntry
的用法示例。
在下文中一共展示了PwEntry.Touch方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Copy
public static bool Copy(ProtectedString psToCopy, bool bIsEntryInfo,
PwEntry peEntryInfo, PwDatabase pwReferenceSource)
{
Debug.Assert(psToCopy != null);
if(psToCopy == null) throw new ArgumentNullException("psToCopy");
if(bIsEntryInfo && !AppPolicy.Try(AppPolicyId.CopyToClipboard))
return false;
string strData = SprEngine.Compile(psToCopy.ReadString(), false,
peEntryInfo, pwReferenceSource, false, false);
try
{
ClipboardUtil.Clear();
DataObject doData = CreateProtectedDataObject(strData);
Clipboard.SetDataObject(doData);
m_pbDataHash32 = HashClipboard();
m_strFormat = null;
RaiseCopyEvent(bIsEntryInfo, strData);
}
catch(Exception) { Debug.Assert(false); return false; }
if(peEntryInfo != null) peEntryInfo.Touch(false);
// SprEngine.Compile might have modified the database
Program.MainForm.UpdateUI(false, null, false, null, false, null, false);
return true;
}
示例2: ExpireTanEntryIfOption
/// <summary>
/// Test whether an entry is a TAN entry and if so, expire it, provided
/// that the option for expiring TANs on use is enabled.
/// </summary>
/// <param name="pe">Entry.</param>
/// <returns>If the entry has been modified, the return value is
/// <c>true</c>, otherwise <c>false</c>.</returns>
public static bool ExpireTanEntryIfOption(PwEntry pe, PwDatabase pdContext)
{
if(pe == null) throw new ArgumentNullException("pe");
// pdContext may be null
if(!PwDefs.IsTanEntry(pe)) return false; // No assert
if(Program.Config.Defaults.TanExpiresOnUse)
{
pe.ExpiryTime = DateTime.Now;
pe.Expires = true;
pe.Touch(true);
if(pdContext != null) pdContext.Modified = true;
return true;
}
return false;
}
示例3: RenamePwdProxyNodesTest
public void RenamePwdProxyNodesTest()
{
m_treeManager.Initialize(m_database);
PwEntry pwd1 = new PwEntry( true, true );
pwd1.Strings.Set(KeeShare.KeeShare.TitleField, new ProtectedString( false, "pwd1" ) );
m_database.RootGroup.AddEntry( pwd1, true );
pwd1.Touch( true );
DateTime lastTouch = pwd1.LastModificationTime;
PwEntry pwdProxy = PwNode.CreateProxyNode( pwd1 );
m_database.GetGroupsGroup().AddEntry( pwdProxy, true );
pwdProxy.LastModificationTime = lastTouch.AddTicks( 10 );
m_treeManager.CorrectStructure( );
Assert.AreEqual( 2, NumberOfEntriesIn( m_database ) );
string pwdId = m_database.RootGroup.Entries.GetAt( 0 ).Uuid.ToHexString();
pwdProxy = m_database.GetGroupsGroup().Entries.GetAt(0);
Assert.AreEqual( pwdId, pwdProxy.Strings.ReadSafe(KeeShare.KeeShare.UuidLinkField));
pwdProxy.Strings.Set(KeeShare.KeeShare.TitleField, new ProtectedString( false, "new Title" ) );
pwdProxy.LastModificationTime = lastTouch.AddTicks( 23 );
m_treeManager.CorrectStructure( );
Assert.AreEqual( "new Title", m_database.RootGroup.Entries.GetAt( 0 ).Strings.ReadSafe(KeeShare.KeeShare.TitleField) );
}
示例4: downloadOneFavicon
/// <summary>
/// Downloads one favicon and attaches it to the entry
/// </summary>
/// <param name="pwe">The entry for which we want to download the favicon</param>
private void downloadOneFavicon(PwEntry pwe, ref string message)
{
// TODO: create async jobs instead?
string url = pwe.Strings.ReadSafe("URL");
// If we have no URL, quit
if (string.IsNullOrEmpty(url))
return;
// If we have a URL with specific scheme that is not http or https, quit
if (!url.StartsWith("http://") && !url.StartsWith("https://")
&& url.Contains("://"))
return;
int dotIndex = url.IndexOf(".");
if (dotIndex >= 0)
{
string protocol = "http";
string fullURL = url;
// trim any path data
int slashDotIndex = url.IndexOf("/", dotIndex);
if (slashDotIndex >= 0)
url = url.Substring(0, slashDotIndex);
// If there is a protocol/scheme prepended to the URL, strip it off.
int protocolEndIndex = url.LastIndexOf("/");
if (protocolEndIndex >= 0)
{
protocol = url.Substring(0,protocolEndIndex-2);
url = url.Substring(protocolEndIndex + 1);
}
MemoryStream ms = null;
bool success = getFromFaviconExplicitLocation(url, protocol, fullURL, ref ms, ref message);
if (!success)
success = getFromFaviconStandardLocation(url, protocol, ref ms, ref message);
if (!success)
return;
// If we found an icon then we don't care whether one particular download method failed.
message = "";
byte[] msByteArray = ms.ToArray();
foreach (PwCustomIcon item in m_host.Database.CustomIcons)
{
// re-use existing custom icon if it's already in the database
// (This will probably fail if database is used on
// both 32 bit and 64 bit machines - not sure why...)
if (KeePassLib.Utility.MemUtil.ArraysEqual(msByteArray, item.ImageDataPng))
{
pwe.CustomIconUuid = item.Uuid;
pwe.Touch(true);
m_host.Database.UINeedsIconUpdate = true;
return;
}
}
// Create a new custom icon for use with this entry
PwCustomIcon pwci = new PwCustomIcon(new PwUuid(true),
ms.ToArray());
m_host.Database.CustomIcons.Add(pwci);
pwe.CustomIconUuid = pwci.Uuid;
pwe.Touch(true);
m_host.Database.UINeedsIconUpdate = true;
}
}
示例5: SetEntryConfig
private void SetEntryConfig(PwEntry e, KeePassHttpEntryConfig c)
{
var serializer = NewJsonSerializer();
var writer = new StringWriter();
serializer.Serialize(writer, c);
e.Strings.Set(KEEPASSHTTP_NAME, new ProtectedString(false, writer.ToString()));
e.Touch(true);
UpdateUI(e.ParentGroup);
}
示例6: SimulateTouch
public static void SimulateTouch(PwEntry entry)
{
DelayAction();
entry.Touch(true, false);
//entry.LastModificationTime = entry.LastModificationTime.AddMilliseconds(23);
}
示例7: SaveEntry
private bool SaveEntry(PwEntry peTarget, bool bValidate)
{
if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return true;
if(bValidate && !m_icgPassword.ValidateData(true)) return false;
if(this.EntrySaving != null)
{
CancellableOperationEventArgs eaCancel = new CancellableOperationEventArgs();
this.EntrySaving(this, eaCancel);
if(eaCancel.Cancel) return false;
}
peTarget.History = m_vHistory; // Must be called before CreateBackup()
bool bCreateBackup = (m_pwEditMode != PwEditMode.AddNewEntry);
if(bCreateBackup) peTarget.CreateBackup(null);
peTarget.IconId = m_pwEntryIcon;
peTarget.CustomIconUuid = m_pwCustomIconID;
if(m_cbCustomForegroundColor.Checked)
peTarget.ForegroundColor = m_clrForeground;
else peTarget.ForegroundColor = Color.Empty;
if(m_cbCustomBackgroundColor.Checked)
peTarget.BackgroundColor = m_clrBackground;
else peTarget.BackgroundColor = Color.Empty;
peTarget.OverrideUrl = m_cmbOverrideUrl.Text;
List<string> vNewTags = StrUtil.StringToTags(m_tbTags.Text);
peTarget.Tags.Clear();
foreach(string strTag in vNewTags) peTarget.AddTag(strTag);
peTarget.Expires = m_cgExpiry.Checked;
if(peTarget.Expires) peTarget.ExpiryTime = m_cgExpiry.Value;
UpdateEntryStrings(true, false, false);
peTarget.Strings = m_vStrings;
peTarget.Binaries = m_vBinaries;
m_atConfig.Enabled = m_cbAutoTypeEnabled.Checked;
m_atConfig.ObfuscationOptions = (m_cbAutoTypeObfuscation.Checked ?
AutoTypeObfuscationOptions.UseClipboard :
AutoTypeObfuscationOptions.None);
SaveDefaultSeq();
peTarget.AutoType = m_atConfig;
peTarget.Touch(true, false); // Touch *after* backup
if(object.ReferenceEquals(peTarget, m_pwEntry)) m_bTouchedOnce = true;
StrUtil.NormalizeNewLines(peTarget.Strings, true);
bool bUndoBackup = false;
PwCompareOptions cmpOpt = m_cmpOpt;
if(bCreateBackup) cmpOpt |= PwCompareOptions.IgnoreLastBackup;
if(peTarget.EqualsEntry(m_pwInitialEntry, cmpOpt, MemProtCmpMode.CustomOnly))
{
// No modifications at all => restore last mod time and undo backup
peTarget.LastModificationTime = m_pwInitialEntry.LastModificationTime;
bUndoBackup = bCreateBackup;
}
else if(bCreateBackup)
{
// If only history items have been modified (deleted) => undo
// backup, but without restoring the last mod time
PwCompareOptions cmpOptNH = (m_cmpOpt | PwCompareOptions.IgnoreHistory);
if(peTarget.EqualsEntry(m_pwInitialEntry, cmpOptNH, MemProtCmpMode.CustomOnly))
bUndoBackup = true;
}
if(bUndoBackup) peTarget.History.RemoveAt(peTarget.History.UCount - 1);
peTarget.MaintainBackups(m_pwDatabase);
if(this.EntrySaved != null) this.EntrySaved(this, EventArgs.Empty);
return true;
}
示例8: Copy
public static bool Copy(string strToCopy, bool bSprCompile, bool bIsEntryInfo,
PwEntry peEntryInfo, PwDatabase pwReferenceSource, IntPtr hOwner)
{
if(strToCopy == null) throw new ArgumentNullException("strToCopy");
if(bIsEntryInfo && !AppPolicy.Try(AppPolicyId.CopyToClipboard))
return false;
string strData = (bSprCompile ? SprEngine.Compile(strToCopy,
new SprContext(peEntryInfo, pwReferenceSource,
SprCompileFlags.All)) : strToCopy);
try
{
if(!KeeNativeLib.NativeLib.IsUnix()) // Windows
{
if(!OpenW(hOwner, true))
throw new InvalidOperationException();
bool bFailed = false;
if(!AttachIgnoreFormatW()) bFailed = true;
if(!SetDataW(null, strData, null)) bFailed = true;
CloseW();
if(bFailed) return false;
}
else if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
SetStringM(strData);
else if(KeeNativeLib.NativeLib.IsUnix())
SetStringU(strData);
// else // Managed
// {
// Clear();
// DataObject doData = CreateProtectedDataObject(strData);
// Clipboard.SetDataObject(doData);
// }
}
catch(Exception) { Debug.Assert(false); return false; }
m_strFormat = null;
byte[] pbUtf8 = StrUtil.Utf8.GetBytes(strData);
SHA256Managed sha256 = new SHA256Managed();
m_pbDataHash32 = sha256.ComputeHash(pbUtf8);
RaiseCopyEvent(bIsEntryInfo, strData);
if(peEntryInfo != null) peEntryInfo.Touch(false);
// SprEngine.Compile might have modified the database
Program.MainForm.UpdateUI(false, null, false, null, false, null, false);
return true;
}
示例9: MergeEntries
private void MergeEntries(PwEntry destination, PwEntry source, int urlMergeMode, PwDatabase db)
{
EntryConfig destConfig;
string destJSON = KeePassRPCPlugin.GetPwEntryString(destination, "KPRPC JSON", db);
if (string.IsNullOrEmpty(destJSON))
{
destConfig = new EntryConfig();
}
else
{
try
{
destConfig = (EntryConfig)Jayrock.Json.Conversion.JsonConvert.Import(typeof(EntryConfig), destJSON);
}
catch (Exception)
{
MessageBox.Show("There are configuration errors in this entry. To fix the entry and prevent this warning message appearing, please edit the value of the 'KeePassRPC JSON config' advanced string. Please ask for help on http://keefox.org/help/forum if you're not sure how to fix this. The URL of the entry is: " + destination.Strings.ReadSafe("URL") + " and the full configuration data is: " + destJSON, "Warning: Configuration errors", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
EntryConfig sourceConfig;
string sourceJSON = KeePassRPCPlugin.GetPwEntryString(source, "KPRPC JSON", db);
if (string.IsNullOrEmpty(sourceJSON))
{
sourceConfig = new EntryConfig();
}
else
{
try
{
sourceConfig = (EntryConfig)Jayrock.Json.Conversion.JsonConvert.Import(typeof(EntryConfig), sourceJSON);
}
catch (Exception)
{
MessageBox.Show("There are configuration errors in this entry. To fix the entry and prevent this warning message appearing, please edit the value of the 'KeePassRPC JSON config' advanced string. Please ask for help on http://keefox.org/help/forum if you're not sure how to fix this. The URL of the entry is: " + source.Strings.ReadSafe("URL") + " and the full configuration data is: " + sourceJSON, "Warning: Configuration errors", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
destination.CreateBackup(db);
destConfig.HTTPRealm = sourceConfig.HTTPRealm;
destination.IconId = source.IconId;
destination.CustomIconUuid = source.CustomIconUuid;
destination.Strings.Set("UserName", new ProtectedString(
host.Database.MemoryProtection.ProtectUserName, source.Strings.ReadSafe("UserName")));
destination.Strings.Set("Password", new ProtectedString(
host.Database.MemoryProtection.ProtectPassword, source.Strings.ReadSafe("Password")));
destConfig.FormFieldList = sourceConfig.FormFieldList;
// This algorithm could probably be made more efficient (lots of O(n) operations
// but we're dealing with pretty small n so I've gone with the conceptually
// easiest approach for now).
List<string> destURLs = new List<string>();
destURLs.Add(destination.Strings.ReadSafe("URL"));
if (destConfig.AltURLs != null)
destURLs.AddRange(destConfig.AltURLs);
List<string> sourceURLs = new List<string>();
sourceURLs.Add(source.Strings.ReadSafe("URL"));
if (sourceConfig.AltURLs != null)
sourceURLs.AddRange(sourceConfig.AltURLs);
switch (urlMergeMode)
{
case 1:
MergeInNewURLs(destURLs, sourceURLs);
break;
case 2:
destURLs.RemoveAt(0);
MergeInNewURLs(destURLs, sourceURLs);
break;
case 3:
if (sourceURLs.Count > 0)
{
foreach (string sourceUrl in sourceURLs)
if (!destURLs.Contains(sourceUrl))
destURLs.Add(sourceUrl);
}
break;
case 4:
default:
// No changes to URLs
break;
}
// These might not have changed but meh
destination.Strings.Set("URL", new ProtectedString(host.Database.MemoryProtection.ProtectUrl, destURLs[0]));
destConfig.AltURLs = new string[0];
if (destURLs.Count > 1)
destConfig.AltURLs = destURLs.GetRange(1,destURLs.Count-1).ToArray();
destination.Strings.Set("KPRPC JSON", new ProtectedString(true, Jayrock.Json.Conversion.JsonConvert.ExportToString(destConfig)));
destination.Touch(true);
}
示例10: MergeEntries
private void MergeEntries(PwEntry destination, PwEntry source, int urlMergeMode, PwDatabase db)
{
EntryConfig destConfig = destination.GetKPRPCConfig();
if (destConfig == null)
return;
EntryConfig sourceConfig = source.GetKPRPCConfig();
if (sourceConfig == null)
return;
destination.CreateBackup(db);
destConfig.HTTPRealm = sourceConfig.HTTPRealm;
destination.IconId = source.IconId;
destination.CustomIconUuid = source.CustomIconUuid;
destination.Strings.Set("UserName", new ProtectedString(
host.Database.MemoryProtection.ProtectUserName, source.Strings.ReadSafe("UserName")));
destination.Strings.Set("Password", new ProtectedString(
host.Database.MemoryProtection.ProtectPassword, source.Strings.ReadSafe("Password")));
destConfig.FormFieldList = sourceConfig.FormFieldList;
// This algorithm could probably be made more efficient (lots of O(n) operations
// but we're dealing with pretty small n so I've gone with the conceptually
// easiest approach for now).
List<string> destURLs = new List<string>();
destURLs.Add(destination.Strings.ReadSafe("URL"));
if (destConfig.AltURLs != null)
destURLs.AddRange(destConfig.AltURLs);
List<string> sourceURLs = new List<string>();
sourceURLs.Add(source.Strings.ReadSafe("URL"));
if (sourceConfig.AltURLs != null)
sourceURLs.AddRange(sourceConfig.AltURLs);
switch (urlMergeMode)
{
case 1:
MergeInNewURLs(destURLs, sourceURLs);
break;
case 2:
destURLs.RemoveAt(0);
MergeInNewURLs(destURLs, sourceURLs);
break;
case 3:
if (sourceURLs.Count > 0)
{
foreach (string sourceUrl in sourceURLs)
if (!destURLs.Contains(sourceUrl))
destURLs.Add(sourceUrl);
}
break;
case 4:
default:
// No changes to URLs
break;
}
// These might not have changed but meh
destination.Strings.Set("URL", new ProtectedString(host.Database.MemoryProtection.ProtectUrl, destURLs[0]));
destConfig.AltURLs = new string[0];
if (destURLs.Count > 1)
destConfig.AltURLs = destURLs.GetRange(1,destURLs.Count-1).ToArray();
destination.SetKPRPCConfig(destConfig);
destination.Touch(true);
}
示例11: TotpCopyToClipboard
/// <summary>
/// Copies the specified entry's generated TOTP to the clipboard using the KeePass's clipboard function.
/// </summary>
/// <param name="pe">Password Entry.</param>
private void TotpCopyToClipboard(PwEntry pe)
{
if (SettingsCheck(pe) && SeedCheck(pe))
{
bool ValidInterval; bool ValidLength; bool ValidUrl;
if (SettingsValidate(pe, out ValidInterval, out ValidLength, out ValidUrl))
{
bool NoTimeCorrection = false;
string[] Settings = SettingsGet(pe);
var TotpGenerator = new Totp_Provider(Convert.ToInt16(Settings[0]), Convert.ToInt16(Settings[1]));
if (ValidUrl)
{
var CurrentTimeCorrection = TimeCorrections[Settings[2]];
if (CurrentTimeCorrection != null)
{
TotpGenerator.TimeCorrection = CurrentTimeCorrection.TimeCorrection;
}
else
{
TotpGenerator.TimeCorrection = TimeSpan.Zero;
NoTimeCorrection = true;
}
}
string InvalidCharacters;
if (SeedValidate(pe, out InvalidCharacters))
{
pe.Touch(false);
ClipboardUtil.CopyAndMinimize(TotpGenerator.Generate(Base32.Decode(SeedGet(pe).ReadString().ExtWithoutSpaces())), true, m_host.MainWindow, pe, m_host.MainWindow.ActiveDatabase);
m_host.MainWindow.StartClipboardCountdown();
}
else
{
MessageService.ShowWarning(TrayTotp_Plugin_Localization.strWarningBadSeed + InvalidCharacters.ExtWithParenthesis().ExtWithSpaceBefore());
}
if (NoTimeCorrection) MessageService.ShowWarning(TrayTotp_Plugin_Localization.strWarningBadUrl);
}
else
{
MessageService.ShowWarning(TrayTotp_Plugin_Localization.strWarningBadSet);
}
}
else
{
MessageService.ShowWarning(TrayTotp_Plugin_Localization.strWarningNotSet);
}
}
示例12: OnCreate
protected override void OnCreate(Bundle savedInstanceState)
{
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
long usageCount = prefs.GetLong(GetString(Resource.String.UsageCount_key), 0);
ISharedPreferencesEditor edit = prefs.Edit();
edit.PutLong(GetString(Resource.String.UsageCount_key), usageCount + 1);
edit.Commit();
_showPassword =
!prefs.GetBoolean(GetString(Resource.String.maskpass_key), Resources.GetBoolean(Resource.Boolean.maskpass_default));
base.OnCreate(savedInstanceState);
RequestWindowFeature(WindowFeatures.IndeterminateProgress);
new ActivityDesign(this).ApplyTheme();
SetEntryView();
Database db = App.Kp2a.GetDb();
// Likely the app has been killed exit the activity
if (!db.Loaded || (App.Kp2a.QuickLocked))
{
Finish();
return;
}
SetResult(KeePass.ExitNormal);
Intent i = Intent;
PwUuid uuid = new PwUuid(MemUtil.HexStringToByteArray(i.GetStringExtra(KeyEntry)));
_pos = i.GetIntExtra(KeyRefreshPos, -1);
_appTask = AppTask.GetTaskInOnCreate(savedInstanceState, Intent);
Entry = db.Entries[uuid];
Android.Util.Log.Debug("KP2A", "Notes: " + Entry.Strings.ReadSafe(PwDefs.NotesField));
// Refresh Menu contents in case onCreateMenuOptions was called before Entry was set
ActivityCompat.InvalidateOptionsMenu(this);
// Update last access time.
Entry.Touch(false);
if (PwDefs.IsTanEntry(Entry) && prefs.GetBoolean(GetString(Resource.String.TanExpiresOnUse_key), Resources.GetBoolean(Resource.Boolean.TanExpiresOnUse_default)) && ((Entry.Expires == false) || Entry.ExpiryTime > DateTime.Now))
{
PwEntry backupEntry = Entry.CloneDeep();
Entry.ExpiryTime = DateTime.Now;
Entry.Expires = true;
Entry.Touch(true);
RequiresRefresh();
UpdateEntry update = new UpdateEntry(this, App.Kp2a, backupEntry, Entry, null);
ProgressTask pt = new ProgressTask(App.Kp2a, this, update);
pt.Run();
}
FillData();
SetupEditButtons();
SetupMoveButtons ();
App.Kp2a.GetDb().LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.GetDb().KpDatabase);
_pluginActionReceiver = new PluginActionReceiver(this);
RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction));
_pluginFieldReceiver = new PluginFieldReceiver(this);
RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField));
new Thread(NotifyPluginsOnOpen).Start();
//the rest of the things to do depends on the current app task:
_appTask.CompleteOnCreateEntryActivity(this);
}
示例13: Execute
private static bool Execute(string strSeq, PwEntry pweData)
{
Debug.Assert(strSeq != null); if(strSeq == null) return false;
Debug.Assert(pweData != null); if(pweData == null) return false;
if(!pweData.GetAutoTypeEnabled()) return false;
if(!AppPolicy.Try(AppPolicyId.AutoType)) return false;
if(KeePassLib.Native.NativeLib.IsUnix())
{
if(!NativeMethods.TryXDoTool())
{
MessageService.ShowWarning(KPRes.AutoTypeXDoToolRequired,
KPRes.PackageInstallHint);
return false;
}
}
PwDatabase pwDatabase = null;
try { pwDatabase = Program.MainForm.PluginHost.Database; }
catch(Exception) { }
bool bObfuscate = (pweData.AutoType.ObfuscationOptions !=
AutoTypeObfuscationOptions.None);
AutoTypeEventArgs args = new AutoTypeEventArgs(strSeq, bObfuscate, pweData);
if(AutoType.FilterCompilePre != null) AutoType.FilterCompilePre(null, args);
args.Sequence = SprEngine.Compile(args.Sequence, true, pweData,
pwDatabase, true, false);
string strError = ValidateAutoTypeSequence(args.Sequence);
if(strError != null)
{
MessageService.ShowWarning(strError);
return false;
}
Application.DoEvents();
if(AutoType.FilterSendPre != null) AutoType.FilterSendPre(null, args);
if(AutoType.FilterSend != null) AutoType.FilterSend(null, args);
if(args.Sequence.Length > 0)
{
try { SendInputEx.SendKeysWait(args.Sequence, args.SendObfuscated); }
catch(Exception excpAT)
{
MessageService.ShowWarning(excpAT);
}
}
pweData.Touch(false);
if(EntryUtil.ExpireTanEntryIfOption(pweData))
Program.MainForm.RefreshEntriesList();
// SprEngine.Compile might have modified the database;
// pd.Modified is set by SprEngine
Program.MainForm.UpdateUI(false, null, false, null, false, null, false);
return true;
}
示例14: downloadOneFavicon
/// <summary>
/// Downloads one favicon and attaches it to the entry
/// </summary>
/// <param name="pwe">The entry for which we want to download the favicon</param>
private void downloadOneFavicon(PwEntry pwe, ref string message)
{
// TODO: create async jobs instead?
string url = pwe.Strings.ReadSafe("URL");
if (string.IsNullOrEmpty(url))
url = pwe.Strings.ReadSafe("Title");
// If we still have no URL, quit
if (string.IsNullOrEmpty(url))
return;
// If we have a URL with specific scheme that is not http or https, quit
if (!url.StartsWith("http://") && !url.StartsWith("https://")
&& url.Contains("://"))
return;
int dotIndex = url.IndexOf(".");
if (dotIndex >= 0)
{
Uri fullURI = null;
try {
fullURI = new Uri((url.StartsWith("http://")||url.StartsWith("https://"))?url:"http://"+url,UriKind.Absolute);
}
catch (Exception ex)
{
message += url + "\n" + ex.Message;
return;
}
MemoryStream ms = null;
Uri lastURI = getFromFaviconExplicitLocation(fullURI, ref ms, ref message);
bool success = (lastURI != null) && lastURI.OriginalString.Equals("http://success");
if (!success)
{
success = getFavicon(new Uri((lastURI==null)?fullURI:lastURI,"/favicon.ico"), ref ms, ref message);
}
if (!success)
return;
// If we found an icon then we don't care whether one particular download method failed.
message = "";
byte[] msByteArray = ms.ToArray();
foreach (PwCustomIcon item in m_host.Database.CustomIcons)
{
// re-use existing custom icon if it's already in the database
// (This will probably fail if database is used on
// both 32 bit and 64 bit machines - not sure why...)
if (KeePassLib.Utility.MemUtil.ArraysEqual(msByteArray, item.ImageDataPng))
{
pwe.CustomIconUuid = item.Uuid;
pwe.Touch(true);
m_host.Database.UINeedsIconUpdate = true;
return;
}
}
// Create a new custom icon for use with this entry
PwCustomIcon pwci = new PwCustomIcon(new PwUuid(true),
ms.ToArray());
m_host.Database.CustomIcons.Add(pwci);
pwe.CustomIconUuid = pwci.Uuid;
pwe.Touch(true);
m_host.Database.UINeedsIconUpdate = true;
}
}
示例15: ExpireTanEntry
public static void ExpireTanEntry(PwEntry pe)
{
if(pe == null) throw new ArgumentNullException("pe");
Debug.Assert(PwDefs.IsTanEntry(pe));
if(Program.Config.Defaults.TanExpiresOnUse)
{
pe.ExpiryTime = DateTime.Now;
pe.Expires = true;
pe.Touch(true);
}
}