Пример #1
0
        public MainPage()
        {
            AppLocator.Init();
            Activator = new ViewModelActivator();

            AppLocator.CurrentPage = this;

            InitializeComponent();
            ViewModel = new MainPageVM();
            var connectVM = ConnectView.ViewModel;

            this.AddProgressDisplay();

            // navigate to scope page when connection is achieved
            AppLocator.TelnetService.WhenValueChanged(x => x.Connected)
            .Where(x => x == true)
            .ToSignal()
            .Subscribe(x => Navigation.PushAsync(new ScopePage()));

            this.WhenActivated(disposables =>
            {
                this.HandleActivation();

                this.OneWayBind(ViewModel,
                                vm => vm.Title,
                                v => v.Title)
                .DisposeWith(disposables);
            });
        }
Пример #2
0
        private void FindAppsByKnown()
        {
            if (NativeLib.IsUnix())
            {
                // AppLocator.ChromePath prefers Chrome and falls back to
                // Chromium, therefore try to find Chromium first, in order
                // to prefer the name "Chromium" instead of "Google Chrome"
                AddAppByFile(AppLocator.FindAppUnix("chromium"), "Chromium");
            }

            AddAppByFile(AppLocator.InternetExplorerPath, "Internet Explorer");
            AddAppByFile(AppLocator.FirefoxPath, "Firefox");

            // After looking for Chromium; see above
            AddAppByFile(AppLocator.ChromePath, "Google Chrome");

            AddAppByFile(AppLocator.OperaPath, "Opera");
            AddAppByFile(AppLocator.SafariPath, "Safari");

            if (NativeLib.IsUnix())
            {
                AddAppByFile(AppLocator.FindAppUnix("arora"), "Arora");
                AddAppByFile(AppLocator.FindAppUnix("brave-browser"), "Brave");
                AddAppByFile(AppLocator.FindAppUnix("Dooble"), "Dooble");                 // Upper-case
                AddAppByFile(AppLocator.FindAppUnix("epiphany"), "Epiphany");
                AddAppByFile(AppLocator.FindAppUnix("galeon"), "Galeon");
                AddAppByFile(AppLocator.FindAppUnix("konqueror"), "Konqueror");
                AddAppByFile(AppLocator.FindAppUnix("midori"), "Midori");
                AddAppByFile(AppLocator.FindAppUnix("palemoon"), "Pale Moon");
                AddAppByFile(AppLocator.FindAppUnix("rekonq"), "Rekonq");
                AddAppByFile(AppLocator.FindAppUnix("vivaldi"), "Vivaldi");
            }
        }
Пример #3
0
        private void FindAppsByKnown()
        {
            AddAppByFile(AppLocator.InternetExplorerPath, @"&Internet Explorer");

            if (AppLocator.EdgeProtocolSupported)
            {
                AddAppByShellExpand("microsoft-edge:" + PlhTargetUri, @"&Edge",
                                    AppLocator.EdgePath);
            }

            AddAppByFile(AppLocator.FirefoxPath, @"&Firefox");
            AddAppByFile(AppLocator.OperaPath, @"O&pera");
            AddAppByFile(AppLocator.ChromePath, @"&Google Chrome");
            AddAppByFile(AppLocator.SafariPath, @"&Safari");

            if (NativeLib.IsUnix())
            {
                AddAppByFile(AppLocator.FindAppUnix("epiphany-browser"), @"&Epiphany");
                AddAppByFile(AppLocator.FindAppUnix("galeon"), @"Ga&leon");
                AddAppByFile(AppLocator.FindAppUnix("konqueror"), @"&Konqueror");
                AddAppByFile(AppLocator.FindAppUnix("rekonq"), @"&Rekonq");
                AddAppByFile(AppLocator.FindAppUnix("arora"), @"&Arora");
                AddAppByFile(AppLocator.FindAppUnix("midori"), @"&Midori");
                AddAppByFile(AppLocator.FindAppUnix("Dooble"), @"&Dooble");                 // Upper-case
            }
        }
