diff --git a/.editorconfig b/.editorconfig index c24743d..446bb3e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,4 +4,4 @@ indent_size = 2 end_of_line = lf trim_trailing_whitespace = true insert_final_newline = true -max_line_length = 100 +max_line_length = 80 diff --git a/.eslintrc.js b/.eslintrc.js index 543efe6..a272b1d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,56 +1,60 @@ -require('@rushstack/eslint-patch/modern-module-resolution'); +require("@rushstack/eslint-patch/modern-module-resolution"); -const path = require('node:path'); -const createAliasSetting = require('@vue/eslint-config-airbnb/createAliasSetting'); +const path = require("node:path"); +const createAliasSetting = require("@vue/eslint-config-airbnb/createAliasSetting"); module.exports = { root: true, env: { es2021: true, }, - extends: [ - 'plugin:vue/recommended', - '@vue/eslint-config-airbnb', - ], + extends: ["plugin:vue/recommended", "@vue/eslint-config-airbnb", "prettier"], rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-plusplus': 'off', - 'import/no-cycle': 'off', - 'vue/valid-v-slot': ['error', { - allowModifiers: true, - }], - 'no-param-reassign': 'off', - 'import/no-unresolved': 'error', + "no-console": process.env.NODE_ENV === "production" ? "error" : "off", + "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off", + "no-plusplus": "off", + "import/no-cycle": "off", + "vue/valid-v-slot": [ + "error", + { + allowModifiers: true, + }, + ], + "no-param-reassign": "off", + "import/no-unresolved": "error", // This is probably a good idea, but I don't want to diverge all the file names right now // while maintaining 4.x and 5.x. - 'vue/multi-word-component-names': 'off', - 'vue/max-len': ['error', { - code: 120, - ignoreComments: true, - ignoreStrings: true, - ignoreTemplateLiterals: true, - ignoreRegExpLiterals: true, - ignoreUrls: true, - }], - 'no-unused-vars': ['error', { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', - }], + "vue/multi-word-component-names": "off", + "vue/max-len": [ + "error", + { + code: 120, + ignoreComments: true, + ignoreStrings: true, + ignoreTemplateLiterals: true, + ignoreRegExpLiterals: true, + ignoreUrls: true, + }, + ], + "no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + }, + ], + "prefer-destructuring": ["error", { object: true, array: false }], }, settings: { ...createAliasSetting({ - '@': `${path.resolve(__dirname, './src')}`, + "@": `${path.resolve(__dirname, "./src")}`, }), }, - parserOptions: { - }, + parserOptions: {}, overrides: [ { - files: [ - '**/__tests__/*.{j,t}s?(x)', - ], + files: ["**/__tests__/*.{j,t}s?(x)"], env: { mocha: true, }, diff --git a/.github/.dependabot.yml b/.github/.dependabot.yml index 89176a0..b689aae 100644 --- a/.github/.dependabot.yml +++ b/.github/.dependabot.yml @@ -6,4 +6,3 @@ updates: interval: "weekly" day: "sunday" target-branch: "dev" - diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index fe4a75f..a925a7d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -3,60 +3,60 @@ description: File a bug/issue title: "[BUG] " labels: ["bug"] body: -- type: checkboxes - attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered. - options: - - label: I have searched the existing issues + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: input + attributes: + label: Empire Version + description: What version of Empire are you using? + validations: required: true -- type: input - attributes: - label: Empire Version - description: What version of Empire are you using? - validations: - required: true -- type: input - attributes: - label: Starkiller Version - description: What version of Starkiller are you using? - validations: - required: true -- type: input - attributes: - label: Browser - description: What browser are you using? - validations: - required: true -- type: textarea - attributes: - label: Current Behavior - description: A concise description of what you're experiencing. - validations: - required: true -- type: textarea - attributes: - label: Expected Behavior - description: A concise description of what you expected to happen. - validations: - required: true -- type: textarea - attributes: - label: Steps To Reproduce - description: Steps to reproduce the behavior. - placeholder: | - 1. In this environment... - 1. With this config... - 1. Run '...' - 1. See error... - validations: - required: true -- type: textarea - attributes: - label: Anything else? - description: | - Links? References? Anything that will give us more context about the issue you are encountering! + - type: input + attributes: + label: Starkiller Version + description: What version of Starkiller are you using? + validations: + required: true + - type: input + attributes: + label: Browser + description: What browser are you using? + validations: + required: true + - type: textarea + attributes: + label: Current Behavior + description: A concise description of what you're experiencing. + validations: + required: true + - type: textarea + attributes: + label: Expected Behavior + description: A concise description of what you expected to happen. + validations: + required: true + - type: textarea + attributes: + label: Steps To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. In this environment... + 1. With this config... + 1. Run '...' + 1. See error... + validations: + required: true + - type: textarea + attributes: + label: Anything else? + description: | + Links? References? Anything that will give us more context about the issue you are encountering! - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 67daffe..683efa8 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -3,27 +3,27 @@ description: File a bug/issue title: "[FEATURE REQUEST] <title>" labels: ["enhancement"] body: -- type: textarea - attributes: - label: Description - description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - validations: - required: true -- type: textarea - attributes: - label: Solution - description: A clear and concise description of what you want to happen. - validations: - required: true -- type: textarea - attributes: - label: Alternatives - description: A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false -- type: textarea - attributes: - label: Additional Context - description: Add any other context or screenshots about the feature request here. - validations: - required: false + - type: textarea + attributes: + label: Description + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + validations: + required: true + - type: textarea + attributes: + label: Solution + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + attributes: + label: Alternatives + description: A clear and concise description of any alternative solutions or features you've considered. + validations: + required: false + - type: textarea + attributes: + label: Additional Context + description: Add any other context or screenshots about the feature request here. + validations: + required: false diff --git a/.github/actions/clean-merge/action.yml b/.github/actions/clean-merge/action.yml index 58a53dd..51d0da2 100644 --- a/.github/actions/clean-merge/action.yml +++ b/.github/actions/clean-merge/action.yml @@ -1,14 +1,14 @@ -name: 'Clean Merge' -description: 'Merge a branch into another branch without creating a merge commit. Fail if the merge would create merge conflicts.' +name: "Clean Merge" +description: "Merge a branch into another branch without creating a merge commit. Fail if the merge would create merge conflicts." inputs: from-branch: - description: 'The branch to merge from' + description: "The branch to merge from" required: true to-branch: - description: 'The branch to merge to' + description: "The branch to merge to" required: true push-repo: - description: 'The remote to push to' + description: "The remote to push to" required: true runs: using: "composite" @@ -25,7 +25,7 @@ runs: git submodule foreach --recursive git reset --hard git submodule update --init --recursive - name: Merge ${{ inputs.from-branch }} branch to ${{ inputs.to-branch }} - shell: '/bin/bash {0}' + shell: "/bin/bash {0}" run: | git merge --no-edit ${{ inputs.from-branch }} if [ $? -ne 0 ]; then @@ -47,4 +47,4 @@ runs: shell: bash run: | git push ${{ inputs.push-repo }} ${{ inputs.to-branch }} - echo "MERGE_STATUS=NO_CHANGES" >> $GITHUB_ENV \ No newline at end of file + echo "MERGE_STATUS=NO_CHANGES" >> $GITHUB_ENV diff --git a/.github/ci-and-release.md b/.github/ci-and-release.md index 19b49b9..7cc69d7 100644 --- a/.github/ci-and-release.md +++ b/.github/ci-and-release.md @@ -1,26 +1,29 @@ # CI Processes Starkiller's workflows (and this documentation) are a fork of the [Empire workflows](https://github.com/BC-SECURITY/Empire/tree/main/.github). -The `main`, `kali-main`, and `sponsors-main` branches get a `dist/` generated upon release. `private-main` does not. +The `main`, `kali-main`, and `sponsors-main` branches get a `dist/` generated upon release. `private-main` does not. ## Pull Requests - Build and Test + All pull requests will run the `Lint and Test` workflow. -* The workflow will run `vue-cli-service lint` to lint the code. -* There are no tests yet. +- The workflow will run `vue-cli-service lint` to lint the code. +- There are no tests yet. When submitting a pull request to `private-main`, the label `auto-merge-downstream` can be added. If the label is present, then merging a branch to `private-main` will automatically trigger the prerelease step of merging `private-main` into `sponsors-main` and `kali-main`. ## BC-SECURITY/Starkiller-Sponsors Sponsors & Kali Release Process -*Note: Starting in 2023, the Kali team will be pulling from the public repo. + +_Note: Starting in 2023, the Kali team will be pulling from the public repo. I am keeping the Kali workflows running for now with the exception of the tagging. This is mostly out of laziness since I just wrote all of the CI/CD. In the near future, -we can rework these jobs to be more like "sponsors & other downstream" releases.* +we can rework these jobs to be more like "sponsors & other downstream" releases._ Sponsors and Kali releases go through the same release process. It is easier to manage Starkiller releases by not allowing them to be released at different times and have the version numbers diverge. A side effect of this is its possible for a version bump to be empty (no changes) and still be released. ### 1. cherry-pick any changes from BC-SECURITY/Starkiller#main to BC-SECURITY/Starkiller-Sponsors#private-main + If you don't feel comfortable pushing to `private-main`, you can branch from `private-main` before cherry-picking and open a pull request to merge into `private-main`. ```bash @@ -45,6 +48,7 @@ git push origin private-main **Potential Enhancement:** Could add a GitHub workflow that you supply a commit hash and it will cherry-pick it into `private-main` and open a pull request. ### 2. Merge Starkiller-Sponsors/private-main -> (Starkiller-Sponsors/sponsors-main, Starkiller-Sponsors/kali-main) + Run the `Prerelease - Merge private-main` manual workflow. The branch that it runs on doesn't matter. The workflow will merge `private-main` into `sponsors-main` and `kali-main`. @@ -69,6 +73,7 @@ git add -A git merge --continue git push origin kali-main ``` + </p> </details> @@ -88,19 +93,22 @@ git add -A git merge --continue git push origin sponsors-main ``` + </p> </details> **Potential Enhancement:** I'm still considering if this step should open PRs instead of doing direct merges. ### 3. Start Private Release + Start a release by running the `Private - Create Release` manual workflow. The branch that it runs on doesn't matter. The workflow will then create a release branch, push it to the repo, and create a pull request into `private-main`. -* Updates `package.json` version +- Updates `package.json` version ### 4. Manual Step - Merge private-main release PR + Once the first workflow runs, it will open one pull request from the `release/v{version}-private` branch to `private-main`. Check the changelog on this branch, this will be the changelog that is used for the release notes. @@ -113,18 +121,22 @@ the `private-main` branch. **Potential Enhancement:** Use a git diff to generate a list of changes as suggestions for the release notes. ### 5. Private - Tag and Release + Once the `release/` pull request is merged, the `Private - Tag Release` workflow will automatically run. The workflow will create a tag and release on the `HEAD` of `private-main` using the release notes from `CHANGELOG.md` for the body of the release. ### 6. Repeat Step 2 - Prerelease Merge + Repeat step 2 to merge `private-main` into `sponsors-main` and `kali-main`. ### 7. Start Sponsor/Kali Release + Start the release by running the `Sponsors & Kali - Create Release` manual workflow. A release PR will then be opened for each branch. #### 8. Manual Step - Merge sponsor/kali release PRs + Once the workflow runs, it will open two pull requests from the `release/v{version}-sponsors` and `release/v{version}-kali` branches to `sponsors-main` and `kali-main` respectively. Check the changelog on these branches, this will be the changelog that is used for the release notes. @@ -139,14 +151,18 @@ the `sponsors-main` branch or `kali-main` branch. **Potential Enhancement** We could add automation that copies the `unreleased` section from the target branch to the version section in the `head` branch. ### 9. Tag and Release + Once the pull requests are merged, the `Sponsors - Tag Release` and `Kali - Tag Release` workflows will automatically run. -The workflow will run `yarn build` and commit the `dist/` to `sponsors-main` and `kali-main` (independently). It will then create a tag and release on the `HEAD` of of `sponsors-main` and `kali-main` using the release notes from `CHANGELOG.md` for the body of the release. +The workflow will run `yarn build` and commit the `dist/` to `sponsors-main` and `kali-main` (independently). It will then create a tag and release on the `HEAD` of of `sponsors-main` and `kali-main` using the release notes from `CHANGELOG.md` for the body of the release. ### Setup + Requires a secret in the repo `RELEASE_TOKEN` that has `repo` and `workflow` access. ## BC-SECURITY/Starkiller Public Release Process + ### 1. Start Release + Start a release by running the `Public - Create Release Branch` manual workflow. It doesn't matter which branch it runs on. The workflow will then checkout the chosen tag from the `sponsors` repo, create a release branch, push it to the public repo, and create a pull request into `main`. @@ -154,6 +170,7 @@ The workflow will then checkout the chosen tag from the `sponsors` repo, create The chosen tag should end in `-private` ### 2. Manual Steps - Merge release PR + Once the first workflow runs, it will open one pull request from the `release/v{version}` branch to `main`. Check the changelog on this branch, this will be the changelog that is used for the release notes. @@ -164,18 +181,22 @@ Merge the pull request. **DO NOT SQUASH** the `main` branch. This will ensure the change ends up in the release properly. ### 3. Tag Release + Once the pull request is merged, the `Public - Tag Release` workflow will automatically run. The workflow will create a tag and release on the `HEAD` of `main`, using the release notes from `CHANGELOG.md` for the body of the release. The workflow will detect the last released tag, and use the release notes from the `CHANGELOG.md` between the last release and the current release. The workflow will run `yarn build` and commit the `dist/` to `main-main`. ### Setup + Requires a secret in the repo `RELEASE_TOKEN` that has `repo` and `workflow` access. ## More Information + https://www.bc-security.org/using-github-actions-to-manage-ci-cd-for-empire/ ## Contributing + To update the workflows if you don't have access to the `Starkiller-Sponsors` repo: Merge to `main` in `Starkiller`, then we can cherry-pick the changes into `private-main`. diff --git a/.github/workflows/lint-and-test.yml b/.github/workflows/lint-and-test.yml index a58ad3a..d178841 100644 --- a/.github/workflows/lint-and-test.yml +++ b/.github/workflows/lint-and-test.yml @@ -3,7 +3,7 @@ name: Lint and Test on: pull_request: paths-ignore: - - '**.md' + - "**.md" concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} @@ -18,12 +18,13 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' + cache: "yarn" - name: Get app version run: | echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV - name: Install modules run: yarn - name: Run ESLint - if: ${{ !startsWith(env.APP_VERSION, '1') }} run: yarn lint + - name: Run Prettier + run: yarn format --check diff --git a/.github/workflows/prerelease-sponsor-kali-merge-private.yml b/.github/workflows/prerelease-sponsor-kali-merge-private.yml index 5e8aec6..be5ac5b 100644 --- a/.github/workflows/prerelease-sponsor-kali-merge-private.yml +++ b/.github/workflows/prerelease-sponsor-kali-merge-private.yml @@ -11,12 +11,12 @@ on: workflow_dispatch: inputs: mergeKali: - description: 'Merge private-main branch into kali-main.' + description: "Merge private-main branch into kali-main." type: boolean default: true required: true mergeSponsors: - description: 'Merge private-main branch into sponsors-main.' + description: "Merge private-main branch into sponsors-main." type: boolean default: true required: true @@ -32,15 +32,15 @@ jobs: # Already filtered above to closed PRs on private-main. if: ${{ github.repository == 'BC-Security/Starkiller-Sponsors' && (github.event_name == 'workflow_dispatch' || - (github.event.pull_request && - github.event.pull_request.merged == true && - contains(github.event.pull_request.labels.*.name, 'auto-merge-downstream'))) }} + (github.event.pull_request && + github.event.pull_request.merged == true && + contains(github.event.pull_request.labels.*.name, 'auto-merge-downstream'))) }} runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 with: - submodules: 'recursive' + submodules: "recursive" ref: private-main fetch-depth: 0 token: ${{ secrets.RELEASE_TOKEN }} diff --git a/.github/workflows/release-private-start.yml b/.github/workflows/release-private-start.yml index 1c6e5c9..9195fcf 100644 --- a/.github/workflows/release-private-start.yml +++ b/.github/workflows/release-private-start.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: inputs: bumpType: - description: 'Bump type to use for the release branch.' + description: "Bump type to use for the release branch." type: choice default: patch options: @@ -23,7 +23,7 @@ jobs: uses: actions/checkout@v3 with: ref: ${{ env.TARGET_BRANCH }} - submodules: 'recursive' + submodules: "recursive" fetch-depth: 0 token: ${{ secrets.RELEASE_TOKEN }} - name: Initialize mandatory git config @@ -41,7 +41,7 @@ jobs: echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV - name: Get release branch name run: | - echo "RELEASE_BRANCH=release/$APP_VERSION-private" >> $GITHUB_ENV + echo "RELEASE_BRANCH=release/$APP_VERSION-private" >> $GITHUB_ENV - name: Create release branch run: git checkout -b ${{ env.RELEASE_BRANCH }} - name: Update Changelog diff --git a/.github/workflows/release-public-start.yml b/.github/workflows/release-public-start.yml index a924f76..c7a30c9 100644 --- a/.github/workflows/release-public-start.yml +++ b/.github/workflows/release-public-start.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: inputs: sponsorTag: - description: 'The tag to merge into master and dev from the sponsors repo. Example: v4.5.2-private' + description: "The tag to merge into master and dev from the sponsors repo. Example: v4.5.2-private" type: string required: true @@ -15,7 +15,7 @@ jobs: - name: Check out sponsor repo uses: actions/checkout@v3 with: - repository: 'BC-Security/Starkiller-Sponsors' + repository: "BC-Security/Starkiller-Sponsors" ref: ${{ inputs.sponsorTag }} token: ${{ secrets.RELEASE_TOKEN }} fetch-depth: 0 @@ -37,7 +37,7 @@ jobs: echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV - name: Get release branch name run: | - echo "RELEASE_BRANCH=release/$APP_VERSION" >> $GITHUB_ENV + echo "RELEASE_BRANCH=release/$APP_VERSION" >> $GITHUB_ENV - name: Create release branch run: | git checkout -b ${{ env.RELEASE_BRANCH }} diff --git a/.github/workflows/release-public-tag.yml b/.github/workflows/release-public-tag.yml index 2d5936b..71f1687 100644 --- a/.github/workflows/release-public-tag.yml +++ b/.github/workflows/release-public-tag.yml @@ -28,7 +28,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' + cache: "yarn" - name: Set application version as variable run: | echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV diff --git a/.github/workflows/release-sponsor-kali-start.yml b/.github/workflows/release-sponsor-kali-start.yml index 0905907..35a9af2 100644 --- a/.github/workflows/release-sponsor-kali-start.yml +++ b/.github/workflows/release-sponsor-kali-start.yml @@ -41,7 +41,7 @@ jobs: echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT - name: Get release branch name run: | - echo "RELEASE_BRANCH=release/$APP_VERSION-sponsors" >> $GITHUB_ENV + echo "RELEASE_BRANCH=release/$APP_VERSION-sponsors" >> $GITHUB_ENV - name: Create release branch run: git checkout -b ${{ env.RELEASE_BRANCH }} - name: Push new branch diff --git a/.github/workflows/release-sponsor-kali-tag.yml b/.github/workflows/release-sponsor-kali-tag.yml index 5bcdaa9..2410346 100644 --- a/.github/workflows/release-sponsor-kali-tag.yml +++ b/.github/workflows/release-sponsor-kali-tag.yml @@ -26,7 +26,7 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' + cache: "yarn" - name: Set application version as variable run: | echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV @@ -62,7 +62,7 @@ jobs: release_name: v${{ env.TAG_NAME }} body: | ${{ steps.extract_release_notes.outputs.release_notes }} - + ### Sponsors Only ${{ steps.extract_release_notes_sponsors.outputs.release_notes }} draft: false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ec76dd..66ff299 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,20 @@ repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: check-json + - id: check-yaml + - id: check-merge-conflict + - id: end-of-file-fixer + - id: trailing-whitespace - repo: local hooks: - id: yarn-lint name: yarn-lint entry: bash -c 'yarn lint' language: system + - id: yarn-format + name: yarn-format + entry: bash -c 'yarn format' + language: system diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f864e32 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +**/*.md +dist diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +{} diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ae19b9..c8c409d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.6.1] - 2023-09-25 + +- Make notification bell menu scrollable with a max height +- Fix the Listener buttons overflowing out of the toolbar + +## [2.6.0] - 2023-09-17 + +- Add an Agent terminal to the Interact tab + - Run modules and shell commands from a terminal-like interface +- Add Prettier for code formatting +- Add user avatar uploads to the settings page, use the avatars in the chat widget +- Add a notification page and notification bell + - Most notifications that were previously showing in the bottom corner will now show up in the notification bell + - Agent task results now show up as notifications + - Can subscribe/unsubscribe to specific agent notifications + ## [2.5.3] - 2023-08-24 - Fix elevated process icon on agent page -- Fix input and output downloads not working +- Fix input and output downloads not working ## [2.5.2] - 2023-08-09 @@ -71,7 +87,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add a script import button to the agent page - Add a script command checkbox to the agent page -- Modules with a 'file' type option now get a file selector/uploader instead of a text box +- Modules with a 'file' type option now get a file selector/uploader instead of a text box ## [2.2.0] - 2023-03-31 @@ -210,7 +226,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [1.4.0] - 2020-10-12 -- Added real-time notifications new listeners and agents [#49](https://github.com/BC-SECURITY/Starkiller/pull/49) +- Added real-time notifications new listeners and agents [#49](https://github.com/BC-SECURITY/Starkiller/pull/49) ## [1.3.2] - 2020-07-29 @@ -291,7 +307,11 @@ Including but not limited to: - Initial Release -[Unreleased]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v2.5.3...HEAD +[Unreleased]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v2.6.1...HEAD + +[2.6.1]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v2.6.0...v2.6.1 + +[2.6.0]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v2.5.3...v2.6.0 [2.5.3]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v2.5.2...v2.5.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ca7aa3..406fb61 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,28 +1,36 @@ # Contributing to Starkiller + We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: - * Reporting a bug - * Discussing the current state of the code - * Submitting a fix - * Proposing new features + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features ## Creating Github Issues + Please first review the existing Starkiller issues to see if the error was resolved with a fix in the development branch or if we chose not to fix the error for some reason. The more information you provide in a Github issue the easier it will be for us to track down and fix the problem: - * Please provide the version of Empire you are using. - * Please provide the OS, and Starkiller version that you are using. - * Please describe the expected behavior and the encountered error. - * The more detail the better! - * Include any actions taken just prior to the error. - * Please post a screenshot of the error, a link to a Pastebin dump of the error, or embedded text of the error. - * Any additional information. + +- Please provide the version of Empire you are using. +- Please provide the OS, and Starkiller version that you are using. +- Please describe the expected behavior and the encountered error. + - The more detail the better! + - Include any actions taken just prior to the error. + - Please post a screenshot of the error, a link to a Pastebin dump of the error, or embedded text of the error. + - Any additional information. ## Making a Pull Request - 1. Create an issue describing the motivation for your changes - * Pull Requests without associated Issues may still be accepted, if the motivation is obvious. However, this will help speed up code review if there's any uncertainty. - 1. Fork the repo and create your branch from main. - 1. Make sure your code lints. - 1. Issue that pull request! + +1. Create an issue describing the motivation for your changes + + - Pull Requests without associated Issues may still be accepted, if the motivation is obvious. However, this will help speed up code review if there's any uncertainty. + +1. Fork the repo and create your branch from main. +1. Make sure your code lints. +1. Issue that pull request! ## Use a Consistent Coding Style + We use Airbnb's and Vue's recommended ESLint configs. To make your life easier, consider installing an ESLint plugin in your editor of choice. You can also run `yarn lint`. diff --git a/README.md b/README.md index e93f384..74ece7d 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,16 @@ </div> # Starkiller + Starkiller is a Frontend for [Powershell Empire](https://github.com/BC-SECURITY/Empire/). It is a web application written in VueJS. If you'd like to contribute please follow the [Contribution guide](/CONTRIBUTING.md). If you'd like to request a feature or report a bug, please follow the [Issue template](/.github/ISSUE_TEMPLATE.md). # Getting Started + As of Empire 5.0 and Starkiller 2.0, you no longer need to install Starkiller or build it from source. It is prepackaged in Empire as a submodule and served via Empire's API. ## Sponsors + <div align="center"> [<img src="https://github.com/BC-SECURITY/Empire/assets/9831420/f273f4b0-400c-49ce-b62f-521239a86754" width="100"/>](https://www.cybrary.it/) @@ -37,33 +40,42 @@ It is prepackaged in Empire as a submodule and served via Empire's API. </div> # Sponsorship and extra features + [Sponsoring](https://github.com/sponsors/BC-SECURITY/) at the `Individual` level will give access to extra features. At the moment, the extra Starkiller sponsorship features include: - ## Dashboard +## Dashboard + <div align="left"><img width="800" src="https://github.com/BC-SECURITY/Starkiller/assets/9831420/7fda92cd-52ab-4d84-a835-89c35b38cf7e"></div> - ## Graph View +## Graph View + <div align="left"><img width="800" src="https://user-images.githubusercontent.com/9831420/216792129-5b0fed82-b209-48cb-9a43-eeb3e69c7229.gif"></div> - ## Interactive agent shell +## Interactive agent shell + <div align="left"><img width="800" src="https://user-images.githubusercontent.com/9831420/104983879-e37fc700-59ca-11eb-9c90-bd2d166c4ac5.gif"></div> - - ## Process Browser + +## Process Browser + <div align="left"><img width="800" src="https://user-images.githubusercontent.com/9831420/131264080-0264558d-59c4-44d9-8dae-7b518c47a9cb.gif"></div> - ## Modify Module Scripts +## Modify Module Scripts + <div align="left"><img width="800" src="https://user-images.githubusercontent.com/9831420/221427395-28d63b1d-bbe5-423e-9113-e58a10a86ced.gif"></div> - ## Enable/Disable modules +## Enable/Disable modules + <div align="left"><img width="800" src="https://user-images.githubusercontent.com/9831420/123528242-e7f78c80-d69a-11eb-9e88-3410c151cd20.gif"></div> - ## Proxy Management +## Proxy Management + <div align="left"><img width="800" src="https://user-images.githubusercontent.com/9831420/210124448-4f1107b0-3250-4faa-8ea9-4daec77e277e.gif"></div> There is also a collection of Empire plugins available via sponsorship. Thanks to our sponsors the following features which started as sponsor features have been moved to the public and kali builds. + - File browser - Popout windows - Chat widget @@ -71,20 +83,25 @@ Thanks to our sponsors the following features which started as sponsor features - Malleable profile management ## Build and run from source + Prerequisites: -* [Node.js](http://nodejs.org/) 16+. -* [Yarn](https://classic.yarnpkg.com/en/docs/install) -Currently it has been tested using Yarn 1.22. + +- [Node.js](http://nodejs.org/) 16+. +- [Yarn](https://classic.yarnpkg.com/en/docs/install) + Currently it has been tested using Yarn 1.22. + ``` yarn ``` ### Compile and hot-reload for development + ``` yarn dev ``` ### Compile and minify for production + ``` yarn build ``` @@ -94,20 +111,21 @@ yarn build **Note**: As of Empire 5.0 and Starkiller 2.0, this compatability table is less relevant. Starkiller is now packaged in Empire as a git submodule and does not need to be installed separately. Starkiller’s new features occasionally depend on new functionality within Empire. Therefore, it is recommended that you follow this release table for syncing up your Starkiller and Empire versions. If you are using an older version of Empire, Starkiller will warn you when logging in, but will allow you to continue. If a there is a new minimum version of Empire required to get all the features out of Starkiller, we will do a minor version bump to Starkiller. -| Starkiller Release | Minimum Empire Version | Notes | +| Starkiller Release | Minimum Empire Version | Notes | | ------------------ | ---------------------- | ------ | -| 1.0.x | 3.1.1 | 3.1.1 is the first version of Empire to include all the user endpoints necessary for Starkiller to function | -| 1.1.x | 3.1.5 | 3.1.5 updated the reporting endpoint to have the same result as running it in the CLI. Starkiller 1.1.x uses that reporting endpoint for the reporting tab | -| 1.2.x | 3.2.0 | 3.2.0 added an endpoint for users that is needed for the UI updates introduced in Starkiller 1.2.0 -| 1.3.x | 3.3.0 | 3.3.0 categorized all of the modules in Empire with corresponding [MITRE techniques](https://attack.mitre.org/techniques/enterprise/) -| 1.4.x, 1.5.x | 3.5.0 | 3.5.0 added real-time notifications for new listeners and agents -| 1.6.x, 1.7.x | 3.7.0 | 1.6.0 was tested against Empire 3.7.0. There *shouldn't* be any breaking changes, but there were a lot of code changes. -| 1.8.x | 4.0.0 | -| 1.9.x, 1.10.x, 1.11.x | 4.1.0 | The updated agent screen requires new endpoints in order to update fields on the 'view' tab -| 2.0.x, 2.1.x | 5.0.0 | Uses the new v2 api -| 2.2.x, 2.3.x | 5.2.0 | Requires the new plugin task endpoints -| 2.4.x | 5.5.0 | For sponsors, requires the checkin endpoints -| 2.5.x | 5.6.0 | Requires the tags endpoints +| 1.0.x | 3.1.1 | 3.1.1 is the first version of Empire to include all the user endpoints necessary for Starkiller to function | +| 1.1.x | 3.1.5 | 3.1.5 updated the reporting endpoint to have the same result as running it in the CLI. Starkiller 1.1.x uses that reporting endpoint for the reporting tab | +| 1.2.x | 3.2.0 | 3.2.0 added an endpoint for users that is needed for the UI updates introduced in Starkiller 1.2.0 +| 1.3.x | 3.3.0 | 3.3.0 categorized all of the modules in Empire with corresponding [MITRE techniques](https://attack.mitre.org/techniques/enterprise/) +| 1.4.x, 1.5.x | 3.5.0 | 3.5.0 added real-time notifications for new listeners and agents +| 1.6.x, 1.7.x | 3.7.0 | 1.6.0 was tested against Empire 3.7.0. There _shouldn't_ be any breaking changes, but there were a lot of code changes. +| 1.8.x | 4.0.0 | +| 1.9.x, 1.10.x, 1.11.x | 4.1.0 | The updated agent screen requires new endpoints in order to update fields on the 'view' tab +| 2.0.x, 2.1.x | 5.0.0 | Uses the new v2 api +| 2.2.x, 2.3.x | 5.2.0 | Requires the new plugin task endpoints +| 2.4.x | 5.5.0 | For sponsors, requires the checkin endpoints +| 2.5.x | 5.6.0 | Requires the tags endpoints +| 2.6.x | 5.7.0 | Requires the user avatar endpoints and fixes for the agent task socketio events ## Changelog @@ -122,5 +140,4 @@ Detailed changes for each release are documented in the [changelog](./CHANGELOG. [MIT](http://opensource.org/licenses/MIT) - Copyright (c) 2021 BC Security diff --git a/index.html b/index.html index 80b2ea3..832fb8a 100644 --- a/index.html +++ b/index.html @@ -1,19 +1,21 @@ -<!DOCTYPE html> +<!doctype html> <html lang="en"> <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <link rel="icon" href="/favicon.ico"> + <meta charset="utf-8" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta name="viewport" content="width=device-width,initial-scale=1.0" /> + <link rel="icon" href="/favicon.ico" /> <title>Starkiller -
-
+
- + diff --git a/package.json b/package.json index 8f5b37d..5e45dab 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "starkiller", - "version": "2.5.3", + "version": "2.6.1", "private": true, "scripts": { "dev": "vite", "build": "vite build", "serve": "vite preview", - "lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src" + "lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src", + "format": "prettier . --write" }, "main": "background.js", "dependencies": { @@ -22,6 +23,7 @@ "semver": "^7.3.5", "socket.io-client": "^4.1.2", "splitpanes": "^2.3.8", + "table": "^6.8.1", "uuid": "^8.3.2", "vue": "2.7", "vue-beautiful-chat": "^2.5.0", @@ -35,7 +37,9 @@ "@vitejs/plugin-vue2": "^2.2.0", "@vue/eslint-config-airbnb": "^7.0.0", "eslint": "^8.31.0", + "eslint-config-prettier": "^9.0.0", "eslint-plugin-vue": "^9.8.0", + "prettier": "^3.0.2", "sass": "~1.32", "unplugin-vue-components": "^0.22.12", "vite": "^3" diff --git a/public/index.html b/public/index.html index 24b8126..2d51a2d 100644 --- a/public/index.html +++ b/public/index.html @@ -1,18 +1,20 @@ - + - - - - + + + + starkiller -
-
+
diff --git a/src/App.vue b/src/App.vue index 06dcd24..6db6310 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,34 +1,29 @@ diff --git a/src/components/ClickToEdit.vue b/src/components/ClickToEdit.vue index 797b3fc..2a7b218 100644 --- a/src/components/ClickToEdit.vue +++ b/src/components/ClickToEdit.vue @@ -3,11 +3,7 @@ {{ label }} - + - + {{ internalValue }} @@ -97,12 +97,11 @@ - + diff --git a/src/components/DynamicFormInput.vue b/src/components/DynamicFormInput.vue index 76314bb..f31022b 100644 --- a/src/components/DynamicFormInput.vue +++ b/src/components/DynamicFormInput.vue @@ -2,10 +2,12 @@