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