Пример #4
0
        private static bool ShowHelpLocalKcv(string strQuotedMsIts)
        {
            try
            {
                if (!NativeLib.IsUnix())
                {
                    return(false);
                }

                string strApp = AppLocator.FindAppUnix("kchmviewer");
                if (string.IsNullOrEmpty(strApp))
                {
                    return(false);
                }

                string strFile = StrUtil.GetStringBetween(strQuotedMsIts, 0, ":", "::");
                if (string.IsNullOrEmpty(strFile))
                {
                    strFile = StrUtil.GetStringBetween(strQuotedMsIts, 0, ":", "\"");
                }
                if (string.IsNullOrEmpty(strFile))
                {
                    Debug.Assert(false);
                    return(false);
                }

                string strUrl = StrUtil.GetStringBetween(strQuotedMsIts, 0, "::", "\"");

                // https://www.ulduzsoft.com/linux/kchmviewer/kchmviewer-integration-reference/
                string strArgs = "\"" + SprEncoding.EncodeForCommandLine(strFile) + "\"";
                if (!string.IsNullOrEmpty(strUrl))
                {
                    strArgs = "-showPage \"" + SprEncoding.EncodeForCommandLine(
                        strUrl) + "\" " + strArgs;
                }

                Process p = Process.Start(NativeLib.EncodePath(strApp), strArgs);
                if (p != null)
                {
                    p.Dispose();
                }

                return(true);
            }
            catch (Exception) { Debug.Assert(false); }

            return(false);
        }
Пример #5
0
        private void FindAppsByKnown()
        {
            AddAppByFile(AppLocator.InternetExplorerPath, @"&Internet Explorer");
            AddAppByFile(AppLocator.FirefoxPath, @"&Firefox");
            AddAppByFile(AppLocator.OperaPath, @"O&pera");
            AddAppByFile(AppLocator.ChromePath, @"&Google Chrome");
            AddAppByFile(AppLocator.SafariPath, @"&Safari");

            if (NativeLib.IsUnix())
            {
                AddAppByFile(AppLocator.FindAppUnix("epiphany-browser"), @"&Epiphany");
                AddAppByFile(AppLocator.FindAppUnix("arora"), @"&Arora");
                AddAppByFile(AppLocator.FindAppUnix("galeon"), @"Ga&leon");
                AddAppByFile(AppLocator.FindAppUnix("konqueror"), @"&Konqueror");
            }
        }
        private void LoadFirstApplication()
        {
            var sel = _applicationReference.First();

            try
            {
                _app = AppLocator.GetApplicationConnection(sel);
                if (_app == null)
                {
                    Logger.Error("Please start the instrument software first.");
                    Environment.Exit(-1);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                throw;
            }

            Logger.Info($"Successfully load {sel.AppType.ToString()}");

            try
            {
                // Initializing client
                if (!CreateTcpChannel())
                {
                    Logger.Error("Failed to create tcp channel.");
                    Environment.Exit(-1);
                }

                _client = new AutoChemClient(_config);
                _app.RegisterClient(_client);
                _liveExperiment = _app.NewExperimentWithWizard("", "");
                _liveExperiment.RegisterClient(_client);
            }
            catch (Exception e)
            {
                Logger.Error(e);
                throw;
            }
        }
Пример #7
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);
        }
