private void OnCtxToolsPasteTriggers(object sender, EventArgs e)
        {
            try
            {
                string strData = ClipboardUtil.GetText();

                byte[]               pbData = StrUtil.Utf8.GetBytes(strData);
                MemoryStream         ms     = new MemoryStream(pbData, false);
                EcasTriggerContainer c      = XmlUtilEx.Deserialize <EcasTriggerContainer>(ms);
                ms.Close();

                foreach (EcasTrigger t in c.Triggers)
                {
                    if (m_triggers.FindObjectByUuid(t.Uuid) != null)
                    {
                        t.Uuid = new PwUuid(true);
                    }

                    m_triggers.TriggerCollection.Add(t);
                }
            }
            catch (Exception ex) { MessageService.ShowWarning(ex); }

            UpdateTriggerListEx(true);
        }
Example #2
0
        private void OnAutoTypeFilterCompilePre(object sender, AutoTypeEventArgs autoTypeEventArgs)
        {
            Regex replacer = new Regex(Regex.Escape(mPlaceholder), RegexOptions.IgnoreCase);

            autoTypeEventArgs.Sequence = replacer.Replace(autoTypeEventArgs.Sequence, match =>
            {
                var clip = ClipboardUtil.GetText();
                return(BracketReplace(clip));
            });
        }
Example #3
0
        private static string GuiRetrieveDataField()
        {
            ClipboardUtil.Clear();
            Application.DoEvents();

            GuiSendKeysPrc(@"^c");

            try
            {
                if (ClipboardUtil.ContainsText())
                {
                    return(ClipboardUtil.GetText() ?? string.Empty);
                }
            }
            catch (Exception) { Debug.Assert(false); }            // Opened by other process

            return(string.Empty);
        }