Пример #8
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;

            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);
            }

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

            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)
                {
                    // ctx.UrlRemoveSchemeOnce = true;
                    // str = SprEngine.FillIfExists(str, @"{URL:RMVSCM}",
                    //	ctx.Entry.Strings.GetSafe(PwDefs.UrlField), ctx, uRecursionLevel);
                    // Debug.Assert(!ctx.UrlRemoveSchemeOnce);

                    str = FillEntryStringsSpecial(str, ctx, uRecursionLevel);
                }

                if (((ctx.Flags & SprCompileFlags.PasswordEnc) != SprCompileFlags.None) &&
                    (str.IndexOf(@"{PASSWORD_ENC}", SprEngine.ScMethod) >= 0))
                {
                    string strPwCmp = SprEngine.FillIfExists(@"{PASSWORD}",
                                                             @"{PASSWORD}", ctx.Entry.Strings.GetSafe(PwDefs.PasswordField),
                                                             ctx.WithoutContentTransformations(), uRecursionLevel);

                    str = SprEngine.FillPlaceholder(str, @"{PASSWORD_ENC}",
                                                    StrUtil.EncryptString(strPwCmp), ctx);
                }

                if (((ctx.Flags & SprCompileFlags.Group) != SprCompileFlags.None) &&
                    (ctx.Entry.ParentGroup != null))
                {
                    str = SprEngine.FillIfExists(str, @"{GROUP}", new ProtectedString(
                                                     false, ctx.Entry.ParentGroup.Name), ctx, uRecursionLevel);

                    str = SprEngine.FillIfExists(str, @"{GROUPPATH}", new ProtectedString(
                                                     false, ctx.Entry.ParentGroup.GetFullPath()), ctx, uRecursionLevel);
                }
            }

            if ((ctx.Flags & SprCompileFlags.Paths) != SprCompileFlags.None)
            {
                str = SprEngine.FillIfExists(str, @"{APPDIR}", new ProtectedString(
                                                 false, UrlUtil.GetFileDirectory(m_strAppExePath, false, false)),
                                             ctx, uRecursionLevel);
            }

            if (ctx.Database != null)
            {
                if ((ctx.Flags & SprCompileFlags.Paths) != SprCompileFlags.None)
                {
                    // For backward compatibility only
                    str = SprEngine.FillIfExists(str, @"{DOCDIR}", new ProtectedString(
                                                     false, UrlUtil.GetFileDirectory(ctx.Database.IOConnectionInfo.Path,
                                                                                     false, false)), ctx, uRecursionLevel);

                    str = SprEngine.FillIfExists(str, @"{DB_PATH}", new ProtectedString(
                                                     false, ctx.Database.IOConnectionInfo.Path), ctx, uRecursionLevel);
                    str = SprEngine.FillIfExists(str, @"{DB_DIR}", new ProtectedString(
                                                     false, UrlUtil.GetFileDirectory(ctx.Database.IOConnectionInfo.Path,
                                                                                     false, false)), ctx, uRecursionLevel);
                    str = SprEngine.FillIfExists(str, @"{DB_NAME}", new ProtectedString(
                                                     false, UrlUtil.GetFileName(ctx.Database.IOConnectionInfo.Path)),
                                                 ctx, uRecursionLevel);
                    str = SprEngine.FillIfExists(str, @"{DB_BASENAME}", new ProtectedString(
                                                     false, UrlUtil.StripExtension(UrlUtil.GetFileName(
                                                                                       ctx.Database.IOConnectionInfo.Path))), ctx, uRecursionLevel);
                    str = SprEngine.FillIfExists(str, @"{DB_EXT}", new ProtectedString(
                                                     false, UrlUtil.GetExtension(ctx.Database.IOConnectionInfo.Path)),
                                                 ctx, uRecursionLevel);
                }
            }

            if ((ctx.Flags & SprCompileFlags.Paths) != SprCompileFlags.None)
            {
                str = SprEngine.FillIfExists(str, @"{ENV_DIRSEP}", new ProtectedString(
                                                 false, Path.DirectorySeparatorChar.ToString()), ctx, uRecursionLevel);

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

            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)
            {
                DateTime dtNow = DateTime.Now;                 // Local time
                str = SprEngine.FillIfExists(str, @"{DT_YEAR}", new ProtectedString(
                                                 false, dtNow.Year.ToString("D4")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_MONTH}", new ProtectedString(
                                                 false, dtNow.Month.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_DAY}", new ProtectedString(
                                                 false, dtNow.Day.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_HOUR}", new ProtectedString(
                                                 false, dtNow.Hour.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_MINUTE}", new ProtectedString(
                                                 false, dtNow.Minute.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_SECOND}", new ProtectedString(
                                                 false, dtNow.Second.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_SIMPLE}", new ProtectedString(
                                                 false, dtNow.ToString("yyyyMMddHHmmss")), ctx, uRecursionLevel);

                dtNow = dtNow.ToUniversalTime();
                str   = SprEngine.FillIfExists(str, @"{DT_UTC_YEAR}", new ProtectedString(
                                                   false, dtNow.Year.ToString("D4")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_UTC_MONTH}", new ProtectedString(
                                                 false, dtNow.Month.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_UTC_DAY}", new ProtectedString(
                                                 false, dtNow.Day.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_UTC_HOUR}", new ProtectedString(
                                                 false, dtNow.Hour.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_UTC_MINUTE}", new ProtectedString(
                                                 false, dtNow.Minute.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_UTC_SECOND}", new ProtectedString(
                                                 false, dtNow.Second.ToString("D2")), ctx, uRecursionLevel);
                str = SprEngine.FillIfExists(str, @"{DT_UTC_SIMPLE}", new ProtectedString(
                                                 false, dtNow.ToString("yyyyMMddHHmmss")), ctx, uRecursionLevel);
            }

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

            if (((ctx.Flags & SprCompileFlags.EnvVars) != SprCompileFlags.None) &&
                (str.IndexOf('%') >= 0))
            {
                // Replace environment variables
                foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
                {
                    string strKey   = (de.Key as string);
                    string strValue = (de.Value as string);

                    if ((strKey != null) && (strValue != null))
                    {
                        str = SprEngine.FillIfExists(str, @"%" + strKey + @"%",
                                                     new ProtectedString(false, strValue), ctx, uRecursionLevel);
                    }
                    else
                    {
                        Debug.Assert(false);
                    }
                }
            }

            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);
        }
Пример #9
0
        private void FindAppsByKnown()
        {
            string strIE = AppLocator.InternetExplorerPath;

            if (AddAppByFile(strIE, "Internet Explorer"))
            {
                // https://msdn.microsoft.com/en-us/library/hh826025.aspx
                AddAppByShellExpand("cmd://\"" + SprEncoding.EncodeForCommandLine(
                                        strIE) + "\" -private \"" + PlhTargetUri + "\"",
                                    "Internet Explorer (" + KPRes.Private + ")", strIE);
            }

            string strFF = AppLocator.FirefoxPath;

            if (AddAppByFile(strFF, "Firefox"))
            {
                // The command line options -private and -private-window work
                // correctly with Firefox 49.0.1 (before, they did not);
                // https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options
                // https://bugzilla.mozilla.org/show_bug.cgi?id=856839
                // https://bugzilla.mozilla.org/show_bug.cgi?id=829180
                AddAppByShellExpand("cmd://\"" + SprEncoding.EncodeForCommandLine(
                                        strFF) + "\" -private-window \"" + PlhTargetUri + "\"",
                                    "Firefox (" + KPRes.Private + ")", strFF);
            }

            string strCh = AppLocator.ChromePath;

            if (AddAppByFile(strCh, "Google Chrome"))
            {
                // https://www.chromium.org/developers/how-tos/run-chromium-with-flags
                // https://peter.sh/experiments/chromium-command-line-switches/
                AddAppByShellExpand("cmd://\"" + SprEncoding.EncodeForCommandLine(
                                        strCh) + "\" --incognito \"" + PlhTargetUri + "\"",
                                    "Google Chrome (" + KPRes.Private + ")", strCh);
            }

            string strOp = AppLocator.OperaPath;

            if (AddAppByFile(strOp, "Opera"))
            {
                // Doesn't work with Opera 34.0.2036.25:
                // AddAppByShellExpand("cmd://\"" + SprEncoding.EncodeForCommandLine(
                //	strOp) + "\" -newprivatetab \"" + PlhTargetUri + "\"",
                //	"Opera (" + KPRes.Private + ")", strOp);

                // Doesn't work with Opera 36.0.2130.65:
                // AddAppByShellExpand("cmd://\"" + SprEncoding.EncodeForCommandLine(
                //	strOp) + "\" --incognito \"" + PlhTargetUri + "\"",
                //	"Opera (" + KPRes.Private + ")", strOp);

                // Works with Opera 40.0.2308.81:
                AddAppByShellExpand("cmd://\"" + SprEncoding.EncodeForCommandLine(
                                        strOp) + "\" --private \"" + PlhTargetUri + "\"",
                                    "Opera (" + KPRes.Private + ")", strOp);
            }

            AddAppByFile(AppLocator.SafariPath, "Safari");

            if (NativeLib.IsUnix())
            {
                AddAppByFile(AppLocator.FindAppUnix("epiphany-browser"), "Epiphany");
                AddAppByFile(AppLocator.FindAppUnix("galeon"), "Galeon");
                AddAppByFile(AppLocator.FindAppUnix("konqueror"), "Konqueror");
                AddAppByFile(AppLocator.FindAppUnix("rekonq"), "Rekonq");
                AddAppByFile(AppLocator.FindAppUnix("arora"), "Arora");
                AddAppByFile(AppLocator.FindAppUnix("midori"), "Midori");
                AddAppByFile(AppLocator.FindAppUnix("Dooble"), "Dooble");                 // Upper-case
            }
        }