Example #4
0
        private static string CompileInternal(string strText, SprContext ctx,
                                              uint uRecursionLevel)
        {
            if (strText == null)
            {
                Debug.Assert(false); return(string.Empty);
            }
            if (ctx == null)
            {
                Debug.Assert(false); ctx = new SprContext();
            }

            if (uRecursionLevel >= SprEngine.MaxRecursionDepth)
            {
                Debug.Assert(false);                 // Most likely a recursive reference
                return(string.Empty);                // Do not return strText (endless loop)
            }

            string   str = strText;
            MainForm mf  = Program.MainForm;

            bool bExt = ((ctx.Flags & (SprCompileFlags.ExtActive |
                                       SprCompileFlags.ExtNonActive)) != SprCompileFlags.None);

            if (bExt && (SprEngine.FilterCompilePre != null))
            {
                SprEventArgs args = new SprEventArgs(str, ctx.Clone());
                SprEngine.FilterCompilePre(null, args);
                str = args.Text;
            }

            if ((ctx.Flags & SprCompileFlags.Comments) != SprCompileFlags.None)
            {
                str = RemoveComments(str);
            }

            // The following realizes {T-CONV:/Text/Raw/}, which should be
            // one of the first transformations (except comments)
            if ((ctx.Flags & SprCompileFlags.TextTransforms) != SprCompileFlags.None)
            {
                str = PerformTextTransforms(str, ctx, uRecursionLevel);
            }

            if ((ctx.Flags & SprCompileFlags.Run) != SprCompileFlags.None)
            {
                str = RunCommands(str, ctx, uRecursionLevel);
            }

            if ((ctx.Flags & SprCompileFlags.DataActive) != SprCompileFlags.None)
            {
                str = PerformClipboardCopy(str, ctx, uRecursionLevel);
            }

            if (((ctx.Flags & SprCompileFlags.DataNonActive) != SprCompileFlags.None) &&
                (str.IndexOf(@"{CLIPBOARD}", SprEngine.ScMethod) >= 0))
            {
                string strCb = null;
                try { strCb = ClipboardUtil.GetText(); }
                catch (Exception) { Debug.Assert(false); }
                str = Fill(str, @"{CLIPBOARD}", strCb ?? string.Empty, ctx, null);
            }

            if ((ctx.Flags & SprCompileFlags.AppPaths) != SprCompileFlags.None)
            {
                str = AppLocator.FillPlaceholders(str, ctx);
            }

            if (ctx.Entry != null)
            {
                if ((ctx.Flags & SprCompileFlags.PickChars) != SprCompileFlags.None)
                {
                    str = ReplacePickPw(str, ctx, uRecursionLevel);
                }

                if ((ctx.Flags & SprCompileFlags.EntryStrings) != SprCompileFlags.None)
                {
                    str = FillEntryStrings(str, ctx, uRecursionLevel);
                }

                if ((ctx.Flags & SprCompileFlags.EntryStringsSpecial) != SprCompileFlags.None)
                {
                    str = FillEntryStringsSpecial(str, ctx, uRecursionLevel);
                }

                if (((ctx.Flags & SprCompileFlags.EntryProperties) != SprCompileFlags.None) &&
                    (str.IndexOf(@"{UUID}", SprEngine.ScMethod) >= 0))
                {
                    str = Fill(str, @"{UUID}", ctx.Entry.Uuid.ToHexString(), ctx, null);
                }

                if (((ctx.Flags & SprCompileFlags.PasswordEnc) != SprCompileFlags.None) &&
                    (str.IndexOf(@"{PASSWORD_ENC}", SprEngine.ScMethod) >= 0))
                {
                    string strPwCmp = SprEngine.CompileInternal(@"{PASSWORD}",
                                                                ctx.WithoutContentTransformations(), uRecursionLevel + 1);
                    str = Fill(str, @"{PASSWORD_ENC}", StrUtil.EncryptString(
                                   strPwCmp), ctx, null);
                }

                PwGroup pg = ctx.Entry.ParentGroup;
                if (((ctx.Flags & SprCompileFlags.Group) != SprCompileFlags.None) &&
                    (pg != null))
                {
                    str = FillGroupPlh(str, @"{GROUP", pg, ctx, uRecursionLevel);
                }
            }

            if ((ctx.Flags & SprCompileFlags.Paths) != SprCompileFlags.None)
            {
                if (mf != null)
                {
                    PwGroup pgSel = mf.GetSelectedGroup();
                    if (pgSel != null)
                    {
                        str = FillGroupPlh(str, @"{GROUP_SEL", pgSel, ctx, uRecursionLevel);
                    }
                }

                str = Fill(str, @"{APPDIR}", UrlUtil.GetFileDirectory(
                               WinUtil.GetExecutable(), false, false), ctx, uRecursionLevel);

                str = Fill(str, @"{ENV_DIRSEP}", Path.DirectorySeparatorChar.ToString(),
                           ctx, null);

                string strPF86 = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
                if (string.IsNullOrEmpty(strPF86))
                {
                    strPF86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
                }
                if (strPF86 != null)
                {
                    str = Fill(str, @"{ENV_PROGRAMFILES_X86}", strPF86, ctx, uRecursionLevel);
                }
                else
                {
                    Debug.Assert(false);
                }

                if (ctx.Database != null)
                {
                    string strPath = ctx.Database.IOConnectionInfo.Path;
                    string strDir  = UrlUtil.GetFileDirectory(strPath, false, false);
                    string strName = UrlUtil.GetFileName(strPath);

                    // For backward compatibility only
                    str = Fill(str, @"{DOCDIR}", strDir, ctx, uRecursionLevel);

                    str = Fill(str, @"{DB_PATH}", strPath, ctx, uRecursionLevel);
                    str = Fill(str, @"{DB_DIR}", strDir, ctx, uRecursionLevel);
                    str = Fill(str, @"{DB_NAME}", strName, ctx, uRecursionLevel);
                    str = Fill(str, @"{DB_BASENAME}", UrlUtil.StripExtension(
                                   strName), ctx, uRecursionLevel);
                    str = Fill(str, @"{DB_EXT}", UrlUtil.GetExtension(
                                   strPath), ctx, uRecursionLevel);
                }
            }

            if ((ctx.Flags & SprCompileFlags.AutoType) != SprCompileFlags.None)
            {
                // Use Bksp instead of Del (in order to avoid Ctrl+Alt+Del);
                // https://sourceforge.net/p/keepass/discussion/329220/thread/4f1aa6b8/
                str = StrUtil.ReplaceCaseInsensitive(str, @"{CLEARFIELD}",
                                                     @"{HOME}+({END}){BKSP}{DELAY 50}");
            }

            if (((ctx.Flags & SprCompileFlags.DateTime) != SprCompileFlags.None) &&
                (str.IndexOf(@"{DT_", SprEngine.ScMethod) >= 0))
            {
                DateTime dtNow = DateTime.UtcNow;
                str = Fill(str, @"{DT_UTC_YEAR}", dtNow.Year.ToString("D4"),
                           ctx, null);
                str = Fill(str, @"{DT_UTC_MONTH}", dtNow.Month.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_UTC_DAY}", dtNow.Day.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_UTC_HOUR}", dtNow.Hour.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_UTC_MINUTE}", dtNow.Minute.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_UTC_SECOND}", dtNow.Second.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_UTC_SIMPLE}", dtNow.ToString("yyyyMMddHHmmss"),
                           ctx, null);

                dtNow = dtNow.ToLocalTime();
                str   = Fill(str, @"{DT_YEAR}", dtNow.Year.ToString("D4"),
                             ctx, null);
                str = Fill(str, @"{DT_MONTH}", dtNow.Month.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_DAY}", dtNow.Day.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_HOUR}", dtNow.Hour.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_MINUTE}", dtNow.Minute.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_SECOND}", dtNow.Second.ToString("D2"),
                           ctx, null);
                str = Fill(str, @"{DT_SIMPLE}", dtNow.ToString("yyyyMMddHHmmss"),
                           ctx, null);
            }

            if ((ctx.Flags & SprCompileFlags.References) != SprCompileFlags.None)
            {
                str = SprEngine.FillRefPlaceholders(str, ctx, uRecursionLevel);
            }

            if (((ctx.Flags & SprCompileFlags.EnvVars) != SprCompileFlags.None) &&
                (str.IndexOf('%') >= 0))
            {
                foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
                {
                    string strKey = (de.Key as string);
                    if (string.IsNullOrEmpty(strKey))
                    {
                        Debug.Assert(false); continue;
                    }

                    string strValue = (de.Value as string);
                    if (strValue == null)
                    {
                        Debug.Assert(false); strValue = string.Empty;
                    }

                    str = Fill(str, @"%" + strKey + @"%", strValue, ctx, uRecursionLevel);
                }
            }

            if ((ctx.Flags & SprCompileFlags.Env) != SprCompileFlags.None)
            {
                str = FillUriSpecial(str, ctx, @"{BASE", (ctx.Base ?? string.Empty),
                                     ctx.BaseIsEncoded, uRecursionLevel);
            }

            str = EntryUtil.FillPlaceholders(str, ctx, uRecursionLevel);

            if ((ctx.Flags & SprCompileFlags.PickChars) != SprCompileFlags.None)
            {
                str = ReplacePickChars(str, ctx, uRecursionLevel);
            }

            if (bExt && (SprEngine.FilterCompile != null))
            {
                SprEventArgs args = new SprEventArgs(str, ctx.Clone());
                SprEngine.FilterCompile(null, args);
                str = args.Text;
            }

            if (ctx.EncodeAsAutoTypeSequence)
            {
                str = StrUtil.NormalizeNewLines(str, false);
                str = str.Replace("\n", @"{ENTER}");
            }

            return(str);
        }
 private void AutoType_Click(object sender, EventArgs e)
 {
     performAutoType(ClipboardUtil.GetText());
 }