Пример #10
0
        private static string CompileInternal(string strText, PwEntry pwEntry,
                                              PwDatabase pwDatabase, SprContentFlags cf, uint uRecursionLevel,
                                              SprRefsCache vRefsCache)
        {
            if (strText == null)
            {
                Debug.Assert(false); return(string.Empty);
            }

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

            string str = strText;

            str = AppLocator.FillPlaceholders(str, cf);
            str = EntryUtil.FillPlaceholders(str, pwEntry, pwDatabase, cf);

            if (pwEntry != null)
            {
                List <string> vKeys = pwEntry.Strings.GetKeys();

                // Ensure that all standard field names are in the list
                // (this is required in order to replace the standard placeholders
                // even if the corresponding standard field isn't present in
                // the entry)
                List <string> vStdNames = PwDefs.GetStandardFields();
                foreach (string strStdField in vStdNames)
                {
                    if (!vKeys.Contains(strStdField))
                    {
                        vKeys.Add(strStdField);
                    }
                }

                // Do not directly enumerate the strings in pwEntry.Strings,
                // because strings might change during the Spr compilation
                foreach (string strField in vKeys)
                {
                    string strKey = (PwDefs.IsStandardField(strField) ?
                                     (@"{" + strField + @"}") :
                                     (@"{" + PwDefs.AutoTypeStringPrefix + strField + @"}"));

                    // Use GetSafe because the field doesn't necessarily exist
                    // (might be a standard field that has been added above)
                    str = SprEngine.FillIfExists(str, strKey, pwEntry.Strings.GetSafe(
                                                     strField), pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
                }

                if (cf != null)
                {
                    cf.UrlRemoveSchemeOnce = true;
                }
                str = SprEngine.FillIfExists(str, @"{URL:RMVSCM}",
                                             pwEntry.Strings.GetSafe(PwDefs.UrlField), pwEntry,
                                             pwDatabase, cf, uRecursionLevel, vRefsCache);
                if (cf != null)
                {
                    Debug.Assert(!cf.UrlRemoveSchemeOnce);
                }

                if (str.IndexOf(@"{PASSWORD_ENC}", SprEngine.ScMethod) >= 0)
                {
                    str = SprEngine.FillIfExists(str, @"{PASSWORD_ENC}", new ProtectedString(false,
                                                                                             StrUtil.EncryptString(pwEntry.Strings.ReadSafe(PwDefs.PasswordField))),
                                                 pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
                }

                if (pwEntry.ParentGroup != null)
                {
                    str = SprEngine.FillIfExists(str, @"{GROUP}", new ProtectedString(
                                                     false, pwEntry.ParentGroup.Name), pwEntry, pwDatabase,
                                                 cf, uRecursionLevel, vRefsCache);

                    str = SprEngine.FillIfExists(str, @"{GROUPPATH}", new ProtectedString(
                                                     false, pwEntry.ParentGroup.GetFullPath()), pwEntry, pwDatabase,
                                                 cf, uRecursionLevel, vRefsCache);
                }
            }

            if (m_strAppExePath != null)
            {
                str = SprEngine.FillIfExists(str, @"{APPDIR}", new ProtectedString(
                                                 false, UrlUtil.GetFileDirectory(m_strAppExePath, false, false)),
                                             pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
            }

            if (pwDatabase != null)
            {
                // For backward compatibility only
                str = SprEngine.FillIfExists(str, @"{DOCDIR}", new ProtectedString(
                                                 false, UrlUtil.GetFileDirectory(pwDatabase.IOConnectionInfo.Path,
                                                                                 false, false)), pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);

                str = SprEngine.FillIfExists(str, @"{DB_PATH}", new ProtectedString(
                                                 false, pwDatabase.IOConnectionInfo.Path), pwEntry, pwDatabase,
                                             cf, uRecursionLevel, vRefsCache);
                str = SprEngine.FillIfExists(str, @"{DB_DIR}", new ProtectedString(
                                                 false, UrlUtil.GetFileDirectory(pwDatabase.IOConnectionInfo.Path,
                                                                                 false, false)), pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
                str = SprEngine.FillIfExists(str, @"{DB_NAME}", new ProtectedString(
                                                 false, UrlUtil.GetFileName(pwDatabase.IOConnectionInfo.Path)),
                                             pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
                str = SprEngine.FillIfExists(str, @"{DB_BASENAME}", new ProtectedString(
                                                 false, UrlUtil.StripExtension(UrlUtil.GetFileName(
                                                                                   pwDatabase.IOConnectionInfo.Path))), pwEntry, pwDatabase, cf,
                                             uRecursionLevel, vRefsCache);
                str = SprEngine.FillIfExists(str, @"{DB_EXT}", new ProtectedString(
                                                 false, UrlUtil.GetExtension(pwDatabase.IOConnectionInfo.Path)),
                                             pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
            }

            str = SprEngine.FillIfExists(str, @"{ENV_DIRSEP}", new ProtectedString(
                                             false, Path.DirectorySeparatorChar.ToString()), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);

            DateTime dtNow = DateTime.Now;             // Local time

            str = SprEngine.FillIfExists(str, @"{DT_YEAR}", new ProtectedString(
                                             false, dtNow.Year.ToString("D4")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_MONTH}", new ProtectedString(
                                             false, dtNow.Month.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_DAY}", new ProtectedString(
                                             false, dtNow.Day.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_HOUR}", new ProtectedString(
                                             false, dtNow.Hour.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_MINUTE}", new ProtectedString(
                                             false, dtNow.Minute.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_SECOND}", new ProtectedString(
                                             false, dtNow.Second.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_SIMPLE}", new ProtectedString(
                                             false, dtNow.ToString("yyyyMMddHHmmss")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);

            dtNow = dtNow.ToUniversalTime();
            str   = SprEngine.FillIfExists(str, @"{DT_UTC_YEAR}", new ProtectedString(
                                               false, dtNow.Year.ToString("D4")), pwEntry, pwDatabase, cf,
                                           uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_UTC_MONTH}", new ProtectedString(
                                             false, dtNow.Month.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_UTC_DAY}", new ProtectedString(
                                             false, dtNow.Day.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_UTC_HOUR}", new ProtectedString(
                                             false, dtNow.Hour.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_UTC_MINUTE}", new ProtectedString(
                                             false, dtNow.Minute.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_UTC_SECOND}", new ProtectedString(
                                             false, dtNow.Second.ToString("D2")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);
            str = SprEngine.FillIfExists(str, @"{DT_UTC_SIMPLE}", new ProtectedString(
                                             false, dtNow.ToString("yyyyMMddHHmmss")), pwEntry, pwDatabase, cf,
                                         uRecursionLevel, vRefsCache);

            str = SprEngine.FillRefPlaceholders(str, pwDatabase, cf, uRecursionLevel,
                                                vRefsCache);

            // Replace environment variables
            foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
            {
                string strKey   = (de.Key as string);
                string strValue = (de.Value as string);

                if ((strKey != null) && (strValue != null))
                {
                    str = SprEngine.FillIfExists(str, @"%" + strKey + @"%",
                                                 new ProtectedString(false, strValue), pwEntry, pwDatabase,
                                                 cf, uRecursionLevel, vRefsCache);
                }
                else
                {
                    Debug.Assert(false);
                }
            }

            str = EntryUtil.FillPlaceholdersFinal(str, pwEntry, pwDatabase, cf);
            return(str);
        }
Пример #11
0
        private void FindAppsByKnown()
        {
            string strIE = AppLocator.InternetExplorerPath;

            if (AddAppByFile(strIE, @"&Internet Explorer"))
            {
                // https://msdn.microsoft.com/en-us/library/hh826025.aspx
                AddAppByShellExpand("cmd://\"" + strIE + "\" -private \"" +
                                    PlhTargetUri + "\"", "Internet Explorer (" + KPRes.Private + ")", strIE);
            }

            if (AppLocator.EdgeProtocolSupported)
            {
                AddAppByShellExpand("microsoft-edge:" + PlhTargetUri, @"&Edge",
                                    AppLocator.EdgePath);
            }

            string strFF = AppLocator.FirefoxPath;

            if (AddAppByFile(strFF, @"&Firefox"))
            {
                // The command line options -private and -private-window work
                // correctly with Firefox 49.0.1 (before, they did not);
                // https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options
                // https://bugzilla.mozilla.org/show_bug.cgi?id=856839
                // https://bugzilla.mozilla.org/show_bug.cgi?id=829180
                AddAppByShellExpand("cmd://\"" + strFF + "\" -private-window \"" +
                                    PlhTargetUri + "\"", "Firefox (" + KPRes.Private + ")", strFF);
            }

            string strCh = AppLocator.ChromePath;

            if (AddAppByFile(strCh, @"&Google Chrome"))
            {
                // https://www.chromium.org/developers/how-tos/run-chromium-with-flags
                // http://peter.sh/examples/?/chromium-switches.html
                AddAppByShellExpand("cmd://\"" + strCh + "\" --incognito \"" +
                                    PlhTargetUri + "\"", "Google Chrome (" + KPRes.Private + ")", strCh);
            }

            string strOp = AppLocator.OperaPath;

            if (AddAppByFile(strOp, @"O&pera"))
            {
                // Doesn't work with Opera 34.0.2036.25:
                // AddAppByShellExpand("cmd://\"" + strOp + "\" -newprivatetab \"" +
                //	PlhTargetUri + "\"", "Opera (" + KPRes.Private + ")", strOp);

                // Doesn't work with Opera 36.0.2130.65:
                // AddAppByShellExpand("cmd://\"" + strOp + "\" --incognito \"" +
                //	PlhTargetUri + "\"", "Opera (" + KPRes.Private + ")", strOp);

                // Works with Opera 40.0.2308.81:
                AddAppByShellExpand("cmd://\"" + strOp + "\" --private \"" +
                                    PlhTargetUri + "\"", "Opera (" + KPRes.Private + ")", strOp);
            }

            AddAppByFile(AppLocator.SafariPath, @"&Safari");

            if (NativeLib.IsUnix())
            {
                AddAppByFile(AppLocator.FindAppUnix("epiphany-browser"), @"&Epiphany");
                AddAppByFile(AppLocator.FindAppUnix("galeon"), @"Ga&leon");
                AddAppByFile(AppLocator.FindAppUnix("konqueror"), @"&Konqueror");
                AddAppByFile(AppLocator.FindAppUnix("rekonq"), @"&Rekonq");
                AddAppByFile(AppLocator.FindAppUnix("arora"), @"&Arora");
                AddAppByFile(AppLocator.FindAppUnix("midori"), @"&Midori");
                AddAppByFile(AppLocator.FindAppUnix("Dooble"), @"&Dooble");                 // Upper-case
            }
        }
Пример #12
0
        private static string CompileInternal(string strText, PwEntry pwEntry,
                                              PwDatabase pwDatabase, SprContentFlags cf, uint uRecursionLevel,
                                              SprRefsCache vRefsCache)
        {
            if (strText == null)
            {
                Debug.Assert(false); return(string.Empty);
            }

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

            string str = strText;

            str = AppLocator.FillPlaceholders(str, cf);
            str = EntryUtil.FillPlaceholders(str, pwEntry, cf);

            if (pwEntry != null)
            {
                foreach (KeyValuePair <string, ProtectedString> kvp in pwEntry.Strings)
                {
                    string strKey = PwDefs.IsStandardField(kvp.Key) ?
                                    (@"{" + kvp.Key + @"}") :
                                    (@"{" + PwDefs.AutoTypeStringPrefix + kvp.Key + @"}");

                    str = SprEngine.FillIfExists(str, strKey, kvp.Value, pwEntry,
                                                 pwDatabase, cf, uRecursionLevel, vRefsCache);
                }

                if (pwEntry.ParentGroup != null)
                {
                    str = SprEngine.FillIfExists(str, @"{GROUP}", new ProtectedString(
                                                     false, pwEntry.ParentGroup.Name), pwEntry, pwDatabase,
                                                 cf, uRecursionLevel, vRefsCache);

                    str = SprEngine.FillIfExists(str, @"{GROUPPATH}", new ProtectedString(
                                                     false, pwEntry.ParentGroup.GetFullPath()), pwEntry, pwDatabase,
                                                 cf, uRecursionLevel, vRefsCache);
                }
            }

            if (m_strAppExePath != null)
            {
                str = SprEngine.FillIfExists(str, @"{APPDIR}", new ProtectedString(
                                                 false, UrlUtil.GetFileDirectory(m_strAppExePath, false)),
                                             pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
            }

            if (pwDatabase != null)
            {
                str = SprEngine.FillIfExists(str, @"{DOCDIR}", new ProtectedString(
                                                 false, UrlUtil.GetFileDirectory(pwDatabase.IOConnectionInfo.Path, false)),
                                             pwEntry, pwDatabase, cf, uRecursionLevel, vRefsCache);
            }

            str = SprEngine.FillRefPlaceholders(str, pwDatabase, cf, uRecursionLevel,
                                                vRefsCache);

            // Replace environment variables
            foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
            {
                string strKey   = de.Key as string;
                string strValue = de.Value as string;

                if ((strKey != null) && (strValue != null))
                {
                    str = SprEngine.FillIfExists(str, @"%" + strKey + @"%",
                                                 new ProtectedString(false, strValue), pwEntry, pwDatabase,
                                                 cf, uRecursionLevel, vRefsCache);
                }
                else
                {
                    Debug.Assert(false);
                }
            }

            return(str);
        }