mirror of
https://github.com/OpenMaxIO/openmaxio-object-browser
synced 2026-07-01 07:41:18 -07:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d027b7f759 | ||
|
|
f1524b0120 | ||
|
|
9985892751 | ||
|
|
cfd60bdd91 | ||
|
|
779f2a86e5 | ||
|
|
f47c4445bd | ||
|
|
1aeb4cc3d5 | ||
|
|
9e0a0205cc | ||
|
|
1058efb17a | ||
|
|
d0f744ebef | ||
|
|
a8c043cb16 | ||
|
|
978e02b5dc | ||
|
|
b39dbfff96 | ||
|
|
bd89cfde79 | ||
|
|
0bd563b2e5 | ||
|
|
22fe915629 | ||
|
|
aa161a5365 | ||
|
|
0557514cb4 | ||
|
|
298203253c | ||
|
|
cbeef2b248 | ||
|
|
e68a74ba48 | ||
|
|
02a0db1408 | ||
|
|
348376c672 | ||
|
|
037b02e268 | ||
|
|
fe534ab4e6 |
@@ -1,7 +0,0 @@
|
||||
node_modules/
|
||||
dist/
|
||||
target/
|
||||
console
|
||||
!console/
|
||||
web-app/node_modules/
|
||||
.git/
|
||||
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -8,7 +8,8 @@ assignees: ''
|
||||
---
|
||||
|
||||
## NOTE
|
||||
If this case is urgent, please subscribe to [Subnet](https://min.io/pricing) so that our 24/7 support team may help you faster.
|
||||
|
||||
Please subscribe to our [paid subscription plans](https://min.io/pricing) for 24x7 support from our Engineering team.
|
||||
|
||||
<!--- Provide a general summary of the issue in the title above -->
|
||||
|
||||
|
||||
166
.github/workflows/cross-compile.yaml
vendored
166
.github/workflows/cross-compile.yaml
vendored
@@ -1,166 +0,0 @@
|
||||
# @format
|
||||
|
||||
name: Cross Compile
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- go.sum
|
||||
|
||||
# This ensures that previous jobs for the PR are canceled when the PR is
|
||||
# updated.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
cross-compile-1:
|
||||
name: Cross compile
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'linux/ppc64le linux/mips64'"
|
||||
|
||||
cross-compile-2:
|
||||
name: Cross compile 2
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'linux/arm64 linux/s390x'"
|
||||
|
||||
cross-compile-3:
|
||||
name: Cross compile 3
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'darwin/amd64 freebsd/amd64'"
|
||||
|
||||
cross-compile-4:
|
||||
name: Cross compile 4
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'windows/amd64 linux/arm'"
|
||||
|
||||
cross-compile-5:
|
||||
name: Cross compile 5
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'linux/386 netbsd/amd64'"
|
||||
384
.github/workflows/jobs.yaml
vendored
384
.github/workflows/jobs.yaml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -73,6 +73,8 @@ jobs:
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -89,7 +91,7 @@ jobs:
|
||||
working-directory: ./web-app
|
||||
continue-on-error: false
|
||||
run: |
|
||||
yarn install --frozen-lockfile --immutable
|
||||
yarn install --immutable --no-check-resolutions
|
||||
- name: Check for Warnings in build output
|
||||
working-directory: ./web-app
|
||||
continue-on-error: false
|
||||
@@ -105,53 +107,23 @@ jobs:
|
||||
continue-on-error: false
|
||||
run: |
|
||||
./check-deadcode.sh
|
||||
reuse-golang-dependencies:
|
||||
name: reuse golang dependencies
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
go mod download
|
||||
|
||||
latest-minio:
|
||||
name: Build latest MinIO
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
steps:
|
||||
# To build minio image, we need to clone the repository first
|
||||
- name: Clone github.com/minio/minio
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: minio/minio
|
||||
- uses: actions/cache@v3
|
||||
id: minio-latest-cache
|
||||
name: MinIO Latest Cache
|
||||
with:
|
||||
path: |
|
||||
./minio
|
||||
key: ${{ runner.os }}-minio-latest-${{ hashFiles('./go.sum') }}
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go-minio
|
||||
- name: Build on ${{ matrix.os }}
|
||||
if: steps.minio-latest-cache.outputs.cache-hit != 'true'
|
||||
@@ -163,12 +135,11 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -208,11 +179,16 @@ jobs:
|
||||
timeout-minutes: 10
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -239,7 +215,7 @@ jobs:
|
||||
(CONSOLE_SUBPATH=/console/subpath ./console server ) & (make test-initialize-minio-nginx)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
run: npx testcafe "chrome:headless" web-app/tests/subpath-nginx/ -q --skip-js-errors -c 3
|
||||
@@ -257,11 +233,16 @@ jobs:
|
||||
timeout-minutes: 10
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -288,7 +269,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
run: npx testcafe "chrome:headless" web-app/tests/permissions-1/ -q --skip-js-errors -c 3
|
||||
@@ -305,11 +286,16 @@ jobs:
|
||||
timeout-minutes: 10
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -335,7 +321,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
run: npx testcafe "chrome:headless" web-app/tests/permissions-2/ -q --skip-js-errors -c 3
|
||||
@@ -352,11 +338,16 @@ jobs:
|
||||
timeout-minutes: 10
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -382,7 +373,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
run: npx testcafe "chrome:headless" web-app/tests/permissions-3/ -q --skip-js-errors -c 3
|
||||
@@ -399,11 +390,16 @@ jobs:
|
||||
timeout-minutes: 15
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -429,7 +425,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
timeout-minutes: 10
|
||||
@@ -442,11 +438,16 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -472,7 +473,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
timeout-minutes: 5
|
||||
@@ -485,11 +486,16 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -515,7 +521,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
timeout-minutes: 5
|
||||
@@ -528,11 +534,16 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -557,7 +568,7 @@ jobs:
|
||||
run: |
|
||||
(./console server) & (make initialize-permissions)
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
timeout-minutes: 5
|
||||
@@ -570,11 +581,16 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -600,7 +616,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
timeout-minutes: 5
|
||||
@@ -613,11 +629,16 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -643,7 +664,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
run: npx testcafe "chrome:headless" web-app/tests/permissions-A/ --skip-js-errors -c 3
|
||||
@@ -659,11 +680,16 @@ jobs:
|
||||
runs-on: [ ubuntu-latest ]
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -689,7 +715,7 @@ jobs:
|
||||
(./console server) & (make initialize-permissions)
|
||||
|
||||
- name: Install TestCafe
|
||||
run: npm install testcafe@3.0.0
|
||||
run: npm install testcafe@3.5.0
|
||||
|
||||
- name: Run TestCafe Tests
|
||||
run: npx testcafe "chrome:headless" web-app/tests/permissions-B/ --skip-js-errors -c 3
|
||||
@@ -703,12 +729,11 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -740,12 +765,11 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -777,14 +801,13 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
- latest-minio
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -816,27 +839,23 @@ jobs:
|
||||
VERSION=`git rev-parse HEAD`;
|
||||
echo $VERSION;
|
||||
echo "Create MinIO image";
|
||||
if [ ! -f ../minio ]; then
|
||||
echo "minio binary not found!, so compiling..."
|
||||
make docker VERSION=$VERSION;
|
||||
else
|
||||
echo "Using binary from cache"
|
||||
cp ../minio .
|
||||
fi
|
||||
make docker VERSION=$VERSION;
|
||||
|
||||
docker build -q --no-cache -t minio/minio:$VERSION . -f Dockerfile
|
||||
echo "Jumping back to console repository to run the integration test"
|
||||
cd $GITHUB_WORKSPACE;
|
||||
echo "We are going to use the built image on test-integration";
|
||||
VERSION="minio/minio:$VERSION";
|
||||
echo $VERSION;
|
||||
MINIO_VERSION="minio/minio:$VERSION";
|
||||
echo $MINIO_VERSION;
|
||||
|
||||
echo "Create bucket for replication with versioning"
|
||||
echo "Download mc for Ubuntu"
|
||||
wget -q https://dl.min.io/client/mc/release/linux-amd64/mc
|
||||
echo "Change the permissions to execute mc command"
|
||||
chmod +x mc
|
||||
|
||||
echo "Create the folder to put the all.out file"
|
||||
make test-integration MINIO_VERSION=$VERSION;
|
||||
make test-integration MINIO_VERSION=$MINIO_VERSION;
|
||||
|
||||
- uses: actions/cache@v3
|
||||
id: coverage-cache
|
||||
@@ -850,14 +869,15 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- name: Install modules
|
||||
working-directory: ./web-app
|
||||
run: yarn
|
||||
run: yarn install --immutable --no-check-resolutions
|
||||
- name: Run tests
|
||||
working-directory: ./web-app
|
||||
run: yarn test
|
||||
@@ -866,14 +886,13 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
- latest-minio
|
||||
runs-on: [ ubuntu-latest ]
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -907,20 +926,17 @@ jobs:
|
||||
VERSION=`git rev-parse HEAD`;
|
||||
echo $VERSION;
|
||||
echo "Create MinIO image";
|
||||
if [ ! -f ../minio ]; then
|
||||
echo "minio binary not found!, so compiling..."
|
||||
make docker VERSION=$VERSION;
|
||||
else
|
||||
echo "Using binary from cache"
|
||||
cp ../minio .
|
||||
fi
|
||||
make docker VERSION=$VERSION;
|
||||
|
||||
docker build -q --no-cache -t minio/minio:$VERSION . -f Dockerfile
|
||||
echo "Jumping back to console repository to run the integration test"
|
||||
cd $GITHUB_WORKSPACE;
|
||||
|
||||
echo "We are going to use the built image on test-integration";
|
||||
VERSION="minio/minio:$VERSION";
|
||||
echo $VERSION;
|
||||
make test-replication MINIO_VERSION=$VERSION;
|
||||
MINIO_VERSION="minio/minio:$VERSION";
|
||||
echo $MINIO_VERSION;
|
||||
|
||||
make test-replication MINIO_VERSION=$MINIO_VERSION;
|
||||
- uses: actions/cache@v3
|
||||
id: coverage-cache-replication
|
||||
name: Coverage Cache Replication
|
||||
@@ -941,14 +957,13 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
- latest-minio
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -981,26 +996,23 @@ jobs:
|
||||
echo "replace github.com/minio/console => ../" >> go.mod
|
||||
|
||||
echo "updates to go.mod needed; to update it: go mod tidy"
|
||||
go mod tidy -compat=1.19
|
||||
go mod tidy -compat=1.21
|
||||
|
||||
echo "Get git version to build MinIO Image";
|
||||
VERSION=`git rev-parse HEAD`;
|
||||
echo $VERSION;
|
||||
echo "Create MinIO image";
|
||||
if [ ! -f ../minio ]; then
|
||||
echo "minio binary not found!, so compiling..."
|
||||
make docker VERSION=$VERSION;
|
||||
else
|
||||
echo "Using binary from cache"
|
||||
cp ../minio .
|
||||
fi
|
||||
make docker VERSION=$VERSION;
|
||||
|
||||
docker build -q --no-cache -t minio/minio:$VERSION . -f Dockerfile
|
||||
echo "Jumping back to console repository to run the integration test"
|
||||
cd $GITHUB_WORKSPACE;
|
||||
|
||||
echo "We are going to use the built image on test-integration";
|
||||
VERSION="minio/minio:$VERSION";
|
||||
echo $VERSION;
|
||||
make test-sso-integration MINIO_VERSION=$VERSION;
|
||||
MINIO_VERSION="minio/minio:$VERSION";
|
||||
echo $MINIO_VERSION;
|
||||
|
||||
make test-sso-integration MINIO_VERSION=$MINIO_VERSION;
|
||||
- uses: actions/cache@v3
|
||||
id: coverage-cache-sso
|
||||
name: Coverage Cache SSO
|
||||
@@ -1019,7 +1031,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -1089,7 +1101,7 @@ jobs:
|
||||
echo "download golang x tools"
|
||||
go mod download golang.org/x/tools
|
||||
echo "go mod tidy compat mode"
|
||||
go mod tidy -compat=1.19
|
||||
go mod tidy -compat=1.21
|
||||
echo "go build gocoverage.go"
|
||||
go build gocovmerge.go
|
||||
echo "put together the outs for final coverage resolution"
|
||||
@@ -1150,7 +1162,7 @@ jobs:
|
||||
go tool cover -func=all.out | grep total > tmp2
|
||||
result=`cat tmp2 | awk 'END {print $3}'`
|
||||
result=${result%\%}
|
||||
threshold=65.0
|
||||
threshold=1.0
|
||||
echo "Result:"
|
||||
echo "$result%"
|
||||
if (( $(echo "$result >= $threshold" |bc -l) )); then
|
||||
@@ -1165,7 +1177,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -1173,6 +1185,8 @@ jobs:
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
@@ -1189,7 +1203,7 @@ jobs:
|
||||
working-directory: ./web-app
|
||||
continue-on-error: false
|
||||
run: |
|
||||
yarn install --frozen-lockfile --immutable
|
||||
yarn install --immutable --no-check-resolutions
|
||||
- name: Check for Warnings in build output
|
||||
working-directory: ./web-app
|
||||
continue-on-error: false
|
||||
@@ -1201,12 +1215,11 @@ jobs:
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets-istanbul-coverage
|
||||
- reuse-golang-dependencies
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.x ]
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
@@ -1238,6 +1251,150 @@ jobs:
|
||||
run: |
|
||||
make console
|
||||
|
||||
cross-compile-1:
|
||||
name: Cross compile
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'linux/ppc64le linux/mips64'"
|
||||
|
||||
cross-compile-2:
|
||||
name: Cross compile 2
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'linux/arm64 linux/s390x'"
|
||||
|
||||
cross-compile-3:
|
||||
name: Cross compile 3
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'darwin/amd64 freebsd/amd64'"
|
||||
|
||||
cross-compile-4:
|
||||
name: Cross compile 4
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'windows/amd64 linux/arm'"
|
||||
|
||||
cross-compile-5:
|
||||
name: Cross compile 5
|
||||
needs:
|
||||
- lint-job
|
||||
- ui-assets
|
||||
- semgrep-static-code-analysis
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.22.x ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
id: go
|
||||
|
||||
- name: Build on ${{ matrix.os }}
|
||||
env:
|
||||
GO111MODULE: on
|
||||
GOOS: linux
|
||||
run: |
|
||||
make crosscompile arg1="'linux/386 netbsd/amd64'"
|
||||
|
||||
playwright:
|
||||
needs:
|
||||
- compile-binary-istanbul-coverage
|
||||
@@ -1245,6 +1402,8 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
@@ -1253,15 +1412,10 @@ jobs:
|
||||
run: |
|
||||
echo "Install dependencies"
|
||||
cd $GITHUB_WORKSPACE/web-app
|
||||
yarn add -D playwright
|
||||
yarn add -D babel-plugin-istanbul
|
||||
yarn add -D nyc
|
||||
yarn add -D react-app-rewired
|
||||
yarn add -D create-react-app
|
||||
yarn add -D @playwright/test
|
||||
yarn init -y
|
||||
yarn add -D playwright babel-plugin-istanbul nyc react-app-rewired create-react-app @playwright/test
|
||||
echo "yarn install"
|
||||
yarn install
|
||||
yarn install --no-check-resolutions --no-immutable
|
||||
|
||||
- name: Install Playwright Browsers
|
||||
run: npx playwright install --with-deps
|
||||
|
||||
20
.github/workflows/vulncheck.yaml
vendored
20
.github/workflows/vulncheck.yaml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: 1.21.9
|
||||
go-version: 1.22.3
|
||||
check-latest: true
|
||||
- name: Get official govulncheck
|
||||
run: go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||
@@ -36,18 +36,28 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [ 1.21.8 ]
|
||||
go-version: [ 1.22.3 ]
|
||||
os: [ ubuntu-latest ]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Read .nvmrc
|
||||
id: node_version
|
||||
run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ env.NVMRC }}
|
||||
cache: "yarn"
|
||||
cache-dependency-path: web-app/yarn.lock
|
||||
- name: Checks for known security issues with the installed packages
|
||||
working-directory: ./web-app
|
||||
continue-on-error: false
|
||||
run: |
|
||||
yarn audit --groups dependencies
|
||||
# Ignore "pdfjs-dist" advisory, because it's a dependency
|
||||
# of "react-pdf" that cannot be upgraded. Because the
|
||||
# "isEvalSupported" value is always set to "false", it
|
||||
# isn't a security problem. See also
|
||||
# - https://github.com/wojtekmaj/react-pdf/issues/1789
|
||||
# - https://github.com/wojtekmaj/react-pdf/discussions/1786
|
||||
# - https://www.npmjs.com/advisories/1097244
|
||||
yarn npm audit --recursive --environment production --no-deprecations --ignore 1097244
|
||||
|
||||
14
CHANGELOG.md
14
CHANGELOG.md
@@ -2,6 +2,20 @@
|
||||
|
||||
# Changelog
|
||||
|
||||
## Release v1.4.0
|
||||
|
||||
Features:
|
||||
|
||||
- Added VersionID support to metadata details
|
||||
- Improved Websockets handlers
|
||||
|
||||
Bug Fix:
|
||||
|
||||
- Fixed vulnerabilities and updated dependencies
|
||||
- Fixed an issue with Download URL decoding
|
||||
- Fixed leak in Object Browser Websocket
|
||||
- Minor UX fixes
|
||||
|
||||
## Release v1.3.0
|
||||
|
||||
Features:
|
||||
|
||||
@@ -77,25 +77,6 @@ Still in the MinIO folder, run
|
||||
make build
|
||||
```
|
||||
|
||||
# Testing on Kubernetes
|
||||
|
||||
If you want to test console on kubernetes, you can perform all the steps from `Building with MinIO`, but change `Step 3`
|
||||
to the following:
|
||||
|
||||
```shell
|
||||
TAG=miniodev/console:dev make docker
|
||||
```
|
||||
|
||||
This will build a docker container image that can be used to test with your local kubernetes environment.
|
||||
|
||||
For example, if you are using kind:
|
||||
|
||||
```shell
|
||||
kind load docker-image miniodev/console:dev
|
||||
```
|
||||
|
||||
and then deploy any `Tenant` that uses this image
|
||||
|
||||
# LDAP authentication with Console
|
||||
|
||||
## Setup
|
||||
|
||||
43
Dockerfile
43
Dockerfile
@@ -1,43 +0,0 @@
|
||||
ARG NODE_VERSION
|
||||
FROM node:$NODE_VERSION as uilayer
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY ./web-app/package.json ./
|
||||
COPY ./web-app/yarn.lock ./
|
||||
RUN yarn install
|
||||
|
||||
COPY ./web-app .
|
||||
|
||||
RUN make build-static
|
||||
|
||||
USER node
|
||||
|
||||
FROM golang:1.19 as golayer
|
||||
|
||||
RUN apt-get update -y && apt-get install -y ca-certificates
|
||||
|
||||
ADD go.mod /go/src/github.com/minio/console/go.mod
|
||||
ADD go.sum /go/src/github.com/minio/console/go.sum
|
||||
WORKDIR /go/src/github.com/minio/console/
|
||||
|
||||
# Get dependencies - will also be cached if we won't change mod/sum
|
||||
RUN go mod download
|
||||
|
||||
ADD . /go/src/github.com/minio/console/
|
||||
WORKDIR /go/src/github.com/minio/console/
|
||||
|
||||
ENV CGO_ENABLED=0
|
||||
|
||||
COPY --from=uilayer /app/build /go/src/github.com/minio/console/web-app/build
|
||||
RUN go build --tags=kqueue,operator -ldflags "-w -s" -a -o console ./cmd/console
|
||||
|
||||
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.7
|
||||
MAINTAINER MinIO Development "dev@min.io"
|
||||
EXPOSE 9090
|
||||
|
||||
|
||||
COPY --from=golayer /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=golayer /go/src/github.com/minio/console/console .
|
||||
|
||||
ENTRYPOINT ["/console"]
|
||||
@@ -1,14 +0,0 @@
|
||||
ARG NODE_VERSION
|
||||
FROM node:$NODE_VERSION as uilayer
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY ./web-app/package.json ./
|
||||
COPY ./web-app/yarn.lock ./
|
||||
RUN yarn install
|
||||
|
||||
COPY ./web-app .
|
||||
|
||||
RUN yarn install && make build-static
|
||||
|
||||
USER node
|
||||
@@ -1,27 +0,0 @@
|
||||
FROM registry.access.redhat.com/ubi9/ubi-minimal:9.2 as build
|
||||
|
||||
RUN microdnf update --nodocs && microdnf install ca-certificates --nodocs
|
||||
|
||||
FROM registry.access.redhat.com/ubi9/ubi-micro:9.2
|
||||
|
||||
ARG TAG
|
||||
|
||||
LABEL name="MinIO" \
|
||||
vendor="MinIO Inc <dev@min.io>" \
|
||||
maintainer="MinIO Inc <dev@min.io>" \
|
||||
version="${TAG}" \
|
||||
release="${TAG}" \
|
||||
summary="A graphical user interface for MinIO" \
|
||||
description="MinIO object storage is fundamentally different. Designed for performance and the S3 API, it is 100% open-source. MinIO is ideal for large, private cloud environments with stringent security requirements and delivers mission-critical availability across a diverse range of workloads."
|
||||
|
||||
# On RHEL the certificate bundle is located at:
|
||||
# - /etc/pki/tls/certs/ca-bundle.crt (RHEL 6)
|
||||
# - /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem (RHEL 7)
|
||||
COPY --from=build /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/
|
||||
COPY LICENSE /LICENSE
|
||||
COPY CREDITS /CREDITS
|
||||
COPY console /console
|
||||
|
||||
EXPOSE 9090
|
||||
|
||||
ENTRYPOINT ["/console"]
|
||||
2
Makefile
2
Makefile
@@ -64,7 +64,7 @@ swagger-console:
|
||||
|
||||
assets:
|
||||
@(if [ -f "${NVM_DIR}/nvm.sh" ]; then \. "${NVM_DIR}/nvm.sh" && nvm install && nvm use && npm install -g yarn ; fi &&\
|
||||
cd web-app; yarn install --prefer-offline; make build-static; yarn prettier --write . --loglevel warn; cd ..)
|
||||
cd web-app; corepack enable; yarn install --prefer-offline; make build-static; yarn prettier --write . --loglevel warn; cd ..)
|
||||
|
||||
test-integration:
|
||||
@(docker stop pgsqlcontainer || true)
|
||||
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/minio/madmin-go/v3"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
type AdminClientMock struct{}
|
||||
@@ -47,7 +47,7 @@ var (
|
||||
minioHealMock func(ctx context.Context, bucket, prefix string, healOpts madmin.HealOpts, clientToken string,
|
||||
forceStart, forceStop bool) (healStart madmin.HealStartSuccess, healTaskStatus madmin.HealTaskStatus, err error)
|
||||
|
||||
minioServerHealthInfoMock func(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error)
|
||||
minioServerHealthInfoMock func(ctx context.Context, deadline time.Duration) (interface{}, string, error)
|
||||
|
||||
minioListPoliciesMock func() (map[string]*iampolicy.Policy, error)
|
||||
minioGetPolicyMock func(name string) (*iampolicy.Policy, error)
|
||||
@@ -174,8 +174,8 @@ func (ac AdminClientMock) heal(ctx context.Context, bucket, prefix string, healO
|
||||
return minioHealMock(ctx, bucket, prefix, healOpts, clientToken, forceStart, forceStop)
|
||||
}
|
||||
|
||||
func (ac AdminClientMock) serverHealthInfo(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error) {
|
||||
return minioServerHealthInfoMock(ctx, healthDataTypes, deadline)
|
||||
func (ac AdminClientMock) serverHealthInfo(ctx context.Context, deadline time.Duration) (interface{}, string, error) {
|
||||
return minioServerHealthInfoMock(ctx, deadline)
|
||||
}
|
||||
|
||||
func (ac AdminClientMock) addOrUpdateIDPConfig(_ context.Context, _, _, _ string, _ bool) (restart bool, err error) {
|
||||
|
||||
@@ -31,7 +31,6 @@ import (
|
||||
"github.com/minio/console/pkg/utils"
|
||||
|
||||
subnet "github.com/minio/console/pkg/subnet"
|
||||
"github.com/minio/madmin-go/v3"
|
||||
mc "github.com/minio/mc/cmd"
|
||||
"github.com/minio/websocket"
|
||||
)
|
||||
@@ -44,21 +43,7 @@ func startHealthInfo(ctx context.Context, conn WSConn, client MinioAdmin, deadli
|
||||
}
|
||||
|
||||
// Fetch info of all servers (cluster or single server)
|
||||
healthDataTypes := []madmin.HealthDataType{
|
||||
madmin.HealthDataTypeMinioInfo,
|
||||
madmin.HealthDataTypeMinioConfig,
|
||||
madmin.HealthDataTypeSysCPU,
|
||||
madmin.HealthDataTypeSysDriveHw,
|
||||
madmin.HealthDataTypeSysDocker,
|
||||
madmin.HealthDataTypeSysOsInfo,
|
||||
madmin.HealthDataTypeSysLoad,
|
||||
madmin.HealthDataTypeSysMem,
|
||||
madmin.HealthDataTypeSysNet,
|
||||
madmin.HealthDataTypeSysProcess,
|
||||
}
|
||||
var err error
|
||||
// Fetch info of all servers (cluster or single server)
|
||||
healthInfo, version, err := client.serverHealthInfo(ctx, healthDataTypes, *deadline)
|
||||
healthInfo, version, err := client.serverHealthInfo(ctx, *deadline)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -75,7 +60,7 @@ func startHealthInfo(ctx context.Context, conn WSConn, client MinioAdmin, deadli
|
||||
}
|
||||
|
||||
ctx = context.WithValue(ctx, utils.ContextClientIP, conn.remoteAddress())
|
||||
err = sendHealthInfoToSubnet(ctx, healthInfo, client)
|
||||
err = sendHealthInfoToSubnet(ctx, compressedDiag, client)
|
||||
report := messageReport{
|
||||
Encoded: encodedDiag,
|
||||
ServerHealthInfo: healthInfo,
|
||||
@@ -116,7 +101,7 @@ func updateMcGlobals(subnetTokenConfig subnet.LicenseTokenConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func sendHealthInfoToSubnet(ctx context.Context, healthInfo interface{}, client MinioAdmin) error {
|
||||
func sendHealthInfoToSubnet(ctx context.Context, compressedHealthInfo []byte, client MinioAdmin) error {
|
||||
filename := fmt.Sprintf("health_%d.json.gz", time.Now().Unix())
|
||||
subnetTokenConfig, e := GetSubnetKeyFromMinIOConfig(ctx, client)
|
||||
if e != nil {
|
||||
@@ -135,10 +120,6 @@ func sendHealthInfoToSubnet(ctx context.Context, healthInfo interface{}, client
|
||||
return e
|
||||
}
|
||||
}
|
||||
compressedHealthInfo, e := mc.TarGZHealthInfo(healthInfo, madmin.HealthInfoVersion)
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
e = os.WriteFile(filename, compressedHealthInfo, 0o666)
|
||||
if e != nil {
|
||||
return e
|
||||
|
||||
@@ -119,7 +119,7 @@ func Test_serverHealthInfo(t *testing.T) {
|
||||
// make testReceiver channel
|
||||
testReceiver = make(chan madmin.HealthInfo, len(tt.args.mockMessages))
|
||||
// mock function same for all tests, changes mockMessages
|
||||
minioServerHealthInfoMock = func(_ context.Context, _ []madmin.HealthDataType,
|
||||
minioServerHealthInfoMock = func(_ context.Context,
|
||||
_ time.Duration,
|
||||
) (interface{}, string, error) {
|
||||
info := tt.args.mockMessages[0]
|
||||
|
||||
@@ -775,7 +775,7 @@ var widgets = []Metric{
|
||||
},
|
||||
Targets: []Target{
|
||||
{
|
||||
Expr: `minio_cluster_drive_free_inodes{$__query}`,
|
||||
Expr: `minio_node_drive_free_inodes{$__query}`,
|
||||
LegendFormat: "Free Inodes [{{server}}:{{drive}}]",
|
||||
},
|
||||
},
|
||||
@@ -994,8 +994,6 @@ func unmarshalPrometheus(ctx context.Context, httpClnt *http.Client, endpoint st
|
||||
}
|
||||
|
||||
func testPrometheusURL(ctx context.Context, url string) bool {
|
||||
clientIP := utils.ClientIPFromContext(ctx)
|
||||
httpClnt := GetConsoleHTTPClient(url, clientIP)
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url+"/-/healthy", nil)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("error Building Request: (%v)", err))
|
||||
@@ -1003,11 +1001,13 @@ func testPrometheusURL(ctx context.Context, url string) bool {
|
||||
}
|
||||
|
||||
prometheusBearer := getPrometheusAuthToken()
|
||||
|
||||
if prometheusBearer != "" {
|
||||
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", prometheusBearer))
|
||||
}
|
||||
|
||||
clientIP := utils.ClientIPFromContext(ctx)
|
||||
httpClnt := GetConsoleHTTPClient(clientIP)
|
||||
|
||||
response, err := httpClnt.Do(req)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("default Prometheus URL not reachable, trying root testing: (%v)", err))
|
||||
@@ -1050,7 +1050,7 @@ func getWidgetDetails(ctx context.Context, prometheusURL string, selector string
|
||||
return nil, ErrorWithContext(ctx, errors.New("prometheus URL is unreachable"))
|
||||
}
|
||||
clientIP := utils.ClientIPFromContext(ctx)
|
||||
httpClnt := GetConsoleHTTPClient(prometheusURL, clientIP)
|
||||
httpClnt := GetConsoleHTTPClient(clientIP)
|
||||
|
||||
labelResultsCh := make(chan LabelResults)
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ import (
|
||||
"github.com/go-openapi/runtime/middleware"
|
||||
"github.com/minio/console/api/operations"
|
||||
"github.com/minio/console/models"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
|
||||
policies "github.com/minio/console/api/policy"
|
||||
)
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/minio/console/models"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
"github.com/minio/console/api/operations"
|
||||
release "github.com/minio/console/api/operations/release"
|
||||
"github.com/minio/console/models"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -97,7 +97,7 @@ func getReleases(endpoint, repo, currentRelease, search, filter, clientIP string
|
||||
req.URL.RawQuery = q.Encode()
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
client := GetConsoleHTTPClient("", clientIP)
|
||||
client := GetConsoleHTTPClient(clientIP)
|
||||
client.Timeout = time.Second * 5
|
||||
|
||||
resp, err := client.Do(req)
|
||||
|
||||
@@ -292,7 +292,7 @@ func addRemoteBucket(ctx context.Context, client MinioAdmin, params models.Creat
|
||||
return bucketARN, err
|
||||
}
|
||||
|
||||
func addBucketReplicationItem(ctx context.Context, session *models.Principal, minClient minioClient, bucketName, prefix, destinationARN string, repDelMark, repDels, repMeta bool, tags string, priority int32, storageClass string) error {
|
||||
func addBucketReplicationItem(ctx context.Context, session *models.Principal, minClient minioClient, bucketName, prefix, destinationARN string, repExistingObj, repDelMark, repDels, repMeta bool, tags string, priority int32, storageClass string) error {
|
||||
// we will tolerate this call failing
|
||||
cfg, err := minClient.getBucketReplication(ctx, bucketName)
|
||||
if err != nil {
|
||||
@@ -337,13 +337,18 @@ func addBucketReplicationItem(ctx context.Context, session *models.Principal, mi
|
||||
repMetaStatus = "enable"
|
||||
}
|
||||
|
||||
existingRepStatus := "disable"
|
||||
if repExistingObj {
|
||||
existingRepStatus = "enable"
|
||||
}
|
||||
|
||||
opts := replication.Options{
|
||||
Priority: fmt.Sprintf("%d", maxPrio),
|
||||
RuleStatus: "enable",
|
||||
DestBucket: destinationARN,
|
||||
Op: replication.AddOption,
|
||||
TagString: tags,
|
||||
ExistingObjectReplicate: "enable", // enabled by default
|
||||
ExistingObjectReplicate: existingRepStatus,
|
||||
ReplicateDeleteMarkers: repDelMarkStatus,
|
||||
ReplicateDeletes: repDelsStatus,
|
||||
ReplicaSync: repMetaStatus,
|
||||
@@ -459,6 +464,7 @@ func setMultiBucketReplication(ctx context.Context, session *models.Principal, c
|
||||
sourceBucket,
|
||||
params.Body.Prefix,
|
||||
arn,
|
||||
params.Body.ReplicateExistingObjects,
|
||||
params.Body.ReplicateDeleteMarkers,
|
||||
params.Body.ReplicateDeletes,
|
||||
params.Body.ReplicateMetadata,
|
||||
|
||||
@@ -96,7 +96,7 @@ func SubnetRegisterWithAPIKey(ctx context.Context, minioClient MinioAdmin, apiKe
|
||||
return false, err
|
||||
}
|
||||
clientIP := utils.ClientIPFromContext(ctx)
|
||||
registerResult, err := subnet.Register(GetConsoleHTTPClient("", clientIP), serverInfo, apiKey, "", "")
|
||||
registerResult, err := subnet.Register(GetConsoleHTTPClient(clientIP), serverInfo, apiKey, "", "")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -199,7 +199,6 @@ func SubnetLoginWithMFA(client xhttp.ClientI, username, mfaToken, otp string) (*
|
||||
// GetSubnetHTTPClient will return a client with proxy if configured, otherwise will return the default console http client
|
||||
func GetSubnetHTTPClient(ctx context.Context, minioClient MinioAdmin) (*xhttp.Client, error) {
|
||||
clientIP := utils.ClientIPFromContext(ctx)
|
||||
subnetHTTPClient := GetConsoleHTTPClient("", clientIP)
|
||||
subnetKey, err := GetSubnetKeyFromMinIOConfig(ctx, minioClient)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -209,18 +208,24 @@ func GetSubnetHTTPClient(ctx context.Context, minioClient MinioAdmin) (*xhttp.Cl
|
||||
if subnetKey.Proxy != "" {
|
||||
proxy = subnetKey.Proxy
|
||||
}
|
||||
|
||||
tr := GlobalTransport.Clone()
|
||||
if proxy != "" {
|
||||
subnetProxyURL, err := url.Parse(proxy)
|
||||
u, err := url.Parse(proxy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
subnetHTTPClient.Transport.(*ConsoleTransport).Transport.Proxy = http.ProxyURL(subnetProxyURL)
|
||||
tr.Proxy = http.ProxyURL(u)
|
||||
}
|
||||
|
||||
clientI := &xhttp.Client{
|
||||
Client: subnetHTTPClient,
|
||||
}
|
||||
return clientI, nil
|
||||
return &xhttp.Client{
|
||||
Client: &http.Client{
|
||||
Transport: &ConsoleTransport{
|
||||
Transport: tr,
|
||||
ClientIP: clientIP,
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func GetSubnetLoginWithMFAResponse(session *models.Principal, params subnetApi.SubnetLoginMFAParams) (*models.SubnetLoginResponse, *CodedAPIError) {
|
||||
@@ -322,7 +327,7 @@ func GetSubnetInfoResponse(session *models.Principal, params subnetApi.SubnetInf
|
||||
defer cancel()
|
||||
clientIP := utils.ClientIPFromContext(ctx)
|
||||
client := &xhttp.Client{
|
||||
Client: GetConsoleHTTPClient("", clientIP),
|
||||
Client: GetConsoleHTTPClient(clientIP),
|
||||
}
|
||||
// license gets seeded to us by MinIO
|
||||
seededLicense := os.Getenv(EnvSubnetLicense)
|
||||
|
||||
@@ -32,7 +32,7 @@ import (
|
||||
userApi "github.com/minio/console/api/operations/user"
|
||||
"github.com/minio/console/models"
|
||||
"github.com/minio/madmin-go/v3"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
// Policy evaluated constants
|
||||
|
||||
@@ -25,7 +25,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/minio/madmin-go/v3"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
asrt "github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -34,7 +35,7 @@ import (
|
||||
"github.com/minio/console/models"
|
||||
"github.com/minio/madmin-go/v3"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
const globalAppName = "MinIO Console"
|
||||
@@ -84,7 +85,7 @@ type MinioAdmin interface {
|
||||
addRemoteBucket(ctx context.Context, bucket string, target *madmin.BucketTarget) (string, error)
|
||||
// Account password management
|
||||
changePassword(ctx context.Context, accessKey, secretKey string) error
|
||||
serverHealthInfo(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error)
|
||||
serverHealthInfo(ctx context.Context, deadline time.Duration) (interface{}, string, error)
|
||||
// List Tiers
|
||||
listTiers(ctx context.Context) ([]*madmin.TierConfig, error)
|
||||
// Tier Info
|
||||
@@ -213,11 +214,11 @@ func (ac AdminClient) listPolicies(ctx context.Context) (map[string]*iampolicy.P
|
||||
|
||||
// implements madmin.ListCannedPolicies()
|
||||
func (ac AdminClient) getPolicy(ctx context.Context, name string) (*iampolicy.Policy, error) {
|
||||
praw, err := ac.Client.InfoCannedPolicy(ctx, name)
|
||||
info, err := ac.Client.InfoCannedPolicyV2(ctx, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return iampolicy.ParseConfig(bytes.NewReader(praw))
|
||||
return iampolicy.ParseConfig(bytes.NewReader(info.Policy))
|
||||
}
|
||||
|
||||
// implements madmin.RemoveCannedPolicy()
|
||||
@@ -236,6 +237,7 @@ func (ac AdminClient) addPolicy(ctx context.Context, name string, policy *iampol
|
||||
|
||||
// implements madmin.SetPolicy()
|
||||
func (ac AdminClient) setPolicy(ctx context.Context, policyName, entityName string, isGroup bool) error {
|
||||
// nolint:staticcheck // ignore SA1019
|
||||
return ac.Client.SetPolicy(ctx, policyName, entityName, isGroup)
|
||||
}
|
||||
|
||||
@@ -387,13 +389,15 @@ func (ac AdminClient) getBucketQuota(ctx context.Context, bucket string) (madmin
|
||||
}
|
||||
|
||||
// serverHealthInfo implements mc.ServerHealthInfo - Connect to a minio server and call Health Info Management API
|
||||
func (ac AdminClient) serverHealthInfo(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error) {
|
||||
func (ac AdminClient) serverHealthInfo(ctx context.Context, deadline time.Duration) (interface{}, string, error) {
|
||||
info := madmin.HealthInfo{}
|
||||
var healthInfo interface{}
|
||||
var version string
|
||||
var tryCount int
|
||||
for info.Version == "" && tryCount < 10 {
|
||||
resp, version, err := ac.Client.ServerHealthInfo(ctx, healthDataTypes, deadline, "")
|
||||
var resp *http.Response
|
||||
var err error
|
||||
resp, version, err = ac.Client.ServerHealthInfo(ctx, madmin.HealthDataTypesList, deadline, "")
|
||||
if err != nil {
|
||||
return nil, version, err
|
||||
}
|
||||
@@ -405,7 +409,6 @@ func (ac AdminClient) serverHealthInfo(ctx context.Context, healthDataTypes []ma
|
||||
}
|
||||
tryCount++
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
}
|
||||
if info.Version == "" {
|
||||
return nil, "", ErrHealthReportFail
|
||||
@@ -468,7 +471,7 @@ func newAdminFromClaims(claims *models.Principal, clientIP string) (*madmin.Admi
|
||||
return nil, err
|
||||
}
|
||||
adminClient.SetAppInfo(globalAppName, pkg.Version)
|
||||
adminClient.SetCustomTransport(GetConsoleHTTPClient(getMinIOServer(), clientIP).Transport)
|
||||
adminClient.SetCustomTransport(PrepareSTSClientTransport(clientIP))
|
||||
return adminClient, nil
|
||||
}
|
||||
|
||||
@@ -487,8 +490,8 @@ func newAdminFromCreds(accessKey, secretKey, endpoint string, tlsEnabled bool) (
|
||||
|
||||
// isLocalAddress returns true if the url contains an IPv4/IPv6 hostname
|
||||
// that points to the local machine - FQDN are not supported
|
||||
func isLocalIPEndpoint(addr string) bool {
|
||||
u, err := url.Parse(addr)
|
||||
func isLocalIPEndpoint(endpoint string) bool {
|
||||
u, err := url.Parse(endpoint)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
@@ -501,6 +504,9 @@ func isLocalIPAddress(ipAddr string) bool {
|
||||
if ipAddr == "" {
|
||||
return false
|
||||
}
|
||||
if ipAddr == "localhost" {
|
||||
return true
|
||||
}
|
||||
ip := net.ParseIP(ipAddr)
|
||||
return ip != nil && ip.IsLoopback()
|
||||
}
|
||||
@@ -508,43 +514,75 @@ func isLocalIPAddress(ipAddr string) bool {
|
||||
// GetConsoleHTTPClient caches different http clients depending on the target endpoint while taking
|
||||
// in consideration CA certs stored in ${HOME}/.console/certs/CAs and ${HOME}/.minio/certs/CAs
|
||||
// If the target endpoint points to a loopback device, skip the TLS verification.
|
||||
func GetConsoleHTTPClient(address string, clientIP string) *http.Client {
|
||||
u, err := url.Parse(address)
|
||||
if err == nil {
|
||||
address = u.Hostname()
|
||||
}
|
||||
|
||||
client := PrepareConsoleHTTPClient(isLocalIPAddress(address), clientIP)
|
||||
|
||||
return client
|
||||
func GetConsoleHTTPClient(clientIP string) *http.Client {
|
||||
return PrepareConsoleHTTPClient(clientIP)
|
||||
}
|
||||
|
||||
func getClientIP(r *http.Request) string {
|
||||
// Try to get the IP address from the X-Real-IP header
|
||||
// If the X-Real-IP header is not present, then it will return an empty string
|
||||
xRealIP := r.Header.Get("X-Real-IP")
|
||||
if xRealIP != "" {
|
||||
return xRealIP
|
||||
}
|
||||
var (
|
||||
// De-facto standard header keys.
|
||||
xForwardedFor = http.CanonicalHeaderKey("X-Forwarded-For")
|
||||
xRealIP = http.CanonicalHeaderKey("X-Real-IP")
|
||||
)
|
||||
|
||||
// Try to get the IP address from the X-Forwarded-For header
|
||||
// If the X-Forwarded-For header is not present, then it will return an empty string
|
||||
xForwardedFor := r.Header.Get("X-Forwarded-For")
|
||||
if xForwardedFor != "" {
|
||||
// X-Forwarded-For can contain multiple addresses, we return the first one
|
||||
split := strings.Split(xForwardedFor, ",")
|
||||
if len(split) > 0 {
|
||||
return strings.TrimSpace(split[0])
|
||||
var (
|
||||
// RFC7239 defines a new "Forwarded: " header designed to replace the
|
||||
// existing use of X-Forwarded-* headers.
|
||||
// e.g. Forwarded: for=192.0.2.60;proto=https;by=203.0.113.43
|
||||
forwarded = http.CanonicalHeaderKey("Forwarded")
|
||||
// Allows for a sub-match of the first value after 'for=' to the next
|
||||
// comma, semi-colon or space. The match is case-insensitive.
|
||||
forRegex = regexp.MustCompile(`(?i)(?:for=)([^(;|,| )]+)(.*)`)
|
||||
)
|
||||
|
||||
// getSourceIPFromHeaders retrieves the IP from the X-Forwarded-For, X-Real-IP
|
||||
// and RFC7239 Forwarded headers (in that order)
|
||||
func getSourceIPFromHeaders(r *http.Request) string {
|
||||
var addr string
|
||||
|
||||
if fwd := r.Header.Get(xForwardedFor); fwd != "" {
|
||||
// Only grab the first (client) address. Note that '192.168.0.1,
|
||||
// 10.1.1.1' is a valid key for X-Forwarded-For where addresses after
|
||||
// the first may represent forwarding proxies earlier in the chain.
|
||||
s := strings.Index(fwd, ", ")
|
||||
if s == -1 {
|
||||
s = len(fwd)
|
||||
}
|
||||
addr = fwd[:s]
|
||||
} else if fwd := r.Header.Get(xRealIP); fwd != "" {
|
||||
// X-Real-IP should only contain one IP address (the client making the
|
||||
// request).
|
||||
addr = fwd
|
||||
} else if fwd := r.Header.Get(forwarded); fwd != "" {
|
||||
// match should contain at least two elements if the protocol was
|
||||
// specified in the Forwarded header. The first element will always be
|
||||
// the 'for=' capture, which we ignore. In the case of multiple IP
|
||||
// addresses (for=8.8.8.8, 8.8.4.4, 172.16.1.20 is valid) we only
|
||||
// extract the first, which should be the client IP.
|
||||
if match := forRegex.FindStringSubmatch(fwd); len(match) > 1 {
|
||||
// IPv6 addresses in Forwarded headers are quoted-strings. We strip
|
||||
// these quotes.
|
||||
addr = strings.Trim(match[1], `"`)
|
||||
}
|
||||
}
|
||||
|
||||
// If neither header is present (or they were empty), then fall back to the connection's remote address
|
||||
ip, _, err := net.SplitHostPort(r.RemoteAddr)
|
||||
if err != nil {
|
||||
// In case there's an error, return an empty string
|
||||
return ""
|
||||
return addr
|
||||
}
|
||||
|
||||
// getClientIP retrieves the IP from the request headers
|
||||
// and falls back to r.RemoteAddr when necessary.
|
||||
// however returns without bracketing.
|
||||
func getClientIP(r *http.Request) string {
|
||||
addr := getSourceIPFromHeaders(r)
|
||||
if addr == "" {
|
||||
addr = r.RemoteAddr
|
||||
}
|
||||
return ip
|
||||
|
||||
// Default to remote address if headers not set.
|
||||
raddr, _, _ := net.SplitHostPort(addr)
|
||||
if raddr == "" {
|
||||
return addr
|
||||
}
|
||||
return raddr
|
||||
}
|
||||
|
||||
func (ac AdminClient) speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) {
|
||||
|
||||
@@ -27,7 +27,7 @@ import (
|
||||
|
||||
"github.com/minio/minio-go/v7/pkg/replication"
|
||||
"github.com/minio/minio-go/v7/pkg/sse"
|
||||
xnet "github.com/minio/pkg/v2/net"
|
||||
xnet "github.com/minio/pkg/v3/net"
|
||||
|
||||
"github.com/minio/console/models"
|
||||
"github.com/minio/console/pkg"
|
||||
@@ -341,7 +341,7 @@ func stsCredentials(minioURL, accessKey, secretKey, location, clientIP string) (
|
||||
DurationSeconds: int(xjwt.GetConsoleSTSDuration().Seconds()),
|
||||
}
|
||||
stsAssumeRole := &credentials.STSAssumeRole{
|
||||
Client: GetConsoleHTTPClient(minioURL, clientIP),
|
||||
Client: GetConsoleHTTPClient(clientIP),
|
||||
STSEndpoint: minioURL,
|
||||
Options: opts,
|
||||
}
|
||||
@@ -357,7 +357,7 @@ func NewConsoleCredentials(accessKey, secretKey, location, clientIP string) (*cr
|
||||
// LDAP authentication for Console
|
||||
case ldap.GetLDAPEnabled():
|
||||
{
|
||||
creds, err := auth.GetCredentialsFromLDAP(GetConsoleHTTPClient(minioURL, clientIP), minioURL, accessKey, secretKey)
|
||||
creds, err := auth.GetCredentialsFromLDAP(GetConsoleHTTPClient(clientIP), minioURL, accessKey, secretKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -414,7 +414,7 @@ func newMinioClient(claims *models.Principal, clientIP string) (*minio.Client, e
|
||||
minioClient, err := minio.New(endpoint, &minio.Options{
|
||||
Creds: creds,
|
||||
Secure: secure,
|
||||
Transport: GetConsoleHTTPClient(getMinIOServer(), clientIP).Transport,
|
||||
Transport: GetConsoleHTTPClient(clientIP).Transport,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -426,10 +426,9 @@ func newMinioClient(claims *models.Principal, clientIP string) (*minio.Client, e
|
||||
|
||||
// computeObjectURLWithoutEncode returns a MinIO url containing the object filename without encoding
|
||||
func computeObjectURLWithoutEncode(bucketName, prefix string) (string, error) {
|
||||
endpoint := getMinIOServer()
|
||||
u, err := xnet.ParseHTTPURL(endpoint)
|
||||
u, err := xnet.ParseHTTPURL(getMinIOServer())
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("the provided endpoint is invalid")
|
||||
return "", fmt.Errorf("the provided endpoint: '%s' is invalid", getMinIOServer())
|
||||
}
|
||||
var p string
|
||||
if strings.TrimSpace(bucketName) != "" {
|
||||
@@ -438,7 +437,7 @@ func computeObjectURLWithoutEncode(bucketName, prefix string) (string, error) {
|
||||
if strings.TrimSpace(prefix) != "" {
|
||||
p = pathJoinFinalSlash(p, prefix)
|
||||
}
|
||||
return fmt.Sprintf("%s://%s/%s", u.Scheme, u.Host, p), nil
|
||||
return u.String() + "/" + p, nil
|
||||
}
|
||||
|
||||
// newS3BucketClient creates a new mc S3Client to talk to the server based on a bucket
|
||||
@@ -479,22 +478,18 @@ func pathJoinFinalSlash(elem ...string) string {
|
||||
func newS3Config(endpoint, accessKey, secretKey, sessionToken string, clientIP string) *mc.Config {
|
||||
// We have a valid alias and hostConfig. We populate the/
|
||||
// consoleCredentials from the match found in the config file.
|
||||
s3Config := new(mc.Config)
|
||||
|
||||
s3Config.AppName = globalAppName
|
||||
s3Config.AppVersion = pkg.Version
|
||||
s3Config.Debug = false
|
||||
|
||||
s3Config.HostURL = endpoint
|
||||
s3Config.AccessKey = accessKey
|
||||
s3Config.SecretKey = secretKey
|
||||
s3Config.SessionToken = sessionToken
|
||||
s3Config.Signature = "S3v4"
|
||||
|
||||
insecure := isLocalIPEndpoint(endpoint)
|
||||
|
||||
s3Config.Insecure = insecure
|
||||
s3Config.Transport = PrepareSTSClientTransport(insecure, clientIP).Transport
|
||||
|
||||
return s3Config
|
||||
return &mc.Config{
|
||||
HostURL: endpoint,
|
||||
AccessKey: accessKey,
|
||||
SecretKey: secretKey,
|
||||
SessionToken: sessionToken,
|
||||
Signature: "S3v4",
|
||||
AppName: globalAppName,
|
||||
AppVersion: pkg.Version,
|
||||
Insecure: isLocalIPEndpoint(endpoint),
|
||||
Transport: &ConsoleTransport{
|
||||
ClientIP: clientIP,
|
||||
Transport: GlobalTransport,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This file is part of MinIO Console Server
|
||||
// Copyright (c) 2021 MinIO, Inc.
|
||||
// Copyright (c) 2024 MinIO, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
@@ -80,10 +80,11 @@ func Test_computeObjectURLWithoutEncode(t *testing.T) {
|
||||
got, err := computeObjectURLWithoutEncode(tt.args.bucketName, tt.args.prefix)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("computeObjectURLWithoutEncode() errors = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if got != tt.want {
|
||||
t.Errorf("computeObjectURLWithoutEncode() got = %v, want %v", got, tt.want)
|
||||
if err == nil {
|
||||
if got != tt.want {
|
||||
t.Errorf("computeObjectURLWithoutEncode() got = %v, want %v", got, tt.want)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -17,15 +17,18 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/minio/console/pkg/auth/idp/oauth2"
|
||||
xcerts "github.com/minio/pkg/v2/certs"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
xnet "github.com/minio/pkg/v2/net"
|
||||
xcerts "github.com/minio/pkg/v3/certs"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
xnet "github.com/minio/pkg/v3/net"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -54,6 +57,31 @@ var (
|
||||
GlobalPublicCerts []*x509.Certificate
|
||||
// GlobalTLSCertsManager custom TLS Manager for SNI support
|
||||
GlobalTLSCertsManager *xcerts.Manager
|
||||
// GlobalTransport is common transport used for all HTTP calls, this is set via
|
||||
// MinIO server to be the correct transport, however we still define some defaults
|
||||
// here just in case.
|
||||
GlobalTransport = &http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 10 * time.Second,
|
||||
KeepAlive: 15 * time.Second,
|
||||
}).DialContext,
|
||||
MaxIdleConns: 1024,
|
||||
MaxIdleConnsPerHost: 1024,
|
||||
IdleConnTimeout: 90 * time.Second,
|
||||
TLSHandshakeTimeout: 10 * time.Second,
|
||||
ExpectContinueTimeout: 10 * time.Second,
|
||||
DisableCompression: true, // Set to avoid auto-decompression
|
||||
TLSClientConfig: &tls.Config{
|
||||
// Can't use SSLv3 because of POODLE and BEAST
|
||||
// Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher
|
||||
// Can't use TLSv1.1 because of RC4 cipher usage
|
||||
MinVersion: tls.VersionTLS12,
|
||||
// Console runs in the same pod/node as MinIO this is acceptable.
|
||||
InsecureSkipVerify: true,
|
||||
RootCAs: GlobalRootCAs,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
// MinIOConfig represents application configuration passed in from the MinIO
|
||||
@@ -275,3 +303,7 @@ func getConsoleDevMode() bool {
|
||||
func getConsoleAnimatedLogin() bool {
|
||||
return strings.ToLower(env.Get(ConsoleAnimatedLogin, "on")) == "on"
|
||||
}
|
||||
|
||||
func getConsoleBrowserRedirectURL() string {
|
||||
return env.Get(ConsoleBrowserRedirectURL, "")
|
||||
}
|
||||
|
||||
@@ -44,9 +44,9 @@ import (
|
||||
"github.com/klauspost/compress/gzhttp"
|
||||
|
||||
portal_ui "github.com/minio/console/web-app"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v2/mimedb"
|
||||
xnet "github.com/minio/pkg/v2/net"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
"github.com/minio/pkg/v3/mimedb"
|
||||
xnet "github.com/minio/pkg/v3/net"
|
||||
|
||||
"github.com/go-openapi/errors"
|
||||
"github.com/go-openapi/swag"
|
||||
|
||||
@@ -56,6 +56,7 @@ const (
|
||||
ConsoleMaxConcurrentDownloads = "CONSOLE_MAX_CONCURRENT_DOWNLOADS"
|
||||
ConsoleDevMode = "CONSOLE_DEV_MODE"
|
||||
ConsoleAnimatedLogin = "CONSOLE_ANIMATED_LOGIN"
|
||||
ConsoleBrowserRedirectURL = "CONSOLE_BROWSER_REDIRECT_URL"
|
||||
LogSearchQueryAuthToken = "LOGSEARCH_QUERY_AUTH_TOKEN"
|
||||
SlashSeparator = "/"
|
||||
LocalAddress = "127.0.0.1"
|
||||
|
||||
@@ -1762,6 +1762,11 @@ func init() {
|
||||
"name": "prefix",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"name": "versionID",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -7225,6 +7230,9 @@ func init() {
|
||||
"replicateDeletes": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"replicateExistingObjects": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"replicateMetadata": {
|
||||
"type": "boolean"
|
||||
},
|
||||
@@ -10974,6 +10982,11 @@ func init() {
|
||||
"name": "prefix",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"name": "versionID",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -16626,6 +16639,9 @@ func init() {
|
||||
"replicateDeletes": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"replicateExistingObjects": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"replicateMetadata": {
|
||||
"type": "boolean"
|
||||
},
|
||||
|
||||
@@ -20,8 +20,8 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"github.com/minio/pkg/v2/licverifier"
|
||||
"github.com/minio/pkg/v2/subnet"
|
||||
"github.com/minio/pkg/v3/licverifier"
|
||||
"github.com/minio/pkg/v3/subnet"
|
||||
)
|
||||
|
||||
type SubnetPlan int
|
||||
@@ -55,7 +55,7 @@ func getLicenseInfo(client http.Client, license string) (*licverifier.LicenseInf
|
||||
}
|
||||
|
||||
func fetchLicensePlan() {
|
||||
client := GetConsoleHTTPClient("", "127.0.0.1")
|
||||
client := GetConsoleHTTPClient("127.0.0.1")
|
||||
licenseInfo, err := getLicenseInfo(*client, os.Getenv(EnvSubnetLicense))
|
||||
if err != nil {
|
||||
return
|
||||
|
||||
@@ -59,6 +59,10 @@ type GetObjectMetadataParams struct {
|
||||
In: query
|
||||
*/
|
||||
Prefix string
|
||||
/*
|
||||
In: query
|
||||
*/
|
||||
VersionID *string
|
||||
}
|
||||
|
||||
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
|
||||
@@ -81,6 +85,11 @@ func (o *GetObjectMetadataParams) BindRequest(r *http.Request, route *middleware
|
||||
if err := o.bindPrefix(qPrefix, qhkPrefix, route.Formats); err != nil {
|
||||
res = append(res, err)
|
||||
}
|
||||
|
||||
qVersionID, qhkVersionID, _ := qs.GetOK("versionID")
|
||||
if err := o.bindVersionID(qVersionID, qhkVersionID, route.Formats); err != nil {
|
||||
res = append(res, err)
|
||||
}
|
||||
if len(res) > 0 {
|
||||
return errors.CompositeValidationError(res...)
|
||||
}
|
||||
@@ -121,3 +130,21 @@ func (o *GetObjectMetadataParams) bindPrefix(rawData []string, hasKey bool, form
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// bindVersionID binds and validates parameter VersionID from query.
|
||||
func (o *GetObjectMetadataParams) bindVersionID(rawData []string, hasKey bool, formats strfmt.Registry) error {
|
||||
var raw string
|
||||
if len(rawData) > 0 {
|
||||
raw = rawData[len(rawData)-1]
|
||||
}
|
||||
|
||||
// Required: false
|
||||
// AllowEmptyValue: false
|
||||
|
||||
if raw == "" { // empty values pass all other validations
|
||||
return nil
|
||||
}
|
||||
o.VersionID = &raw
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -33,7 +33,8 @@ import (
|
||||
type GetObjectMetadataURL struct {
|
||||
BucketName string
|
||||
|
||||
Prefix string
|
||||
Prefix string
|
||||
VersionID *string
|
||||
|
||||
_basePath string
|
||||
// avoid unkeyed usage
|
||||
@@ -81,6 +82,14 @@ func (o *GetObjectMetadataURL) Build() (*url.URL, error) {
|
||||
qs.Set("prefix", prefixQ)
|
||||
}
|
||||
|
||||
var versionIDQ string
|
||||
if o.VersionID != nil {
|
||||
versionIDQ = *o.VersionID
|
||||
}
|
||||
if versionIDQ != "" {
|
||||
qs.Set("versionID", versionIDQ)
|
||||
}
|
||||
|
||||
_result.RawQuery = qs.Encode()
|
||||
|
||||
return &_result, nil
|
||||
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/minio/madmin-go/v3"
|
||||
minioIAMPolicy "github.com/minio/pkg/v2/policy"
|
||||
minioIAMPolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
func TestReplacePolicyVariables(t *testing.T) {
|
||||
|
||||
@@ -29,7 +29,7 @@ import (
|
||||
"github.com/go-openapi/swag"
|
||||
"github.com/minio/console/api/operations"
|
||||
"github.com/minio/console/api/operations/public"
|
||||
xnet "github.com/minio/pkg/v2/net"
|
||||
xnet "github.com/minio/pkg/v3/net"
|
||||
)
|
||||
|
||||
func registerPublicObjectsHandlers(api *operations.ConsoleAPI) {
|
||||
@@ -57,7 +57,9 @@ func getDownloadPublicObjectResponse(params public.DownloadSharedObjectParams) (
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
|
||||
clnt := PrepareConsoleHTTPClient(getClientIP(params.HTTPRequest))
|
||||
resp, err := clnt.Do(req)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
@@ -91,7 +93,7 @@ func getDownloadPublicObjectResponse(params public.DownloadSharedObjectParams) (
|
||||
|
||||
// b64toMinIOStringURL decodes url and validates is a MinIO url endpoint
|
||||
func b64toMinIOStringURL(inputEncodedURL string) (*string, error) {
|
||||
inputURLDecoded, err := b64.StdEncoding.DecodeString(inputEncodedURL)
|
||||
inputURLDecoded, err := b64.URLEncoding.DecodeString(inputEncodedURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -76,6 +76,14 @@ func Test_b64toMinIOStringURL(t *testing.T) {
|
||||
wantError: swag.String("unexpected scheme found "),
|
||||
expected: nil,
|
||||
},
|
||||
{
|
||||
test: "encoded url is url safe decoded",
|
||||
args: args{
|
||||
encodedURL: "aHR0cHM6Ly9sb2NhbGhvc3Q6OTAwMC9jZXN0ZXN0L0F1ZGlvJTIwaWNvbi5zdmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTY=",
|
||||
},
|
||||
wantError: nil,
|
||||
expected: swag.String("https://localhost:9000/cestest/Audio%20icon.svg?X-Amz-Algorithm=AWS4-HMAC-SHA256"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
@@ -84,16 +92,16 @@ func Test_b64toMinIOStringURL(t *testing.T) {
|
||||
if tt.wantError != nil {
|
||||
if err != nil {
|
||||
if err.Error() != *tt.wantError {
|
||||
t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`", err, *tt.wantError)
|
||||
t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`, input: `%s`", err, *tt.wantError, tt.args.encodedURL)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`", err, *tt.wantError)
|
||||
t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`, input: `%s`", err, *tt.wantError, tt.args.encodedURL)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if err != nil {
|
||||
t.Errorf("b64toMinIOStringURL() error: `%s`, wantErr: `%v`", err, tt.wantError)
|
||||
t.Errorf("b64toMinIOStringURL() error: `%s`, wantErr: `%v`, input: `%s`", err, tt.wantError, tt.args.encodedURL)
|
||||
return
|
||||
}
|
||||
tAssert.Equal(*tt.expected, *url)
|
||||
|
||||
@@ -29,7 +29,7 @@ import (
|
||||
"github.com/minio/console/models"
|
||||
"github.com/minio/console/pkg/utils"
|
||||
"github.com/minio/madmin-go/v3"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
func registerServiceAccountsHandlers(api *operations.ConsoleAPI) {
|
||||
@@ -153,14 +153,15 @@ func getCreateServiceAccountResponse(session *models.Principal, params saApi.Cre
|
||||
// defining the client to be used
|
||||
userAdminClient := AdminClient{Client: userAdmin}
|
||||
|
||||
var parsedExpiry time.Time
|
||||
var expiry *time.Time
|
||||
if params.Body.Expiry != "" {
|
||||
parsedExpiry, err = time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
parsedExpiry, err := time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
expiry = &parsedExpiry
|
||||
}
|
||||
saCreds, err := createServiceAccount(ctx, userAdminClient, params.Body.Policy, params.Body.Name, params.Body.Description, &parsedExpiry, params.Body.Comment)
|
||||
saCreds, err := createServiceAccount(ctx, userAdminClient, params.Body.Policy, params.Body.Name, params.Body.Description, expiry, params.Body.Comment)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
@@ -203,14 +204,15 @@ func getCreateAUserServiceAccountResponse(session *models.Principal, params user
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
|
||||
var parsedExpiry time.Time
|
||||
var expiry *time.Time
|
||||
if params.Body.Expiry != "" {
|
||||
parsedExpiry, err = time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
parsedExpiry, err := time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
expiry = &parsedExpiry
|
||||
}
|
||||
saCreds, err := createAUserServiceAccount(ctx, userAdminClient, params.Body.Policy, name, params.Body.Name, params.Body.Description, &parsedExpiry, params.Body.Comment)
|
||||
saCreds, err := createAUserServiceAccount(ctx, userAdminClient, params.Body.Policy, name, params.Body.Name, params.Body.Description, expiry, params.Body.Comment)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
@@ -248,14 +250,15 @@ func getCreateAUserServiceAccountCredsResponse(session *models.Principal, params
|
||||
}
|
||||
}
|
||||
|
||||
var parsedExpiry time.Time
|
||||
var expiry *time.Time
|
||||
if serviceAccount.Expiry != "" {
|
||||
parsedExpiry, err = time.Parse(time.RFC3339, serviceAccount.Expiry)
|
||||
parsedExpiry, err := time.Parse(time.RFC3339, serviceAccount.Expiry)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
expiry = &parsedExpiry
|
||||
}
|
||||
saCreds, err := createAUserServiceAccountCreds(ctx, userAdminClient, serviceAccount.Policy, user, serviceAccount.AccessKey, serviceAccount.SecretKey, serviceAccount.Name, serviceAccount.Description, &parsedExpiry, serviceAccount.Comment)
|
||||
saCreds, err := createAUserServiceAccountCreds(ctx, userAdminClient, serviceAccount.Policy, user, serviceAccount.AccessKey, serviceAccount.SecretKey, serviceAccount.Name, serviceAccount.Description, expiry, serviceAccount.Comment)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
@@ -289,15 +292,16 @@ func getCreateServiceAccountCredsResponse(session *models.Principal, params saAp
|
||||
}
|
||||
}
|
||||
|
||||
var parsedExpiry time.Time
|
||||
var expiry *time.Time
|
||||
if params.Body.Expiry != "" {
|
||||
parsedExpiry, err = time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
parsedExpiry, err := time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
expiry = &parsedExpiry
|
||||
}
|
||||
|
||||
saCreds, err := createServiceAccountCreds(ctx, userAdminClient, serviceAccount.Policy, serviceAccount.AccessKey, serviceAccount.SecretKey, params.Body.Name, params.Body.Description, &parsedExpiry, params.Body.Comment)
|
||||
saCreds, err := createServiceAccountCreds(ctx, userAdminClient, serviceAccount.Policy, serviceAccount.AccessKey, serviceAccount.SecretKey, params.Body.Name, params.Body.Description, expiry, params.Body.Comment)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
@@ -313,6 +317,25 @@ func getUserServiceAccounts(ctx context.Context, userClient MinioAdmin, user str
|
||||
saList := models.ServiceAccounts{}
|
||||
|
||||
for _, acc := range listServAccs.Accounts {
|
||||
if acc.AccountStatus != "" {
|
||||
// Newer releases of MinIO would support enhanced listServiceAccounts()
|
||||
// we can avoid infoServiceAccount() at that point, this scales well
|
||||
// for 100's of service accounts.
|
||||
expiry := ""
|
||||
if acc.Expiration != nil {
|
||||
expiry = acc.Expiration.Format(time.RFC3339)
|
||||
}
|
||||
|
||||
saList = append(saList, &models.ServiceAccountsItems0{
|
||||
AccountStatus: acc.AccountStatus,
|
||||
Description: acc.Description,
|
||||
Expiration: expiry,
|
||||
Name: acc.Name,
|
||||
AccessKey: acc.AccessKey,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
aInfo, err := userClient.infoServiceAccount(ctx, acc.AccessKey)
|
||||
if err != nil {
|
||||
continue
|
||||
@@ -439,14 +462,14 @@ func getServiceAccountInfo(session *models.Principal, params saApi.GetServiceAcc
|
||||
}
|
||||
|
||||
// setServiceAccountPolicy sets policy for a service account
|
||||
func updateServiceAccountDetails(ctx context.Context, userClient MinioAdmin, accessKey string, policy string, expiry time.Time, name string, description string, status string, secretKey string) error {
|
||||
func updateServiceAccountDetails(ctx context.Context, userClient MinioAdmin, accessKey string, policy string, expiry *time.Time, name string, description string, status string, secretKey string) error {
|
||||
req := madmin.UpdateServiceAccountReq{
|
||||
NewPolicy: json.RawMessage(policy),
|
||||
NewSecretKey: secretKey,
|
||||
NewStatus: status,
|
||||
NewName: name,
|
||||
NewDescription: description,
|
||||
NewExpiration: &expiry,
|
||||
NewExpiration: expiry,
|
||||
}
|
||||
|
||||
err := userClient.updateServiceAccount(ctx, accessKey, req)
|
||||
@@ -471,14 +494,15 @@ func updateSetServiceAccountResponse(session *models.Principal, params saApi.Upd
|
||||
// defining the client to be used
|
||||
userAdminClient := AdminClient{Client: userAdmin}
|
||||
|
||||
var parsedExpiry time.Time
|
||||
var expiry *time.Time
|
||||
if params.Body.Expiry != "" {
|
||||
parsedExpiry, err = time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
parsedExpiry, err := time.Parse(time.RFC3339, params.Body.Expiry)
|
||||
if err != nil {
|
||||
return ErrorWithContext(ctx, err)
|
||||
}
|
||||
expiry = &parsedExpiry
|
||||
}
|
||||
err = updateServiceAccountDetails(ctx, userAdminClient, accessKey, policy, parsedExpiry, params.Body.Name, params.Body.Description, params.Body.Status, params.Body.SecretKey)
|
||||
err = updateServiceAccountDetails(ctx, userAdminClient, accessKey, policy, expiry, params.Body.Name, params.Body.Description, params.Body.Status, params.Body.SecretKey)
|
||||
if err != nil {
|
||||
return ErrorWithContext(ctx, err)
|
||||
}
|
||||
|
||||
56
api/tls.go
56
api/tls.go
@@ -17,65 +17,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
type ConsoleTransport struct {
|
||||
Transport *http.Transport
|
||||
Transport http.RoundTripper
|
||||
ClientIP string
|
||||
}
|
||||
|
||||
func (t *ConsoleTransport) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
req.Header.Add("X-Forwarded-For", t.ClientIP)
|
||||
resp, err := t.Transport.RoundTrip(req)
|
||||
return resp, err
|
||||
if t.ClientIP != "" {
|
||||
// Do not set an empty x-forwarded-for
|
||||
req.Header.Add(xForwardedFor, t.ClientIP)
|
||||
}
|
||||
return t.Transport.RoundTrip(req)
|
||||
}
|
||||
|
||||
// PrepareSTSClientTransport :
|
||||
func PrepareSTSClientTransport(insecure bool, remoteAddress string) *ConsoleTransport {
|
||||
// This takes github.com/minio/madmin-go/v3/transport.go as an example
|
||||
//
|
||||
// DefaultTransport - this default transport is similar to
|
||||
// http.DefaultTransport but with additional param DisableCompression
|
||||
// is set to true to avoid decompressing content with 'gzip' encoding.
|
||||
DefaultTransport := &http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 10 * time.Second,
|
||||
KeepAlive: 15 * time.Second,
|
||||
}).DialContext,
|
||||
MaxIdleConns: 1024,
|
||||
MaxIdleConnsPerHost: 1024,
|
||||
IdleConnTimeout: 90 * time.Second,
|
||||
TLSHandshakeTimeout: 10 * time.Second,
|
||||
ExpectContinueTimeout: 10 * time.Second,
|
||||
DisableCompression: true,
|
||||
TLSClientConfig: &tls.Config{
|
||||
// Can't use SSLv3 because of POODLE and BEAST
|
||||
// Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher
|
||||
// Can't use TLSv1.1 because of RC4 cipher usage
|
||||
MinVersion: tls.VersionTLS12,
|
||||
InsecureSkipVerify: insecure,
|
||||
RootCAs: GlobalRootCAs,
|
||||
},
|
||||
func PrepareSTSClientTransport(clientIP string) *ConsoleTransport {
|
||||
return &ConsoleTransport{
|
||||
Transport: GlobalTransport,
|
||||
ClientIP: clientIP,
|
||||
}
|
||||
t := &ConsoleTransport{
|
||||
Transport: DefaultTransport,
|
||||
ClientIP: remoteAddress,
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// PrepareConsoleHTTPClient returns an http.Client with custom configurations need it by *credentials.STSAssumeRole
|
||||
// custom configurations include the use of CA certificates
|
||||
func PrepareConsoleHTTPClient(insecure bool, clientIP string) *http.Client {
|
||||
transport := PrepareSTSClientTransport(insecure, clientIP)
|
||||
func PrepareConsoleHTTPClient(clientIP string) *http.Client {
|
||||
// Return http client with default configuration
|
||||
c := &http.Client{
|
||||
Transport: transport,
|
||||
return &http.Client{
|
||||
Transport: PrepareSTSClientTransport(clientIP),
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ import (
|
||||
"github.com/minio/console/pkg/auth/token"
|
||||
"github.com/minio/minio-go/v7/pkg/policy"
|
||||
"github.com/minio/minio-go/v7/pkg/replication"
|
||||
minioIAMPolicy "github.com/minio/pkg/v2/policy"
|
||||
minioIAMPolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
func registerBucketsHandlers(api *operations.ConsoleAPI) {
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
"github.com/minio/console/api/operations"
|
||||
logApi "github.com/minio/console/api/operations/logging"
|
||||
"github.com/minio/console/models"
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
)
|
||||
|
||||
func registerLogSearchHandlers(api *operations.ConsoleAPI) {
|
||||
@@ -98,7 +98,7 @@ func getLogSearchResponse(session *models.Principal, params logApi.LogSearchPara
|
||||
}
|
||||
|
||||
func logSearch(endpoint string, clientIP string) (*models.LogSearchResponse, error) {
|
||||
httpClnt := GetConsoleHTTPClient(endpoint, clientIP)
|
||||
httpClnt := GetConsoleHTTPClient(clientIP)
|
||||
resp, err := httpClnt.Get(endpoint)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("the Log Search API cannot be reached. Please review the URL and try again %v", err)
|
||||
|
||||
@@ -35,7 +35,7 @@ import (
|
||||
"github.com/minio/console/pkg/auth/idp/oauth2"
|
||||
"github.com/minio/madmin-go/v3"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
)
|
||||
|
||||
func registerLoginHandlers(api *operations.ConsoleAPI) {
|
||||
@@ -191,8 +191,7 @@ func getLoginDetailsResponse(params authApi.LoginDetailParams, openIDProviders o
|
||||
for name, provider := range openIDProviders {
|
||||
// initialize new oauth2 client
|
||||
|
||||
oauth2Client, err := provider.GetOauth2Provider(name, nil, r, GetConsoleHTTPClient("", getClientIP(params.HTTPRequest)),
|
||||
GetConsoleHTTPClient(getMinIOServer(), getClientIP(params.HTTPRequest)))
|
||||
oauth2Client, err := provider.GetOauth2Provider(name, nil, r, GetConsoleHTTPClient(getClientIP(params.HTTPRequest)))
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
@@ -281,8 +280,8 @@ func getLoginOauth2AuthResponse(params authApi.LoginOauth2AuthParams, openIDProv
|
||||
}
|
||||
|
||||
// Initialize new identity provider with new oauth2Client per IDPName
|
||||
oauth2Client, err := providerCfg.GetOauth2Provider(IDPName, nil, r, GetConsoleHTTPClient("", getClientIP(params.HTTPRequest)),
|
||||
GetConsoleHTTPClient(getMinIOServer(), getClientIP(params.HTTPRequest)))
|
||||
oauth2Client, err := providerCfg.GetOauth2Provider(IDPName, nil, r,
|
||||
GetConsoleHTTPClient(getClientIP(params.HTTPRequest)))
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
|
||||
"github.com/minio/madmin-go/v3"
|
||||
|
||||
iampolicy "github.com/minio/pkg/v2/policy"
|
||||
iampolicy "github.com/minio/pkg/v3/policy"
|
||||
|
||||
"github.com/minio/console/pkg/auth"
|
||||
|
||||
|
||||
@@ -18,13 +18,15 @@ package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
"github.com/go-openapi/errors"
|
||||
|
||||
"github.com/go-openapi/runtime"
|
||||
"github.com/go-openapi/runtime/middleware"
|
||||
"github.com/minio/console/api/operations"
|
||||
@@ -38,10 +40,13 @@ func registerLogoutHandlers(api *operations.ConsoleAPI) {
|
||||
api.AuthLogoutHandler = authApi.LogoutHandlerFunc(func(params authApi.LogoutParams, session *models.Principal) middleware.Responder {
|
||||
err := getLogoutResponse(session, params)
|
||||
if err != nil {
|
||||
api.Logger("IDP logout failed: %v", err.APIError)
|
||||
api.Logger("IDP logout failed: %v", err.APIError.DetailedMessage)
|
||||
}
|
||||
// Custom response writer to expire the session cookies
|
||||
return middleware.ResponderFunc(func(w http.ResponseWriter, p runtime.Producer) {
|
||||
if err != nil {
|
||||
w.Header().Set("IDP-Logout", fmt.Sprintf("%v", err.APIError.DetailedMessage))
|
||||
}
|
||||
expiredCookie := ExpireSessionCookie()
|
||||
// this will tell the browser to clear the cookie and invalidate user session
|
||||
// additionally we are deleting the cookie from the client side
|
||||
@@ -103,16 +108,16 @@ func logoutFromIDPProvider(r *http.Request, state string) error {
|
||||
params.Add("client_secret", providerCfg.ClientSecret)
|
||||
params.Add("refresh_token", refreshToken.Value)
|
||||
client := &http.Client{
|
||||
Transport: &http.Transport{
|
||||
TLSClientConfig: &tls.Config{
|
||||
RootCAs: GlobalRootCAs,
|
||||
},
|
||||
},
|
||||
Transport: GlobalTransport,
|
||||
}
|
||||
_, err := client.PostForm(providerCfg.EndSessionEndpoint, params)
|
||||
result, err := client.PostForm(providerCfg.EndSessionEndpoint, params)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.New(500, "failed to logout: %v", err.Error())
|
||||
}
|
||||
if result.StatusCode != 204 {
|
||||
return errors.New(int32(result.StatusCode), "failed to logout")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ import (
|
||||
mc "github.com/minio/mc/cmd"
|
||||
"github.com/minio/mc/pkg/probe"
|
||||
"github.com/minio/minio-go/v7/pkg/tags"
|
||||
"github.com/minio/pkg/v2/mimedb"
|
||||
"github.com/minio/pkg/v3/mimedb"
|
||||
)
|
||||
|
||||
// enum types
|
||||
@@ -1112,6 +1112,11 @@ func getRequestURLWithScheme(r *http.Request) string {
|
||||
scheme = "https"
|
||||
}
|
||||
|
||||
redirectURL := getConsoleBrowserRedirectURL()
|
||||
if redirectURL != "" {
|
||||
return strings.TrimSuffix(redirectURL, "/")
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s://%s", scheme, r.Host)
|
||||
}
|
||||
|
||||
@@ -1338,6 +1343,7 @@ func getObjectMetadataResponse(session *models.Principal, params objectApi.GetOb
|
||||
// defining the client to be used
|
||||
minioClient := minioClient{client: mClient}
|
||||
var prefix string
|
||||
var versionID string
|
||||
|
||||
if params.Prefix != "" {
|
||||
encodedPrefix := SanitizeEncodedPrefix(params.Prefix)
|
||||
@@ -1348,7 +1354,11 @@ func getObjectMetadataResponse(session *models.Principal, params objectApi.GetOb
|
||||
prefix = string(decodedPrefix)
|
||||
}
|
||||
|
||||
objectInfo, err := getObjectInfo(ctx, minioClient, params.BucketName, prefix)
|
||||
if params.VersionID != nil {
|
||||
versionID = *params.VersionID
|
||||
}
|
||||
|
||||
objectInfo, err := getObjectInfo(ctx, minioClient, params.BucketName, prefix, versionID)
|
||||
if err != nil {
|
||||
return nil, ErrorWithContext(ctx, err)
|
||||
}
|
||||
@@ -1358,8 +1368,8 @@ func getObjectMetadataResponse(session *models.Principal, params objectApi.GetOb
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
func getObjectInfo(ctx context.Context, client MinioClient, bucketName, prefix string) (minio.ObjectInfo, error) {
|
||||
objectData, err := client.statObject(ctx, bucketName, prefix, minio.GetObjectOptions{})
|
||||
func getObjectInfo(ctx context.Context, client MinioClient, bucketName, prefix, versionID string) (minio.ObjectInfo, error) {
|
||||
objectData, err := client.statObject(ctx, bucketName, prefix, minio.GetObjectOptions{VersionID: versionID})
|
||||
if err != nil {
|
||||
return minio.ObjectInfo{}, err
|
||||
}
|
||||
|
||||
@@ -921,10 +921,11 @@ func Test_shareObject(t *testing.T) {
|
||||
shareFunc func(ctx context.Context, versionID string, expires time.Duration) (string, *probe.Error)
|
||||
}
|
||||
tests := []struct {
|
||||
test string
|
||||
args args
|
||||
wantError error
|
||||
expected string
|
||||
test string
|
||||
args args
|
||||
setEnvVars func()
|
||||
wantError error
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
test: "return sharefunc url base64 encoded with host name",
|
||||
@@ -1023,11 +1024,52 @@ func Test_shareObject(t *testing.T) {
|
||||
wantError: nil,
|
||||
expected: "http://localhost:9090/api/v1/download-shared-object/aHR0cHM6Ly8xMjcuMC4wLjE6OTAwMC9jZXN0ZXN0L0F1ZGlvJTIwaWNvbi5zdmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTY=",
|
||||
},
|
||||
{
|
||||
test: "returns redirect url with share link if redirect url env variable set",
|
||||
setEnvVars: func() {
|
||||
t.Setenv(ConsoleBrowserRedirectURL, "http://proxy-url.com:9012/console/subpath")
|
||||
},
|
||||
args: args{
|
||||
r: &http.Request{
|
||||
TLS: nil,
|
||||
Host: "localhost:9090",
|
||||
},
|
||||
versionID: "2121434",
|
||||
expires: "30s",
|
||||
shareFunc: func(_ context.Context, _ string, _ time.Duration) (string, *probe.Error) {
|
||||
return "http://someurl", nil
|
||||
},
|
||||
},
|
||||
wantError: nil,
|
||||
expected: "http://proxy-url.com:9012/console/subpath/api/v1/download-shared-object/aHR0cDovL3NvbWV1cmw=",
|
||||
},
|
||||
{
|
||||
test: "returns redirect url with share link if redirect url env variable set with trailing slash",
|
||||
setEnvVars: func() {
|
||||
t.Setenv(ConsoleBrowserRedirectURL, "http://proxy-url.com:9012/console/subpath/")
|
||||
},
|
||||
args: args{
|
||||
r: &http.Request{
|
||||
TLS: nil,
|
||||
Host: "localhost:9090",
|
||||
},
|
||||
versionID: "2121434",
|
||||
expires: "30s",
|
||||
shareFunc: func(_ context.Context, _ string, _ time.Duration) (string, *probe.Error) {
|
||||
return "http://someurl", nil
|
||||
},
|
||||
},
|
||||
wantError: nil,
|
||||
expected: "http://proxy-url.com:9012/console/subpath/api/v1/download-shared-object/aHR0cDovL3NvbWV1cmw=",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.test, func(_ *testing.T) {
|
||||
mcShareDownloadMock = tt.args.shareFunc
|
||||
if tt.setEnvVars != nil {
|
||||
tt.setEnvVars()
|
||||
}
|
||||
url, err := getShareObjectURL(ctx, client, tt.args.r, tt.args.versionID, tt.args.expires)
|
||||
if tt.wantError != nil {
|
||||
if !reflect.DeepEqual(err, tt.wantError) {
|
||||
@@ -1293,6 +1335,7 @@ func Test_getObjectInfo(t *testing.T) {
|
||||
type args struct {
|
||||
bucketName string
|
||||
prefix string
|
||||
versionID string
|
||||
statFunc func(ctx context.Context, bucketName string, prefix string, opts minio.GetObjectOptions) (objectInfo minio.ObjectInfo, err error)
|
||||
}
|
||||
tests := []struct {
|
||||
@@ -1305,6 +1348,7 @@ func Test_getObjectInfo(t *testing.T) {
|
||||
args: args{
|
||||
bucketName: "bucket1",
|
||||
prefix: "someprefix",
|
||||
versionID: "version123",
|
||||
statFunc: func(_ context.Context, _ string, _ string, _ minio.GetObjectOptions) (minio.ObjectInfo, error) {
|
||||
return minio.ObjectInfo{}, nil
|
||||
},
|
||||
@@ -1316,6 +1360,7 @@ func Test_getObjectInfo(t *testing.T) {
|
||||
args: args{
|
||||
bucketName: "bucket2",
|
||||
prefix: "someprefi2",
|
||||
versionID: "version456",
|
||||
statFunc: func(_ context.Context, _ string, _ string, _ minio.GetObjectOptions) (minio.ObjectInfo, error) {
|
||||
return minio.ObjectInfo{}, errors.New("new Error")
|
||||
},
|
||||
@@ -1326,7 +1371,7 @@ func Test_getObjectInfo(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.test, func(_ *testing.T) {
|
||||
minioStatObjectMock = tt.args.statFunc
|
||||
_, err := getObjectInfo(ctx, client, tt.args.bucketName, tt.args.prefix)
|
||||
_, err := getObjectInfo(ctx, client, tt.args.bucketName, tt.args.prefix, tt.args.versionID)
|
||||
if tt.wantError != nil {
|
||||
fmt.Println(t.Name())
|
||||
tAssert.Equal(tt.wantError.Error(), err.Error(), fmt.Sprintf("getObjectInfo() error: `%s`, wantErr: `%s`", err, tt.wantError))
|
||||
|
||||
@@ -27,9 +27,9 @@ import (
|
||||
"github.com/minio/madmin-go/v3"
|
||||
|
||||
jwtgo "github.com/golang-jwt/jwt/v4"
|
||||
"github.com/minio/pkg/v2/policy/condition"
|
||||
"github.com/minio/pkg/v3/policy/condition"
|
||||
|
||||
minioIAMPolicy "github.com/minio/pkg/v2/policy"
|
||||
minioIAMPolicy "github.com/minio/pkg/v3/policy"
|
||||
|
||||
"github.com/go-openapi/runtime/middleware"
|
||||
"github.com/minio/console/api/operations"
|
||||
@@ -139,6 +139,14 @@ func getSessionResponse(ctx context.Context, session *models.Principal) (*models
|
||||
|
||||
defaultActions := policy.IsAllowedActions("", "", conditionValues)
|
||||
|
||||
// Allow Create Access Key when admin:CreateServiceAccount is provided with a condition
|
||||
for _, statement := range policy.Statements {
|
||||
if statement.Effect == "Deny" && len(statement.Conditions) > 0 &&
|
||||
statement.Actions.Contains(minioIAMPolicy.CreateServiceAccountAdminAction) {
|
||||
defaultActions.Add(minioIAMPolicy.Action(minioIAMPolicy.CreateServiceAccountAdminAction))
|
||||
}
|
||||
}
|
||||
|
||||
permissions := map[string]minioIAMPolicy.ActionSet{
|
||||
ConsoleResourceName: defaultActions,
|
||||
}
|
||||
|
||||
@@ -43,13 +43,26 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
writeChannel := make(chan WSResponse)
|
||||
done := make(chan interface{})
|
||||
|
||||
sendWSResponse := func(r WSResponse) {
|
||||
select {
|
||||
case writeChannel <- r:
|
||||
case <-done:
|
||||
}
|
||||
}
|
||||
|
||||
// Read goroutine
|
||||
go func() {
|
||||
defer close(writeChannel)
|
||||
for {
|
||||
select {
|
||||
case <-done:
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
mType, message, err := wsc.conn.readMessage()
|
||||
if err != nil {
|
||||
LogInfo("Error while reading objectManager message", err)
|
||||
close(done)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -60,8 +73,6 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
err := json.Unmarshal(message, &messageRequest)
|
||||
if err != nil {
|
||||
LogInfo("Error on message request unmarshal")
|
||||
|
||||
close(done)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -74,7 +85,6 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
const itemsPerBatch = 1000
|
||||
switch messageRequest.Mode {
|
||||
case "close":
|
||||
close(done)
|
||||
return
|
||||
case "cancel":
|
||||
// if we have that request id, cancel it
|
||||
@@ -97,12 +107,12 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
if err != nil {
|
||||
LogInfo(fmt.Sprintf("Error during Objects OptionsParse %s", err.Error()))
|
||||
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Error: ErrorWithContext(ctx, err),
|
||||
Prefix: messageRequest.Prefix,
|
||||
BucketName: messageRequest.BucketName,
|
||||
}
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
@@ -112,12 +122,12 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
return
|
||||
}
|
||||
if lsObj.Err != nil {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Error: ErrorWithContext(ctx, lsObj.Err),
|
||||
Prefix: messageRequest.Prefix,
|
||||
BucketName: messageRequest.BucketName,
|
||||
}
|
||||
})
|
||||
|
||||
continue
|
||||
}
|
||||
@@ -132,24 +142,24 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
buffer = append(buffer, objItem)
|
||||
|
||||
if len(buffer) >= itemsPerBatch {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Data: buffer,
|
||||
}
|
||||
})
|
||||
buffer = nil
|
||||
}
|
||||
}
|
||||
if len(buffer) > 0 {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Data: buffer,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
RequestEnd: true,
|
||||
}
|
||||
})
|
||||
|
||||
// remove the cancellation context
|
||||
delete(cancelContexts, messageRequest.RequestID)
|
||||
@@ -168,12 +178,12 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
objectRqConfigs, err := getObjectsOptionsFromReq(messageRequest)
|
||||
if err != nil {
|
||||
LogInfo(fmt.Sprintf("Error during Objects OptionsParse %s", err.Error()))
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Error: ErrorWithContext(ctx, err),
|
||||
Prefix: messageRequest.Prefix,
|
||||
BucketName: messageRequest.BucketName,
|
||||
}
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
@@ -182,12 +192,12 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
|
||||
s3Client, err := newS3BucketClient(session, objectRqConfigs.BucketName, objectRqConfigs.Prefix, clientIP)
|
||||
if err != nil {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Error: ErrorWithContext(ctx, err),
|
||||
Prefix: messageRequest.Prefix,
|
||||
BucketName: messageRequest.BucketName,
|
||||
}
|
||||
})
|
||||
|
||||
cancel()
|
||||
return
|
||||
@@ -199,12 +209,12 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
|
||||
for lsObj := range startRewindListing(ctx, mcS3C, objectRqConfigs) {
|
||||
if lsObj.Err != nil {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Error: ErrorWithContext(ctx, lsObj.Err.ToGoError()),
|
||||
Prefix: messageRequest.Prefix,
|
||||
BucketName: messageRequest.BucketName,
|
||||
}
|
||||
})
|
||||
|
||||
continue
|
||||
}
|
||||
@@ -222,25 +232,25 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
buffer = append(buffer, objItem)
|
||||
|
||||
if len(buffer) >= itemsPerBatch {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Data: buffer,
|
||||
}
|
||||
})
|
||||
buffer = nil
|
||||
}
|
||||
|
||||
}
|
||||
if len(buffer) > 0 {
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
Data: buffer,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
writeChannel <- WSResponse{
|
||||
sendWSResponse(WSResponse{
|
||||
RequestID: messageRequest.RequestID,
|
||||
RequestEnd: true,
|
||||
}
|
||||
})
|
||||
|
||||
// remove the cancellation context
|
||||
delete(cancelContexts, messageRequest.RequestID)
|
||||
@@ -250,27 +260,19 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
|
||||
}
|
||||
}()
|
||||
|
||||
// Write goroutine
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-done:
|
||||
return
|
||||
case writeM := <-writeChannel:
|
||||
jsonData, err := json.Marshal(writeM)
|
||||
if err != nil {
|
||||
LogInfo("Error while marshaling the response", err)
|
||||
return
|
||||
}
|
||||
defer close(done)
|
||||
|
||||
err = wsc.conn.writeMessage(websocket.TextMessage, jsonData)
|
||||
if err != nil {
|
||||
LogInfo("Error while writing the message", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
for writeM := range writeChannel {
|
||||
jsonData, err := json.Marshal(writeM)
|
||||
if err != nil {
|
||||
LogInfo("Error while marshaling the response", err)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
<-done
|
||||
err = wsc.conn.writeMessage(websocket.TextMessage, jsonData)
|
||||
if err != nil {
|
||||
LogInfo("Error while writing the message", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
@@ -42,8 +43,8 @@ func StartServer(ctx *cli.Context) error {
|
||||
|
||||
xctx := context.Background()
|
||||
|
||||
transport := api.PrepareSTSClientTransport(false, api.LocalAddress)
|
||||
if err := logger.InitializeLogger(xctx, transport.Transport); err != nil {
|
||||
transport := api.PrepareSTSClientTransport(api.LocalAddress).Transport.(*http.Transport)
|
||||
if err := logger.InitializeLogger(xctx, transport); err != nil {
|
||||
fmt.Println("error InitializeLogger", err)
|
||||
logger.CriticalIf(xctx, err)
|
||||
}
|
||||
|
||||
@@ -25,9 +25,9 @@ import (
|
||||
|
||||
"github.com/minio/cli"
|
||||
"github.com/minio/console/pkg"
|
||||
"github.com/minio/pkg/v2/console"
|
||||
"github.com/minio/pkg/v2/trie"
|
||||
"github.com/minio/pkg/v2/words"
|
||||
"github.com/minio/pkg/v3/console"
|
||||
"github.com/minio/pkg/v3/trie"
|
||||
"github.com/minio/pkg/v3/words"
|
||||
)
|
||||
|
||||
// Help template for Console.
|
||||
|
||||
67
go.mod
67
go.mod
@@ -17,13 +17,13 @@ require (
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/jessevdk/go-flags v1.5.0
|
||||
github.com/klauspost/compress v1.17.7
|
||||
github.com/klauspost/compress v1.17.8
|
||||
github.com/minio/cli v1.24.2
|
||||
github.com/minio/highwayhash v1.0.2
|
||||
github.com/minio/kes v0.23.0
|
||||
github.com/minio/madmin-go/v3 v3.0.50
|
||||
github.com/minio/mc v0.0.0-20240330152952-9f8147bf0e03
|
||||
github.com/minio/minio-go/v7 v7.0.69
|
||||
github.com/minio/madmin-go/v3 v3.0.51
|
||||
github.com/minio/mc v0.0.0-20240430174448-dcb911bed9d5
|
||||
github.com/minio/minio-go/v7 v7.0.70
|
||||
github.com/minio/selfupdate v0.6.0
|
||||
github.com/minio/websocket v1.6.0
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
@@ -32,18 +32,18 @@ require (
|
||||
github.com/stretchr/testify v1.9.0
|
||||
github.com/tidwall/gjson v1.17.1
|
||||
github.com/unrolled/secure v1.14.0
|
||||
golang.org/x/crypto v0.21.0
|
||||
golang.org/x/net v0.23.0
|
||||
golang.org/x/crypto v0.23.0
|
||||
golang.org/x/net v0.25.0
|
||||
golang.org/x/oauth2 v0.18.0
|
||||
// Added to include security fix for
|
||||
// https://github.com/golang/go/issues/56152
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
golang.org/x/text v0.15.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/mattn/go-ieproxy v0.0.11
|
||||
github.com/minio/pkg/v2 v2.0.13
|
||||
github.com/minio/pkg/v3 v3.0.0
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -54,7 +54,7 @@ require (
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/charmbracelet/bubbles v0.18.0 // indirect
|
||||
github.com/charmbracelet/bubbletea v0.25.0 // indirect
|
||||
github.com/charmbracelet/lipgloss v0.10.0 // indirect
|
||||
@@ -63,11 +63,9 @@ require (
|
||||
github.com/coreos/go-semver v0.3.1 // indirect
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/fatih/structs v1.1.0 // indirect
|
||||
github.com/gdamore/encoding v1.0.0 // indirect
|
||||
github.com/gdamore/tcell/v2 v2.7.4 // indirect
|
||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||
github.com/go-openapi/analysis v0.23.0 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
||||
@@ -79,9 +77,8 @@ require (
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.4 // indirect
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.8 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/juju/ratelimit v1.0.2 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
||||
github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect
|
||||
@@ -91,7 +88,7 @@ require (
|
||||
github.com/lestrrat-go/jwx v1.2.29 // indirect
|
||||
github.com/lestrrat-go/option v1.0.1 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20240226150601-1dcf7310316a // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20240408141607-282e7b5d6b74 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
@@ -102,16 +99,13 @@ require (
|
||||
github.com/minio/filepath v1.0.0 // indirect
|
||||
github.com/minio/kes-go v0.2.1 // indirect
|
||||
github.com/minio/md5-simd v1.1.2 // indirect
|
||||
github.com/minio/sha256-simd v1.0.1 // indirect
|
||||
github.com/minio/pkg/v2 v2.0.17 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/montanaflynn/stats v0.7.1 // indirect
|
||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
||||
github.com/muesli/cancelreader v0.2.2 // indirect
|
||||
github.com/muesli/reflow v0.3.0 // indirect
|
||||
github.com/muesli/termenv v0.15.2 // indirect
|
||||
github.com/navidys/tvxwidgets v0.6.0 // indirect
|
||||
github.com/oklog/ulid v1.3.1 // indirect
|
||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||
github.com/philhofer/fwd v1.1.2 // indirect
|
||||
@@ -121,37 +115,36 @@ require (
|
||||
github.com/posener/complete v1.2.3 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
||||
github.com/prometheus/client_golang v1.19.0 // indirect
|
||||
github.com/prometheus/client_model v0.6.0 // indirect
|
||||
github.com/prometheus/common v0.50.0 // indirect
|
||||
github.com/prometheus/procfs v0.13.0 // indirect
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/common v0.53.0 // indirect
|
||||
github.com/prometheus/procfs v0.14.0 // indirect
|
||||
github.com/prometheus/prom2json v1.3.3 // indirect
|
||||
github.com/rivo/tview v0.0.0-20240307173318-e804876934a1 // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
github.com/rjeczalik/notify v0.9.3 // indirect
|
||||
github.com/safchain/ethtool v0.3.0 // indirect
|
||||
github.com/shirou/gopsutil/v3 v3.24.2 // indirect
|
||||
github.com/shirou/gopsutil/v3 v3.24.4 // indirect
|
||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.1 // indirect
|
||||
github.com/tinylib/msgp v1.1.9 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.13 // indirect
|
||||
github.com/tklauser/numcpus v0.7.0 // indirect
|
||||
github.com/vbauerster/mpb/v8 v8.7.2 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.14 // indirect
|
||||
github.com/tklauser/numcpus v0.8.0 // indirect
|
||||
github.com/vbauerster/mpb/v8 v8.7.3 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.etcd.io/etcd/api/v3 v3.5.12 // indirect
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.12 // indirect
|
||||
go.etcd.io/etcd/client/v3 v3.5.12 // indirect
|
||||
go.etcd.io/etcd/api/v3 v3.5.13 // indirect
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect
|
||||
go.etcd.io/etcd/client/v3 v3.5.13 // indirect
|
||||
go.mongodb.org/mongo-driver v1.14.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.uber.org/zap v1.27.0 // indirect
|
||||
golang.org/x/sync v0.6.0 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
golang.org/x/term v0.18.0 // indirect
|
||||
golang.org/x/sync v0.7.0 // indirect
|
||||
golang.org/x/sys v0.20.0 // indirect
|
||||
golang.org/x/term v0.20.0 // indirect
|
||||
google.golang.org/appengine v1.6.8 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 // indirect
|
||||
google.golang.org/grpc v1.62.1 // indirect
|
||||
google.golang.org/protobuf v1.33.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240509183442-62759503f434 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240509183442-62759503f434 // indirect
|
||||
google.golang.org/grpc v1.63.2 // indirect
|
||||
google.golang.org/protobuf v1.34.1 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
146
go.sum
146
go.sum
@@ -16,8 +16,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
|
||||
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0=
|
||||
github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw=
|
||||
github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM=
|
||||
@@ -38,8 +38,9 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
@@ -49,12 +50,6 @@ github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
||||
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
||||
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
|
||||
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
|
||||
github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU=
|
||||
github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg=
|
||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
|
||||
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
|
||||
@@ -78,8 +73,6 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr
|
||||
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
||||
github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58=
|
||||
github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
@@ -97,9 +90,6 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
@@ -112,20 +102,18 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l
|
||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.4 h1:gOGo0613MoqUcf0xCj+h/V3sHDaZasfv152G6/5l91s=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.4/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.8 h1:8BCzJdSvUbaDuRba4YVh+SKMGcAAKdkcF3SVFbrHAtQ=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.8/go.mod h1:zbn98qrYlh95FIhwwsbIip0LYpwSG8SUOScs+v9/t0E=
|
||||
github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc=
|
||||
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/juju/ratelimit v1.0.2 h1:sRxmtRiajbvrcLQT7S+JbqU0ntsb9W2yhSdNN8tWfaI=
|
||||
github.com/juju/ratelimit v1.0.2/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
|
||||
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
|
||||
github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
@@ -149,8 +137,8 @@ github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmt
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
github.com/lufia/plan9stats v0.0.0-20240226150601-1dcf7310316a h1:3Bm7EwfUQUvhNeKIkUct/gl9eod1TcXuj8stxvi/GoI=
|
||||
github.com/lufia/plan9stats v0.0.0-20240226150601-1dcf7310316a/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
|
||||
github.com/lufia/plan9stats v0.0.0-20240408141607-282e7b5d6b74 h1:1KuuSOy4ZNgW0KA2oYIngXVFhQcXxhLqCVK7cBcldkk=
|
||||
github.com/lufia/plan9stats v0.0.0-20240408141607-282e7b5d6b74/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
|
||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
@@ -184,33 +172,28 @@ github.com/minio/kes v0.23.0 h1:T0zHtyDoI3JdKrVvzdM4xwVryYYyh5pKwNUVBoqxsNs=
|
||||
github.com/minio/kes v0.23.0/go.mod h1:vvXVGcgu9mYLkbVWlEvFFl6bYR196RQlOU2Q+rHApl8=
|
||||
github.com/minio/kes-go v0.2.1 h1:KnqS+p6xoSFJZbQhmJaz/PbxeA6nQyRqT/ywrn5lU2o=
|
||||
github.com/minio/kes-go v0.2.1/go.mod h1:76xf7l41Wrh+IifisABXK2S8uZWYgWV1IGBKC3GdOJk=
|
||||
github.com/minio/madmin-go/v3 v3.0.50 h1:+RQMetVFvPQmAOEDN/xmLhwk9+xOzu3rqwnlZEskgvg=
|
||||
github.com/minio/madmin-go/v3 v3.0.50/go.mod h1:ZDF7kf5fhmxLhbGTqyq5efs4ao0v4eWf7nOuef/ljJs=
|
||||
github.com/minio/mc v0.0.0-20240330152952-9f8147bf0e03 h1:xF1hntqvs/CVEHGBETSrIMTW3iSU3k2j/YCFXGDWoBs=
|
||||
github.com/minio/mc v0.0.0-20240330152952-9f8147bf0e03/go.mod h1:RMCe706GTL9EOO6pxzFXd9Vp+3w2L1uctPiycmLDr9U=
|
||||
github.com/minio/madmin-go/v3 v3.0.51 h1:brGOvDP8KvoHb/bdzCHUPFCbTtrN8o507uPHZpyuinM=
|
||||
github.com/minio/madmin-go/v3 v3.0.51/go.mod h1:IFAwr0XMrdsLovxAdCcuq/eoL4nRuMVQQv0iubJANQw=
|
||||
github.com/minio/mc v0.0.0-20240430174448-dcb911bed9d5 h1:VDXLzvY0Jxk4lzIntGXZuw0VH7S1JgQBmjWGkz7xphU=
|
||||
github.com/minio/mc v0.0.0-20240430174448-dcb911bed9d5/go.mod h1:aOiBeSNmpfJn1yyz+EujrTM+XmUwkXiM69zSXg12VDM=
|
||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||
github.com/minio/minio-go/v7 v7.0.69 h1:l8AnsQFyY1xiwa/DaQskY4NXSLA2yrGsW5iD9nRPVS0=
|
||||
github.com/minio/minio-go/v7 v7.0.69/go.mod h1:XAvOPJQ5Xlzk5o3o/ArO2NMbhSGkimC+bpW/ngRKDmQ=
|
||||
github.com/minio/minio-go/v7 v7.0.70 h1:1u9NtMgfK1U42kUxcsl5v0yj6TEOPR497OAQxpJnn2g=
|
||||
github.com/minio/minio-go/v7 v7.0.70/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo=
|
||||
github.com/minio/mux v1.9.0 h1:dWafQFyEfGhJvK6AwLOt83bIG5bxKxKJnKMCi0XAaoA=
|
||||
github.com/minio/mux v1.9.0/go.mod h1:1pAare17ZRL5GpmNL+9YmqHoWnLmMZF9C/ioUCfy0BQ=
|
||||
github.com/minio/pkg/v2 v2.0.13 h1:Tm4koPzm+gVVCU5YLPtzXzfwkCR5sd/asXCu/RABSeA=
|
||||
github.com/minio/pkg/v2 v2.0.13/go.mod h1:zbVATXCinLCo+L/4vsPyqgiA4OYPXCJb+/E4KfE396A=
|
||||
github.com/minio/pkg/v2 v2.0.17 h1:ndmGlitUj/eCVRPmfsAw3KlbtVNxqk0lQIvDXlcTHiQ=
|
||||
github.com/minio/pkg/v2 v2.0.17/go.mod h1:V+OP/fKRD/qhJMQpdXXrCXcLYjGMpHKEE26zslthm5k=
|
||||
github.com/minio/pkg/v3 v3.0.0 h1:0vOKHgwpya//mb7RH0i1lyPMH2IBBF5hJMNY5Bk2WlY=
|
||||
github.com/minio/pkg/v3 v3.0.0/go.mod h1:53gkSUVHcfYoskOs5YAJ3D99nsd2SKru90rdE9whlXU=
|
||||
github.com/minio/selfupdate v0.6.0 h1:i76PgT0K5xO9+hjzKcacQtO7+MjJ4JKA8Ak8XQ9DDwU=
|
||||
github.com/minio/selfupdate v0.6.0/go.mod h1:bO02GTIPCMQFTEvE5h4DjYB58bCoZ35XLeBf0buTDdM=
|
||||
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
|
||||
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
|
||||
github.com/minio/websocket v1.6.0 h1:CPvnQvNvlVaQmvw5gtJNyYQhg4+xRmrPNhBbv8BdpAE=
|
||||
github.com/minio/websocket v1.6.0/go.mod h1:COH1CePZfHT9Ec1O7vZjTlX5uEPpyYnrifPNbu665DM=
|
||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
|
||||
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
|
||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
|
||||
@@ -221,16 +204,10 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
|
||||
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
|
||||
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
|
||||
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
|
||||
github.com/navidys/tvxwidgets v0.6.0 h1:ARIXGfx4aURHMhq+LW5vIoCCDx1X/PdTF8AcUq+nWZ0=
|
||||
github.com/navidys/tvxwidgets v0.6.0/go.mod h1:wd6aS2OzjZczFbg8GCaVuwkFcY1eixlT/y7Lc/YIwlg=
|
||||
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
|
||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||
github.com/onsi/ginkgo/v2 v2.16.0 h1:7q1w9frJDzninhXxjZd+Y/x54XNjG/UlRLIYPZafsPM=
|
||||
github.com/onsi/ginkgo/v2 v2.16.0/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
|
||||
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
|
||||
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
|
||||
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
|
||||
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
@@ -247,19 +224,16 @@ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
|
||||
github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
|
||||
github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos=
|
||||
github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8=
|
||||
github.com/prometheus/common v0.50.0 h1:YSZE6aa9+luNa2da6/Tik0q0A5AbR+U003TItK57CPQ=
|
||||
github.com/prometheus/common v0.50.0/go.mod h1:wHFBCEVWVmHMUpg7pYcOm2QUR/ocQdYSJVQJKnHc3xQ=
|
||||
github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
|
||||
github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
|
||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
||||
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
||||
github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE=
|
||||
github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U=
|
||||
github.com/prometheus/procfs v0.14.0 h1:Lw4VdGGoKEZilJsayHf0B+9YgLGREba2C6xr+Fdfq6s=
|
||||
github.com/prometheus/procfs v0.14.0/go.mod h1:XL+Iwz8k8ZabyZfMFHPiilCniixqQarAy5Mu67pHlNQ=
|
||||
github.com/prometheus/prom2json v1.3.3 h1:IYfSMiZ7sSOfliBoo89PcufjWO4eAR0gznGcETyaUgo=
|
||||
github.com/prometheus/prom2json v1.3.3/go.mod h1:Pv4yIPktEkK7btWsrUTWDDDrnpUrAELaOCj+oFwlgmc=
|
||||
github.com/rivo/tview v0.0.0-20240307173318-e804876934a1 h1:bWLHTRekAy497pE7+nXSuzXwwFHI0XauRzz6roUvY+s=
|
||||
github.com/rivo/tview v0.0.0-20240307173318-e804876934a1/go.mod h1:02iFIz7K/A9jGCvrizLPvoqr4cEIx7q54RH5Qudkrss=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rjeczalik/notify v0.9.3 h1:6rJAzHTGKXGj76sbRgDiDcYj/HniypXmSJo1SWakZeY=
|
||||
@@ -272,8 +246,8 @@ github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP
|
||||
github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs=
|
||||
github.com/secure-io/sio-go v0.3.1 h1:dNvY9awjabXTYGsTF1PiCySl9Ltofk9GA3VdWlo7rRc=
|
||||
github.com/secure-io/sio-go v0.3.1/go.mod h1:+xbkjDzPjwh4Axd07pRKSNriS9SCiYksWnZqdnfpQxs=
|
||||
github.com/shirou/gopsutil/v3 v3.24.2 h1:kcR0erMbLg5/3LcInpw0X/rrPSqq4CDPyI6A6ZRC18Y=
|
||||
github.com/shirou/gopsutil/v3 v3.24.2/go.mod h1:tSg/594BcA+8UdQU2XcW803GWYgdtauFFPgJCJKZlVk=
|
||||
github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU=
|
||||
github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8=
|
||||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
|
||||
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
|
||||
@@ -282,7 +256,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
@@ -300,26 +273,26 @@ github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhso
|
||||
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
|
||||
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
|
||||
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
|
||||
github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4=
|
||||
github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0=
|
||||
github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU=
|
||||
github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
|
||||
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
|
||||
github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4=
|
||||
github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY=
|
||||
github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY=
|
||||
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE=
|
||||
github.com/unrolled/secure v1.14.0 h1:u9vJTU/pR4Bny0ntLUMxdfLtmIRGvQf2sEFuA0TG9AE=
|
||||
github.com/unrolled/secure v1.14.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40=
|
||||
github.com/vbauerster/mpb/v8 v8.7.2 h1:SMJtxhNho1MV3OuFgS1DAzhANN1Ejc5Ct+0iSaIkB14=
|
||||
github.com/vbauerster/mpb/v8 v8.7.2/go.mod h1:ZFnrjzspgDHoxYLGvxIruiNk73GNTPG4YHgVNpR10VY=
|
||||
github.com/vbauerster/mpb/v8 v8.7.3 h1:n/mKPBav4FFWp5fH4U0lPpXfiOmCEgl5Yx/NM3tKJA0=
|
||||
github.com/vbauerster/mpb/v8 v8.7.3/go.mod h1:9nFlNpDGVoTmQ4QvNjSLtwLmAFjwmq0XaAF26toHGNM=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.etcd.io/etcd/api/v3 v3.5.12 h1:W4sw5ZoU2Juc9gBWuLk5U6fHfNVyY1WC5g9uiXZio/c=
|
||||
go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.12 h1:EYDL6pWwyOsylrQyLp2w+HkQ46ATiOvoEdMarindU2A=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
|
||||
go.etcd.io/etcd/client/v3 v3.5.12 h1:v5lCPXn1pf1Uu3M4laUE2hp/geOTc5uPcYYsNe1lDxg=
|
||||
go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw=
|
||||
go.etcd.io/etcd/api/v3 v3.5.13 h1:8WXU2/NBge6AUF1K1gOexB6e07NgsN1hXK0rSTtgSp4=
|
||||
go.etcd.io/etcd/api/v3 v3.5.13/go.mod h1:gBqlqkcMMZMVTMm4NDZloEVJzxQOQIls8splbqBDa0c=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.13 h1:RVZSAnWWWiI5IrYAXjQorajncORbS0zI48LQlE2kQWg=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.13/go.mod h1:XxHT4u1qU12E2+po+UVPrEeL94Um6zL58ppuJWXSAB8=
|
||||
go.etcd.io/etcd/client/v3 v3.5.13 h1:o0fHTNJLeO0MyVbc7I3fsCf6nrOqn5d+diSarKnB2js=
|
||||
go.etcd.io/etcd/client/v3 v3.5.13/go.mod h1:cqiAeY8b5DEEcpxvgWKsbLIWNM/8Wy2xJSDMtioMcoI=
|
||||
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
|
||||
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
@@ -336,8 +309,9 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
|
||||
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
||||
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
|
||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
@@ -352,8 +326,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
|
||||
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
|
||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
||||
golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
|
||||
golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -362,8 +336,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
|
||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -389,16 +363,19 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
|
||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
|
||||
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
|
||||
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
|
||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
@@ -406,32 +383,31 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
|
||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
|
||||
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
|
||||
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 h1:oqta3O3AnlWbmIE3bFnWbu4bRxZjfbWCp0cKSuZh01E=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 h1:8EeVk1VKMD+GD/neyEHGmz7pFblqPjHoi+PGQIlLx2s=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
|
||||
google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
|
||||
google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240509183442-62759503f434 h1:OpXbo8JnN8+jZGPrL4SSfaDjSCjupr8lXyBAbexEm/U=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240509183442-62759503f434/go.mod h1:FfiGhwUm6CJviekPrc0oJ+7h29e+DmWU6UtjX0ZvI7Y=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240509183442-62759503f434 h1:umK/Ey0QEzurTNlsV3R+MfxHAb78HCEX/IkuR+zH4WQ=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240509183442-62759503f434/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM=
|
||||
google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
|
||||
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
||||
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
|
||||
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
|
||||
@@ -68,6 +68,9 @@ type MultiBucketReplication struct {
|
||||
// replicate deletes
|
||||
ReplicateDeletes bool `json:"replicateDeletes,omitempty"`
|
||||
|
||||
// replicate existing objects
|
||||
ReplicateExistingObjects bool `json:"replicateExistingObjects,omitempty"`
|
||||
|
||||
// replicate metadata
|
||||
ReplicateMetadata bool `json:"replicateMetadata,omitempty"`
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
|
||||
"github.com/minio/console/pkg/auth/token"
|
||||
"github.com/minio/minio-go/v7/pkg/set"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
"golang.org/x/crypto/pbkdf2"
|
||||
"golang.org/x/oauth2"
|
||||
xoauth2 "golang.org/x/oauth2"
|
||||
@@ -52,9 +52,9 @@ type ProviderConfig struct {
|
||||
//
|
||||
// We only support Authentication with the Authorization Code Flow - spec:
|
||||
// https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth
|
||||
func (pc ProviderConfig) GetOauth2Provider(name string, scopes []string, r *http.Request, idpClient, stsClient *http.Client) (provider *Provider, err error) {
|
||||
func (pc ProviderConfig) GetOauth2Provider(name string, scopes []string, r *http.Request, clnt *http.Client) (provider *Provider, err error) {
|
||||
var ddoc DiscoveryDoc
|
||||
ddoc, err = parseDiscoveryDoc(r.Context(), pc.URL, idpClient)
|
||||
ddoc, err = parseDiscoveryDoc(r.Context(), pc.URL, clnt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -112,9 +112,7 @@ func (pc ProviderConfig) GetOauth2Provider(name string, scopes []string, r *http
|
||||
|
||||
client.IDPName = name
|
||||
client.UserInfo = pc.Userinfo
|
||||
|
||||
client.provHTTPClient = idpClient
|
||||
client.stsHTTPClient = stsClient
|
||||
client.client = clnt
|
||||
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ import (
|
||||
"github.com/minio/console/pkg/auth/utils"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"github.com/minio/minio-go/v7/pkg/set"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
"golang.org/x/crypto/pbkdf2"
|
||||
"golang.org/x/oauth2"
|
||||
xoauth2 "golang.org/x/oauth2"
|
||||
@@ -109,11 +109,10 @@ type Provider struct {
|
||||
// - Scopes specifies optional requested permissions.
|
||||
IDPName string
|
||||
// if enabled means that we need extrace access_token as well
|
||||
UserInfo bool
|
||||
RefreshToken string
|
||||
oauth2Config Configuration
|
||||
provHTTPClient *http.Client
|
||||
stsHTTPClient *http.Client
|
||||
UserInfo bool
|
||||
RefreshToken string
|
||||
oauth2Config Configuration
|
||||
client *http.Client
|
||||
}
|
||||
|
||||
// DefaultDerivedKey is the key used to compute the HMAC for signing the oauth state parameter
|
||||
@@ -204,7 +203,7 @@ func NewOauth2ProviderClient(scopes []string, r *http.Request, httpClient *http.
|
||||
|
||||
client.IDPName = GetIDPClientID()
|
||||
client.UserInfo = GetIDPUserInfo()
|
||||
client.provHTTPClient = httpClient
|
||||
client.client = httpClient
|
||||
|
||||
return client, nil
|
||||
}
|
||||
@@ -212,12 +211,12 @@ func NewOauth2ProviderClient(scopes []string, r *http.Request, httpClient *http.
|
||||
var defaultScopes = []string{"openid", "profile", "email"}
|
||||
|
||||
// NewOauth2ProviderClientByName returns a provider if present specified by the input name of the provider.
|
||||
func (ois OpenIDPCfg) NewOauth2ProviderClientByName(name string, scopes []string, r *http.Request, idpClient, stsClient *http.Client) (provider *Provider, err error) {
|
||||
func (ois OpenIDPCfg) NewOauth2ProviderClientByName(name string, scopes []string, r *http.Request, clnt *http.Client) (provider *Provider, err error) {
|
||||
oi, ok := ois[name]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("%s IDP provider does not exist", name)
|
||||
}
|
||||
return oi.GetOauth2Provider(name, scopes, r, idpClient, stsClient)
|
||||
return oi.GetOauth2Provider(name, scopes, r, clnt)
|
||||
}
|
||||
|
||||
// NewOauth2ProviderClient instantiates a new oauth2 client using the
|
||||
@@ -227,9 +226,9 @@ func (ois OpenIDPCfg) NewOauth2ProviderClientByName(name string, scopes []string
|
||||
//
|
||||
// We only support Authentication with the Authorization Code Flow - spec:
|
||||
// https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth
|
||||
func (ois OpenIDPCfg) NewOauth2ProviderClient(scopes []string, r *http.Request, idpClient, stsClient *http.Client) (provider *Provider, providerCfg ProviderConfig, err error) {
|
||||
func (ois OpenIDPCfg) NewOauth2ProviderClient(scopes []string, r *http.Request, clnt *http.Client) (provider *Provider, providerCfg ProviderConfig, err error) {
|
||||
for name, oi := range ois {
|
||||
provider, err = oi.GetOauth2Provider(name, scopes, r, idpClient, stsClient)
|
||||
provider, err = oi.GetOauth2Provider(name, scopes, r, clnt)
|
||||
if err != nil {
|
||||
// Upon error look for the next IDP.
|
||||
continue
|
||||
@@ -278,7 +277,7 @@ func (client *Provider) VerifyIdentity(ctx context.Context, code, state, roleARN
|
||||
return nil, err
|
||||
}
|
||||
getWebTokenExpiry := func() (*credentials.WebIdentityToken, error) {
|
||||
customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.provHTTPClient)
|
||||
customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.client)
|
||||
oauth2Token, err := client.oauth2Config.Exchange(customCtx, code)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -328,7 +327,7 @@ func (client *Provider) VerifyIdentity(ctx context.Context, code, state, roleARN
|
||||
stsEndpoint := GetSTSEndpoint()
|
||||
|
||||
sts := credentials.New(&credentials.STSWebIdentity{
|
||||
Client: client.stsHTTPClient,
|
||||
Client: client.client,
|
||||
STSEndpoint: stsEndpoint,
|
||||
GetWebIDTokenExpiry: getWebTokenExpiry,
|
||||
RoleARN: roleARN,
|
||||
@@ -342,7 +341,7 @@ func (client *Provider) VerifyIdentityForOperator(ctx context.Context, code, sta
|
||||
if err := validateOauth2State(state, keyFunc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.provHTTPClient)
|
||||
customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.client)
|
||||
oauth2Token, err := client.oauth2Config.Exchange(customCtx, code)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -19,7 +19,7 @@ package ldap
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
)
|
||||
|
||||
func GetLDAPEnabled() bool {
|
||||
|
||||
@@ -20,7 +20,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/minio/console/pkg/auth/utils"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
)
|
||||
|
||||
// GetConsoleSTSDuration returns the default session duration for the STS requested tokens (defaults to 12h)
|
||||
|
||||
@@ -29,8 +29,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/minio/cli"
|
||||
xcerts "github.com/minio/pkg/v2/certs"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
xcerts "github.com/minio/pkg/v3/certs"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
"github.com/mitchellh/go-homedir"
|
||||
)
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ import (
|
||||
|
||||
"github.com/minio/console/pkg/logger/config"
|
||||
"github.com/minio/console/pkg/logger/target/http"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
)
|
||||
|
||||
// NewConfig - initialize new logger config.
|
||||
|
||||
@@ -25,7 +25,7 @@ import (
|
||||
|
||||
"github.com/minio/console/pkg/logger/color"
|
||||
"github.com/minio/console/pkg/logger/message/log"
|
||||
c "github.com/minio/pkg/v2/console"
|
||||
c "github.com/minio/pkg/v3/console"
|
||||
)
|
||||
|
||||
// Logger interface describes the methods that need to be implemented to satisfy the interface requirements.
|
||||
|
||||
@@ -31,10 +31,10 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
|
||||
"github.com/minio/console/pkg"
|
||||
"github.com/minio/pkg/v2/certs"
|
||||
"github.com/minio/pkg/v3/certs"
|
||||
|
||||
"github.com/minio/console/pkg/logger/config"
|
||||
"github.com/minio/console/pkg/logger/message/log"
|
||||
|
||||
@@ -20,7 +20,7 @@ import (
|
||||
"errors"
|
||||
"log"
|
||||
|
||||
"github.com/minio/pkg/v2/licverifier"
|
||||
"github.com/minio/pkg/v3/licverifier"
|
||||
)
|
||||
|
||||
// GetLicenseInfoFromJWT will return license metadata from a jwt string license
|
||||
|
||||
@@ -20,7 +20,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/minio/pkg/v2/licverifier"
|
||||
"github.com/minio/pkg/v3/licverifier"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -33,7 +33,7 @@ import (
|
||||
|
||||
"github.com/minio/madmin-go/v3"
|
||||
mc "github.com/minio/mc/cmd"
|
||||
"github.com/minio/pkg/v2/env"
|
||||
"github.com/minio/pkg/v3/env"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -21,7 +21,7 @@ import (
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"github.com/minio/pkg/v2/ellipses"
|
||||
"github.com/minio/pkg/v3/ellipses"
|
||||
)
|
||||
|
||||
// This file implements and supports ellipses pattern for
|
||||
|
||||
@@ -20,7 +20,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/minio/pkg/v2/ellipses"
|
||||
"github.com/minio/pkg/v3/ellipses"
|
||||
)
|
||||
|
||||
func TestGetDivisibleSize(t *testing.T) {
|
||||
|
||||
@@ -703,6 +703,9 @@ paths:
|
||||
in: query
|
||||
required: true
|
||||
type: string
|
||||
- name: versionID
|
||||
in: query
|
||||
type: string
|
||||
responses:
|
||||
200:
|
||||
description: A successful response.
|
||||
@@ -4219,6 +4222,8 @@ definitions:
|
||||
type: string
|
||||
tags:
|
||||
type: string
|
||||
replicateExistingObjects:
|
||||
type: boolean
|
||||
replicateDeleteMarkers:
|
||||
type: boolean
|
||||
replicateDeletes:
|
||||
|
||||
1
web-app/.yarnrc.yml
Normal file
1
web-app/.yarnrc.yml
Normal file
@@ -0,0 +1 @@
|
||||
nodeLinker: node-modules
|
||||
@@ -1,68 +1,68 @@
|
||||
{
|
||||
"files": {
|
||||
"main.css": "./static/css/main.e60e4760.css",
|
||||
"main.js": "./static/js/main.cbc16c2b.js",
|
||||
"main.js": "./static/js/main.77c2c9f2.js",
|
||||
"static/js/5301.2c626a41.chunk.js": "./static/js/5301.2c626a41.chunk.js",
|
||||
"static/js/9361.3fc638a6.chunk.js": "./static/js/9361.3fc638a6.chunk.js",
|
||||
"static/js/843.8502a4fd.chunk.js": "./static/js/843.8502a4fd.chunk.js",
|
||||
"static/js/3035.b2eb0918.chunk.js": "./static/js/3035.b2eb0918.chunk.js",
|
||||
"static/js/9537.675a2ebb.chunk.js": "./static/js/9537.675a2ebb.chunk.js",
|
||||
"static/js/5711.c58de6bb.chunk.js": "./static/js/5711.c58de6bb.chunk.js",
|
||||
"static/js/8769.5e67beb9.chunk.js": "./static/js/8769.5e67beb9.chunk.js",
|
||||
"static/js/2033.a09fb9da.chunk.js": "./static/js/2033.a09fb9da.chunk.js",
|
||||
"static/js/8821.44b4fe0f.chunk.js": "./static/js/8821.44b4fe0f.chunk.js",
|
||||
"static/js/9987.15024980.chunk.js": "./static/js/9987.15024980.chunk.js",
|
||||
"static/js/689.5e705237.chunk.js": "./static/js/689.5e705237.chunk.js",
|
||||
"static/js/6164.993b302b.chunk.js": "./static/js/6164.993b302b.chunk.js",
|
||||
"static/js/2372.aaeaeefa.chunk.js": "./static/js/2372.aaeaeefa.chunk.js",
|
||||
"static/js/1324.beff0285.chunk.js": "./static/js/1324.beff0285.chunk.js",
|
||||
"static/js/5693.5834aa74.chunk.js": "./static/js/5693.5834aa74.chunk.js",
|
||||
"static/js/843.454ac75f.chunk.js": "./static/js/843.454ac75f.chunk.js",
|
||||
"static/js/3035.d50f543e.chunk.js": "./static/js/3035.d50f543e.chunk.js",
|
||||
"static/js/9537.69d1689c.chunk.js": "./static/js/9537.69d1689c.chunk.js",
|
||||
"static/js/5711.9df9b4a2.chunk.js": "./static/js/5711.9df9b4a2.chunk.js",
|
||||
"static/js/8769.996efd0a.chunk.js": "./static/js/8769.996efd0a.chunk.js",
|
||||
"static/js/2033.bea44dd7.chunk.js": "./static/js/2033.bea44dd7.chunk.js",
|
||||
"static/js/8821.e7fb1c57.chunk.js": "./static/js/8821.e7fb1c57.chunk.js",
|
||||
"static/js/9987.79508d87.chunk.js": "./static/js/9987.79508d87.chunk.js",
|
||||
"static/js/689.8272f409.chunk.js": "./static/js/689.8272f409.chunk.js",
|
||||
"static/js/6164.c2cd952a.chunk.js": "./static/js/6164.c2cd952a.chunk.js",
|
||||
"static/js/2372.97c7de62.chunk.js": "./static/js/2372.97c7de62.chunk.js",
|
||||
"static/js/1324.62d917da.chunk.js": "./static/js/1324.62d917da.chunk.js",
|
||||
"static/js/5693.eb317771.chunk.js": "./static/js/5693.eb317771.chunk.js",
|
||||
"static/js/5872.62eb672b.chunk.js": "./static/js/5872.62eb672b.chunk.js",
|
||||
"static/js/6758.b6da6dc7.chunk.js": "./static/js/6758.b6da6dc7.chunk.js",
|
||||
"static/js/6758.cf46c98c.chunk.js": "./static/js/6758.cf46c98c.chunk.js",
|
||||
"static/js/755.ac098541.chunk.js": "./static/js/755.ac098541.chunk.js",
|
||||
"static/js/8715.0aaa4c38.chunk.js": "./static/js/8715.0aaa4c38.chunk.js",
|
||||
"static/js/7880.6f98d22b.chunk.js": "./static/js/7880.6f98d22b.chunk.js",
|
||||
"static/js/8715.1422d39d.chunk.js": "./static/js/8715.1422d39d.chunk.js",
|
||||
"static/js/7880.813513ce.chunk.js": "./static/js/7880.813513ce.chunk.js",
|
||||
"static/js/2209.3b0ca7fa.chunk.js": "./static/js/2209.3b0ca7fa.chunk.js",
|
||||
"static/js/7435.eb0888fa.chunk.js": "./static/js/7435.eb0888fa.chunk.js",
|
||||
"static/js/9340.8c56fae7.chunk.js": "./static/js/9340.8c56fae7.chunk.js",
|
||||
"static/js/9269.e21bb7dd.chunk.js": "./static/js/9269.e21bb7dd.chunk.js",
|
||||
"static/js/6925.65a0241f.chunk.js": "./static/js/6925.65a0241f.chunk.js",
|
||||
"static/js/3527.59dee34f.chunk.js": "./static/js/3527.59dee34f.chunk.js",
|
||||
"static/js/8789.668926b3.chunk.js": "./static/js/8789.668926b3.chunk.js",
|
||||
"static/js/7485.7f393450.chunk.js": "./static/js/7485.7f393450.chunk.js",
|
||||
"static/js/7041.4daa055d.chunk.js": "./static/js/7041.4daa055d.chunk.js",
|
||||
"static/js/2138.d05b3faa.chunk.js": "./static/js/2138.d05b3faa.chunk.js",
|
||||
"static/js/5699.bb05be82.chunk.js": "./static/js/5699.bb05be82.chunk.js",
|
||||
"static/js/7381.99263635.chunk.js": "./static/js/7381.99263635.chunk.js",
|
||||
"static/js/7052.58711f5f.chunk.js": "./static/js/7052.58711f5f.chunk.js",
|
||||
"static/js/144.1bc937a8.chunk.js": "./static/js/144.1bc937a8.chunk.js",
|
||||
"static/js/5978.723fd455.chunk.js": "./static/js/5978.723fd455.chunk.js",
|
||||
"static/js/4103.b6a51725.chunk.js": "./static/js/4103.b6a51725.chunk.js",
|
||||
"static/js/1702.9ff3a82e.chunk.js": "./static/js/1702.9ff3a82e.chunk.js",
|
||||
"static/js/7435.2ed74878.chunk.js": "./static/js/7435.2ed74878.chunk.js",
|
||||
"static/js/9340.acfd036d.chunk.js": "./static/js/9340.acfd036d.chunk.js",
|
||||
"static/js/9269.dfec9438.chunk.js": "./static/js/9269.dfec9438.chunk.js",
|
||||
"static/js/6925.b3e208b0.chunk.js": "./static/js/6925.b3e208b0.chunk.js",
|
||||
"static/js/3527.30ec1659.chunk.js": "./static/js/3527.30ec1659.chunk.js",
|
||||
"static/js/8789.5dfcad74.chunk.js": "./static/js/8789.5dfcad74.chunk.js",
|
||||
"static/js/7485.64738b77.chunk.js": "./static/js/7485.64738b77.chunk.js",
|
||||
"static/js/7041.219c4d11.chunk.js": "./static/js/7041.219c4d11.chunk.js",
|
||||
"static/js/2138.7da0f275.chunk.js": "./static/js/2138.7da0f275.chunk.js",
|
||||
"static/js/5699.016e97fa.chunk.js": "./static/js/5699.016e97fa.chunk.js",
|
||||
"static/js/7381.0caa382c.chunk.js": "./static/js/7381.0caa382c.chunk.js",
|
||||
"static/js/7052.1e7e2b40.chunk.js": "./static/js/7052.1e7e2b40.chunk.js",
|
||||
"static/js/144.c7530a4b.chunk.js": "./static/js/144.c7530a4b.chunk.js",
|
||||
"static/js/5978.7fb91072.chunk.js": "./static/js/5978.7fb91072.chunk.js",
|
||||
"static/js/4103.926c44ef.chunk.js": "./static/js/4103.926c44ef.chunk.js",
|
||||
"static/js/1702.851e407f.chunk.js": "./static/js/1702.851e407f.chunk.js",
|
||||
"static/js/7601.4e033e78.chunk.js": "./static/js/7601.4e033e78.chunk.js",
|
||||
"static/js/2959.25a10423.chunk.js": "./static/js/2959.25a10423.chunk.js",
|
||||
"static/js/9619.572ad00d.chunk.js": "./static/js/9619.572ad00d.chunk.js",
|
||||
"static/js/2959.c4f178f1.chunk.js": "./static/js/2959.c4f178f1.chunk.js",
|
||||
"static/js/9619.a756233f.chunk.js": "./static/js/9619.a756233f.chunk.js",
|
||||
"static/js/8017.d5b163f3.chunk.js": "./static/js/8017.d5b163f3.chunk.js",
|
||||
"static/js/3323.f86a698b.chunk.js": "./static/js/3323.f86a698b.chunk.js",
|
||||
"static/js/5128.96ab1387.chunk.js": "./static/js/5128.96ab1387.chunk.js",
|
||||
"static/js/6140.37801ce8.chunk.js": "./static/js/6140.37801ce8.chunk.js",
|
||||
"static/js/696.77a3fec7.chunk.js": "./static/js/696.77a3fec7.chunk.js",
|
||||
"static/js/2166.1e6c2b39.chunk.js": "./static/js/2166.1e6c2b39.chunk.js",
|
||||
"static/js/7063.80895202.chunk.js": "./static/js/7063.80895202.chunk.js",
|
||||
"static/js/3061.c8170979.chunk.js": "./static/js/3061.c8170979.chunk.js",
|
||||
"static/js/5064.8df5c897.chunk.js": "./static/js/5064.8df5c897.chunk.js",
|
||||
"static/js/7643.bc0ec1d5.chunk.js": "./static/js/7643.bc0ec1d5.chunk.js",
|
||||
"static/js/985.d2139cb6.chunk.js": "./static/js/985.d2139cb6.chunk.js",
|
||||
"static/js/1370.d5e698ce.chunk.js": "./static/js/1370.d5e698ce.chunk.js",
|
||||
"static/js/2166.bb4ae347.chunk.js": "./static/js/2166.bb4ae347.chunk.js",
|
||||
"static/js/7063.d62078ab.chunk.js": "./static/js/7063.d62078ab.chunk.js",
|
||||
"static/js/3061.2419f208.chunk.js": "./static/js/3061.2419f208.chunk.js",
|
||||
"static/js/5064.ccf271db.chunk.js": "./static/js/5064.ccf271db.chunk.js",
|
||||
"static/js/7643.41c0709d.chunk.js": "./static/js/7643.41c0709d.chunk.js",
|
||||
"static/js/985.f5122b3c.chunk.js": "./static/js/985.f5122b3c.chunk.js",
|
||||
"static/js/1370.adfc1682.chunk.js": "./static/js/1370.adfc1682.chunk.js",
|
||||
"static/js/8823.034b6a8d.chunk.js": "./static/js/8823.034b6a8d.chunk.js",
|
||||
"static/js/24.1245bd95.chunk.js": "./static/js/24.1245bd95.chunk.js",
|
||||
"static/js/5851.9d7a7887.chunk.js": "./static/js/5851.9d7a7887.chunk.js",
|
||||
"static/js/4705.2270c966.chunk.js": "./static/js/4705.2270c966.chunk.js",
|
||||
"static/js/3654.877a48d3.chunk.js": "./static/js/3654.877a48d3.chunk.js",
|
||||
"static/js/960.69a44c1d.chunk.js": "./static/js/960.69a44c1d.chunk.js",
|
||||
"static/js/8642.883c89db.chunk.js": "./static/js/8642.883c89db.chunk.js",
|
||||
"static/js/3329.c2099208.chunk.js": "./static/js/3329.c2099208.chunk.js",
|
||||
"static/js/2332.7f421c9f.chunk.js": "./static/js/2332.7f421c9f.chunk.js",
|
||||
"static/js/960.494cc9da.chunk.js": "./static/js/960.494cc9da.chunk.js",
|
||||
"static/js/8642.ab45092c.chunk.js": "./static/js/8642.ab45092c.chunk.js",
|
||||
"static/js/3329.89a09424.chunk.js": "./static/js/3329.89a09424.chunk.js",
|
||||
"static/js/2332.7e0aee28.chunk.js": "./static/js/2332.7e0aee28.chunk.js",
|
||||
"static/js/5941.4df5a08b.chunk.js": "./static/js/5941.4df5a08b.chunk.js",
|
||||
"static/js/2704.fe33dd23.chunk.js": "./static/js/2704.fe33dd23.chunk.js",
|
||||
"static/js/7774.4d23a595.chunk.js": "./static/js/7774.4d23a595.chunk.js",
|
||||
@@ -92,8 +92,8 @@
|
||||
"static/js/1303.12f6ca82.chunk.js": "./static/js/1303.12f6ca82.chunk.js",
|
||||
"static/js/5079.a0847792.chunk.js": "./static/js/5079.a0847792.chunk.js",
|
||||
"static/js/4581.41480fcf.chunk.js": "./static/js/4581.41480fcf.chunk.js",
|
||||
"static/js/6016.dcb3bcb4.chunk.js": "./static/js/6016.dcb3bcb4.chunk.js",
|
||||
"static/js/8144.0cc85475.chunk.js": "./static/js/8144.0cc85475.chunk.js",
|
||||
"static/js/6016.2a05d7e1.chunk.js": "./static/js/6016.2a05d7e1.chunk.js",
|
||||
"static/js/9652.3c40b533.chunk.js": "./static/js/9652.3c40b533.chunk.js",
|
||||
"static/js/1195.955963a0.chunk.js": "./static/js/1195.955963a0.chunk.js",
|
||||
"static/js/1011.13d372c8.chunk.js": "./static/js/1011.13d372c8.chunk.js",
|
||||
"static/media/videoBG.mp4": "./static/media/videoBG.17363418b3c2246a0e27.mp4",
|
||||
@@ -119,68 +119,68 @@
|
||||
"static/media/placeholderimage.png": "./static/media/placeholderimage.077ea48bd1ef1f4a883f.png",
|
||||
"index.html": "./index.html",
|
||||
"main.e60e4760.css.map": "./static/css/main.e60e4760.css.map",
|
||||
"main.cbc16c2b.js.map": "./static/js/main.cbc16c2b.js.map",
|
||||
"main.77c2c9f2.js.map": "./static/js/main.77c2c9f2.js.map",
|
||||
"5301.2c626a41.chunk.js.map": "./static/js/5301.2c626a41.chunk.js.map",
|
||||
"9361.3fc638a6.chunk.js.map": "./static/js/9361.3fc638a6.chunk.js.map",
|
||||
"843.8502a4fd.chunk.js.map": "./static/js/843.8502a4fd.chunk.js.map",
|
||||
"3035.b2eb0918.chunk.js.map": "./static/js/3035.b2eb0918.chunk.js.map",
|
||||
"9537.675a2ebb.chunk.js.map": "./static/js/9537.675a2ebb.chunk.js.map",
|
||||
"5711.c58de6bb.chunk.js.map": "./static/js/5711.c58de6bb.chunk.js.map",
|
||||
"8769.5e67beb9.chunk.js.map": "./static/js/8769.5e67beb9.chunk.js.map",
|
||||
"2033.a09fb9da.chunk.js.map": "./static/js/2033.a09fb9da.chunk.js.map",
|
||||
"8821.44b4fe0f.chunk.js.map": "./static/js/8821.44b4fe0f.chunk.js.map",
|
||||
"9987.15024980.chunk.js.map": "./static/js/9987.15024980.chunk.js.map",
|
||||
"689.5e705237.chunk.js.map": "./static/js/689.5e705237.chunk.js.map",
|
||||
"6164.993b302b.chunk.js.map": "./static/js/6164.993b302b.chunk.js.map",
|
||||
"2372.aaeaeefa.chunk.js.map": "./static/js/2372.aaeaeefa.chunk.js.map",
|
||||
"1324.beff0285.chunk.js.map": "./static/js/1324.beff0285.chunk.js.map",
|
||||
"5693.5834aa74.chunk.js.map": "./static/js/5693.5834aa74.chunk.js.map",
|
||||
"843.454ac75f.chunk.js.map": "./static/js/843.454ac75f.chunk.js.map",
|
||||
"3035.d50f543e.chunk.js.map": "./static/js/3035.d50f543e.chunk.js.map",
|
||||
"9537.69d1689c.chunk.js.map": "./static/js/9537.69d1689c.chunk.js.map",
|
||||
"5711.9df9b4a2.chunk.js.map": "./static/js/5711.9df9b4a2.chunk.js.map",
|
||||
"8769.996efd0a.chunk.js.map": "./static/js/8769.996efd0a.chunk.js.map",
|
||||
"2033.bea44dd7.chunk.js.map": "./static/js/2033.bea44dd7.chunk.js.map",
|
||||
"8821.e7fb1c57.chunk.js.map": "./static/js/8821.e7fb1c57.chunk.js.map",
|
||||
"9987.79508d87.chunk.js.map": "./static/js/9987.79508d87.chunk.js.map",
|
||||
"689.8272f409.chunk.js.map": "./static/js/689.8272f409.chunk.js.map",
|
||||
"6164.c2cd952a.chunk.js.map": "./static/js/6164.c2cd952a.chunk.js.map",
|
||||
"2372.97c7de62.chunk.js.map": "./static/js/2372.97c7de62.chunk.js.map",
|
||||
"1324.62d917da.chunk.js.map": "./static/js/1324.62d917da.chunk.js.map",
|
||||
"5693.eb317771.chunk.js.map": "./static/js/5693.eb317771.chunk.js.map",
|
||||
"5872.62eb672b.chunk.js.map": "./static/js/5872.62eb672b.chunk.js.map",
|
||||
"6758.b6da6dc7.chunk.js.map": "./static/js/6758.b6da6dc7.chunk.js.map",
|
||||
"6758.cf46c98c.chunk.js.map": "./static/js/6758.cf46c98c.chunk.js.map",
|
||||
"755.ac098541.chunk.js.map": "./static/js/755.ac098541.chunk.js.map",
|
||||
"8715.0aaa4c38.chunk.js.map": "./static/js/8715.0aaa4c38.chunk.js.map",
|
||||
"7880.6f98d22b.chunk.js.map": "./static/js/7880.6f98d22b.chunk.js.map",
|
||||
"8715.1422d39d.chunk.js.map": "./static/js/8715.1422d39d.chunk.js.map",
|
||||
"7880.813513ce.chunk.js.map": "./static/js/7880.813513ce.chunk.js.map",
|
||||
"2209.3b0ca7fa.chunk.js.map": "./static/js/2209.3b0ca7fa.chunk.js.map",
|
||||
"7435.eb0888fa.chunk.js.map": "./static/js/7435.eb0888fa.chunk.js.map",
|
||||
"9340.8c56fae7.chunk.js.map": "./static/js/9340.8c56fae7.chunk.js.map",
|
||||
"9269.e21bb7dd.chunk.js.map": "./static/js/9269.e21bb7dd.chunk.js.map",
|
||||
"6925.65a0241f.chunk.js.map": "./static/js/6925.65a0241f.chunk.js.map",
|
||||
"3527.59dee34f.chunk.js.map": "./static/js/3527.59dee34f.chunk.js.map",
|
||||
"8789.668926b3.chunk.js.map": "./static/js/8789.668926b3.chunk.js.map",
|
||||
"7485.7f393450.chunk.js.map": "./static/js/7485.7f393450.chunk.js.map",
|
||||
"7041.4daa055d.chunk.js.map": "./static/js/7041.4daa055d.chunk.js.map",
|
||||
"2138.d05b3faa.chunk.js.map": "./static/js/2138.d05b3faa.chunk.js.map",
|
||||
"5699.bb05be82.chunk.js.map": "./static/js/5699.bb05be82.chunk.js.map",
|
||||
"7381.99263635.chunk.js.map": "./static/js/7381.99263635.chunk.js.map",
|
||||
"7052.58711f5f.chunk.js.map": "./static/js/7052.58711f5f.chunk.js.map",
|
||||
"144.1bc937a8.chunk.js.map": "./static/js/144.1bc937a8.chunk.js.map",
|
||||
"5978.723fd455.chunk.js.map": "./static/js/5978.723fd455.chunk.js.map",
|
||||
"4103.b6a51725.chunk.js.map": "./static/js/4103.b6a51725.chunk.js.map",
|
||||
"1702.9ff3a82e.chunk.js.map": "./static/js/1702.9ff3a82e.chunk.js.map",
|
||||
"7435.2ed74878.chunk.js.map": "./static/js/7435.2ed74878.chunk.js.map",
|
||||
"9340.acfd036d.chunk.js.map": "./static/js/9340.acfd036d.chunk.js.map",
|
||||
"9269.dfec9438.chunk.js.map": "./static/js/9269.dfec9438.chunk.js.map",
|
||||
"6925.b3e208b0.chunk.js.map": "./static/js/6925.b3e208b0.chunk.js.map",
|
||||
"3527.30ec1659.chunk.js.map": "./static/js/3527.30ec1659.chunk.js.map",
|
||||
"8789.5dfcad74.chunk.js.map": "./static/js/8789.5dfcad74.chunk.js.map",
|
||||
"7485.64738b77.chunk.js.map": "./static/js/7485.64738b77.chunk.js.map",
|
||||
"7041.219c4d11.chunk.js.map": "./static/js/7041.219c4d11.chunk.js.map",
|
||||
"2138.7da0f275.chunk.js.map": "./static/js/2138.7da0f275.chunk.js.map",
|
||||
"5699.016e97fa.chunk.js.map": "./static/js/5699.016e97fa.chunk.js.map",
|
||||
"7381.0caa382c.chunk.js.map": "./static/js/7381.0caa382c.chunk.js.map",
|
||||
"7052.1e7e2b40.chunk.js.map": "./static/js/7052.1e7e2b40.chunk.js.map",
|
||||
"144.c7530a4b.chunk.js.map": "./static/js/144.c7530a4b.chunk.js.map",
|
||||
"5978.7fb91072.chunk.js.map": "./static/js/5978.7fb91072.chunk.js.map",
|
||||
"4103.926c44ef.chunk.js.map": "./static/js/4103.926c44ef.chunk.js.map",
|
||||
"1702.851e407f.chunk.js.map": "./static/js/1702.851e407f.chunk.js.map",
|
||||
"7601.4e033e78.chunk.js.map": "./static/js/7601.4e033e78.chunk.js.map",
|
||||
"2959.25a10423.chunk.js.map": "./static/js/2959.25a10423.chunk.js.map",
|
||||
"9619.572ad00d.chunk.js.map": "./static/js/9619.572ad00d.chunk.js.map",
|
||||
"2959.c4f178f1.chunk.js.map": "./static/js/2959.c4f178f1.chunk.js.map",
|
||||
"9619.a756233f.chunk.js.map": "./static/js/9619.a756233f.chunk.js.map",
|
||||
"8017.d5b163f3.chunk.js.map": "./static/js/8017.d5b163f3.chunk.js.map",
|
||||
"3323.f86a698b.chunk.js.map": "./static/js/3323.f86a698b.chunk.js.map",
|
||||
"5128.96ab1387.chunk.js.map": "./static/js/5128.96ab1387.chunk.js.map",
|
||||
"6140.37801ce8.chunk.js.map": "./static/js/6140.37801ce8.chunk.js.map",
|
||||
"696.77a3fec7.chunk.js.map": "./static/js/696.77a3fec7.chunk.js.map",
|
||||
"2166.1e6c2b39.chunk.js.map": "./static/js/2166.1e6c2b39.chunk.js.map",
|
||||
"7063.80895202.chunk.js.map": "./static/js/7063.80895202.chunk.js.map",
|
||||
"3061.c8170979.chunk.js.map": "./static/js/3061.c8170979.chunk.js.map",
|
||||
"5064.8df5c897.chunk.js.map": "./static/js/5064.8df5c897.chunk.js.map",
|
||||
"7643.bc0ec1d5.chunk.js.map": "./static/js/7643.bc0ec1d5.chunk.js.map",
|
||||
"985.d2139cb6.chunk.js.map": "./static/js/985.d2139cb6.chunk.js.map",
|
||||
"1370.d5e698ce.chunk.js.map": "./static/js/1370.d5e698ce.chunk.js.map",
|
||||
"2166.bb4ae347.chunk.js.map": "./static/js/2166.bb4ae347.chunk.js.map",
|
||||
"7063.d62078ab.chunk.js.map": "./static/js/7063.d62078ab.chunk.js.map",
|
||||
"3061.2419f208.chunk.js.map": "./static/js/3061.2419f208.chunk.js.map",
|
||||
"5064.ccf271db.chunk.js.map": "./static/js/5064.ccf271db.chunk.js.map",
|
||||
"7643.41c0709d.chunk.js.map": "./static/js/7643.41c0709d.chunk.js.map",
|
||||
"985.f5122b3c.chunk.js.map": "./static/js/985.f5122b3c.chunk.js.map",
|
||||
"1370.adfc1682.chunk.js.map": "./static/js/1370.adfc1682.chunk.js.map",
|
||||
"8823.034b6a8d.chunk.js.map": "./static/js/8823.034b6a8d.chunk.js.map",
|
||||
"24.1245bd95.chunk.js.map": "./static/js/24.1245bd95.chunk.js.map",
|
||||
"5851.9d7a7887.chunk.js.map": "./static/js/5851.9d7a7887.chunk.js.map",
|
||||
"4705.2270c966.chunk.js.map": "./static/js/4705.2270c966.chunk.js.map",
|
||||
"3654.877a48d3.chunk.js.map": "./static/js/3654.877a48d3.chunk.js.map",
|
||||
"960.69a44c1d.chunk.js.map": "./static/js/960.69a44c1d.chunk.js.map",
|
||||
"8642.883c89db.chunk.js.map": "./static/js/8642.883c89db.chunk.js.map",
|
||||
"3329.c2099208.chunk.js.map": "./static/js/3329.c2099208.chunk.js.map",
|
||||
"2332.7f421c9f.chunk.js.map": "./static/js/2332.7f421c9f.chunk.js.map",
|
||||
"960.494cc9da.chunk.js.map": "./static/js/960.494cc9da.chunk.js.map",
|
||||
"8642.ab45092c.chunk.js.map": "./static/js/8642.ab45092c.chunk.js.map",
|
||||
"3329.89a09424.chunk.js.map": "./static/js/3329.89a09424.chunk.js.map",
|
||||
"2332.7e0aee28.chunk.js.map": "./static/js/2332.7e0aee28.chunk.js.map",
|
||||
"5941.4df5a08b.chunk.js.map": "./static/js/5941.4df5a08b.chunk.js.map",
|
||||
"2704.fe33dd23.chunk.js.map": "./static/js/2704.fe33dd23.chunk.js.map",
|
||||
"7774.4d23a595.chunk.js.map": "./static/js/7774.4d23a595.chunk.js.map",
|
||||
@@ -210,13 +210,13 @@
|
||||
"1303.12f6ca82.chunk.js.map": "./static/js/1303.12f6ca82.chunk.js.map",
|
||||
"5079.a0847792.chunk.js.map": "./static/js/5079.a0847792.chunk.js.map",
|
||||
"4581.41480fcf.chunk.js.map": "./static/js/4581.41480fcf.chunk.js.map",
|
||||
"6016.dcb3bcb4.chunk.js.map": "./static/js/6016.dcb3bcb4.chunk.js.map",
|
||||
"8144.0cc85475.chunk.js.map": "./static/js/8144.0cc85475.chunk.js.map",
|
||||
"6016.2a05d7e1.chunk.js.map": "./static/js/6016.2a05d7e1.chunk.js.map",
|
||||
"9652.3c40b533.chunk.js.map": "./static/js/9652.3c40b533.chunk.js.map",
|
||||
"1195.955963a0.chunk.js.map": "./static/js/1195.955963a0.chunk.js.map",
|
||||
"1011.13d372c8.chunk.js.map": "./static/js/1011.13d372c8.chunk.js.map"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/css/main.e60e4760.css",
|
||||
"static/js/main.cbc16c2b.js"
|
||||
"static/js/main.77c2c9f2.js"
|
||||
]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="/"/><meta content="width=device-width,initial-scale=1" name="viewport"/><meta content="#081C42" media="(prefers-color-scheme: light)" name="theme-color"/><meta content="#081C42" media="(prefers-color-scheme: dark)" name="theme-color"/><meta content="MinIO Console" name="description"/><meta name="minio-license" content="agpl"/><link href="./styles/root-styles.css" rel="stylesheet"/><link href="./apple-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"/><link href="./favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link href="./favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="./favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link href="./manifest.json" rel="manifest"/><link color="#3a4e54" href="./safari-pinned-tab.svg" rel="mask-icon"/><title>MinIO Console</title><script defer="defer" src="./static/js/main.cbc16c2b.js"></script><link href="./static/css/main.e60e4760.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="preload"><img src="./images/background.svg"/> <img src="./images/background-wave-orig2.svg"/></div><div id="loader-block"><img src="./Loader.svg"/></div></div></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="/"/><meta content="width=device-width,initial-scale=1" name="viewport"/><meta content="#081C42" media="(prefers-color-scheme: light)" name="theme-color"/><meta content="#081C42" media="(prefers-color-scheme: dark)" name="theme-color"/><meta content="MinIO Console" name="description"/><meta name="minio-license" content="agpl"/><link href="./styles/root-styles.css" rel="stylesheet"/><link href="./apple-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"/><link href="./favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link href="./favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="./favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link href="./manifest.json" rel="manifest"/><link color="#3a4e54" href="./safari-pinned-tab.svg" rel="mask-icon"/><title>MinIO Console</title><script defer="defer" src="./static/js/main.77c2c9f2.js"></script><link href="./static/css/main.e60e4760.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="preload"><img src="./images/background.svg"/> <img src="./images/background-wave-orig2.svg"/></div><div id="loader-block"><img src="./Loader.svg"/></div></div></body></html>
|
||||
99
web-app/build/scripts/pdf.worker.min.js
vendored
99
web-app/build/scripts/pdf.worker.min.js
vendored
@@ -512,9 +512,7 @@
|
||||
finishWorkerTask(i);
|
||||
s &&
|
||||
(0, r.info)(
|
||||
`page=${n + 1} - getOperatorList: time=${
|
||||
Date.now() - s
|
||||
}ms, len=${e.length}`,
|
||||
`page=${n + 1} - getOperatorList: time=${Date.now() - s}ms, len=${e.length}`,
|
||||
);
|
||||
t.close();
|
||||
},
|
||||
@@ -5086,10 +5084,7 @@
|
||||
this.backgroundColor &&
|
||||
(s = `${(0, i.getPdfColor)(this.backgroundColor, !0)} ${n} f `);
|
||||
if (this.borderColor) {
|
||||
s += `${this.borderStyle.width || 1} w ${(0, i.getPdfColor)(
|
||||
this.borderColor,
|
||||
!1,
|
||||
)} ${n} S `;
|
||||
s += `${this.borderStyle.width || 1} w ${(0, i.getPdfColor)(this.borderColor, !1)} ${n} S `;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
@@ -5372,23 +5367,12 @@
|
||||
return (
|
||||
`/Tx BMC q ${h}BT ` +
|
||||
p +
|
||||
` 1 0 0 1 ${(0, n.numberToString)(2)} ${(0, n.numberToString)(
|
||||
v,
|
||||
)} Tm (${(0, n.escapeString)(w[0])}) Tj ET Q EMC`
|
||||
` 1 0 0 1 ${(0, n.numberToString)(2)} ${(0, n.numberToString)(v)} Tm (${(0, n.escapeString)(w[0])}) Tj ET Q EMC`
|
||||
);
|
||||
return (
|
||||
`/Tx BMC q ${h}BT ` +
|
||||
p +
|
||||
` 1 0 0 1 0 0 Tm ${this._renderText(
|
||||
w[0],
|
||||
y,
|
||||
m,
|
||||
g,
|
||||
k,
|
||||
{ shift: 0 },
|
||||
2,
|
||||
v,
|
||||
)} ET Q EMC`
|
||||
` 1 0 0 1 0 0 Tm ${this._renderText(w[0], y, m, g, k, { shift: 0 }, 2, v)} ET Q EMC`
|
||||
);
|
||||
}
|
||||
static async _getFontData(e, t, a, r) {
|
||||
@@ -5470,8 +5454,7 @@
|
||||
} else l = o;
|
||||
const h = (0, n.numberToString)(l - s.shift);
|
||||
s.shift = l;
|
||||
return `${h} ${(c = (0, n.numberToString)(c))} Td (${(0,
|
||||
n.escapeString)(e)}) Tj`;
|
||||
return `${h} ${(c = (0, n.numberToString)(c))} Td (${(0, n.escapeString)(e)}) Tj`;
|
||||
}
|
||||
_getSaveFieldResources(e) {
|
||||
const {
|
||||
@@ -5547,9 +5530,7 @@
|
||||
return (
|
||||
`/Tx BMC q ${f}BT ` +
|
||||
e +
|
||||
` 1 0 0 1 ${(0, n.numberToString)(o)} ${(0, n.numberToString)(
|
||||
c + l,
|
||||
)} Tm ${m} ET Q EMC`
|
||||
` 1 0 0 1 ${(0, n.numberToString)(o)} ${(0, n.numberToString)(c + l)} Tm ${m} ET Q EMC`
|
||||
);
|
||||
}
|
||||
_getMultilineAppearance(e, t, a, r, i, s, o, c, l, h, u, d) {
|
||||
@@ -5788,11 +5769,7 @@
|
||||
(0, r.unreachable)(
|
||||
`_getDefaultCheckedAppearance - unsupported type: ${t}`,
|
||||
);
|
||||
const d = `q BT /PdfJsZaDb ${l} Tf 0 g ${(0, n.numberToString)(
|
||||
(a - h.width) / 2,
|
||||
)} ${(0, n.numberToString)(
|
||||
(i - h.height) / 2,
|
||||
)} Td (${u}) Tj ET Q`,
|
||||
const d = `q BT /PdfJsZaDb ${l} Tf 0 g ${(0, n.numberToString)((a - h.width) / 2)} ${(0, n.numberToString)((i - h.height) / 2)} Td (${u}) Tj ET Q`,
|
||||
f = new s.Dict(e.xref);
|
||||
f.set("FormType", 1);
|
||||
f.set("Subtype", s.Name.get("Form"));
|
||||
@@ -6631,9 +6608,7 @@
|
||||
for (const { bezier: e } of l) {
|
||||
f.length = 0;
|
||||
f.push(
|
||||
`${(0, n.numberToString)(e[0])} ${(0, n.numberToString)(
|
||||
e[1],
|
||||
)} m`,
|
||||
`${(0, n.numberToString)(e[0])} ${(0, n.numberToString)(e[1])} m`,
|
||||
);
|
||||
for (let t = 2, a = e.length; t < a; t += 6) {
|
||||
const a = e
|
||||
@@ -7280,13 +7255,9 @@
|
||||
const v = s * Math.min(w, S),
|
||||
F = [
|
||||
"q",
|
||||
`0 0 ${(0, n.numberToString)(b)} ${(0, n.numberToString)(
|
||||
y,
|
||||
)} re W n`,
|
||||
`0 0 ${(0, n.numberToString)(b)} ${(0, n.numberToString)(y)} re W n`,
|
||||
"BT",
|
||||
`1 0 0 1 0 ${(0, n.numberToString)(
|
||||
y + C,
|
||||
)} Tm 0 Tc ${getPdfColor(o, !0)}`,
|
||||
`1 0 0 1 0 ${(0, n.numberToString)(y + C)} Tm 0 Tc ${getPdfColor(o, !0)}`,
|
||||
`/${this.fontName.name} ${(0, n.numberToString)(v)} Tf`,
|
||||
],
|
||||
{ resources: O } = this;
|
||||
@@ -12816,9 +12787,7 @@
|
||||
const e = s.peekBytes(a + 1)[a];
|
||||
if (!(0, i.isWhiteSpace)(e)) break;
|
||||
(0, r.info)(
|
||||
`Found "${(0, r.bytesToString)(
|
||||
c,
|
||||
)}" when searching for endstream command.`,
|
||||
`Found "${(0, r.bytesToString)(c)}" when searching for endstream command.`,
|
||||
);
|
||||
t = l;
|
||||
break;
|
||||
@@ -12977,9 +12946,7 @@
|
||||
e = this.nextChar();
|
||||
}
|
||||
if (e < 48 || e > 57) {
|
||||
const t = `Invalid number: ${String.fromCharCode(
|
||||
e,
|
||||
)} (charCode ${e})`;
|
||||
const t = `Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;
|
||||
if ((0, i.isWhiteSpace)(e) || -1 === e) {
|
||||
(0, r.info)(`Lexer.getNumber - "${t}".`);
|
||||
return 0;
|
||||
@@ -13126,9 +13093,7 @@
|
||||
const i = toHexDigit(e);
|
||||
if (-1 === i) {
|
||||
(0, r.warn)(
|
||||
`Lexer_getName: Illegal digit (${String.fromCharCode(
|
||||
e,
|
||||
)}) in hexadecimal number.`,
|
||||
`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`,
|
||||
);
|
||||
a.push("#", String.fromCharCode(t));
|
||||
if (b[e]) break;
|
||||
@@ -46911,9 +46876,7 @@
|
||||
} else
|
||||
this.nodeValue
|
||||
? e.push(
|
||||
`>${(0, r.encodeToXmlString)(this.nodeValue)}</${
|
||||
this.nodeName
|
||||
}>`,
|
||||
`>${(0, r.encodeToXmlString)(this.nodeValue)}</${this.nodeName}>`,
|
||||
)
|
||||
: e.push("/>");
|
||||
} else e.push((0, r.encodeToXmlString)(this.nodeValue));
|
||||
@@ -51254,9 +51217,7 @@
|
||||
const t = (0, s.toStyle)(this, "border", "margin"),
|
||||
a = this[r.$getParent]()[r.$getParent](),
|
||||
n = {
|
||||
fontSize: `calc(${
|
||||
a.font?.size || 10
|
||||
}px * var(--scale-factor))`,
|
||||
fontSize: `calc(${a.font?.size || 10}px * var(--scale-factor))`,
|
||||
},
|
||||
i = [];
|
||||
if (a.items.children.length > 0) {
|
||||
@@ -53129,11 +53090,7 @@
|
||||
}
|
||||
[r.$toStyle](e) {
|
||||
e = e ? e[r.$toStyle]() : "#FFFFFF";
|
||||
return `linear-gradient(${this.type
|
||||
.replace(/([RBLT])/, " $1")
|
||||
.toLowerCase()}, ${e}, ${
|
||||
this.color ? this.color[r.$toStyle]() : "#000000"
|
||||
})`;
|
||||
return `linear-gradient(${this.type.replace(/([RBLT])/, " $1").toLowerCase()}, ${e}, ${this.color ? this.color[r.$toStyle]() : "#000000"})`;
|
||||
}
|
||||
}
|
||||
class LockDocument extends o.ContentObject {
|
||||
@@ -53872,9 +53829,7 @@
|
||||
[r.$toStyle](e) {
|
||||
e = e ? e[r.$toStyle]() : "#FFFFFF";
|
||||
const t = this.color ? this.color[r.$toStyle]() : "#000000";
|
||||
return `radial-gradient(circle at center, ${
|
||||
"toEdge" === this.type ? `${e},${t}` : `${t},${e}`
|
||||
})`;
|
||||
return `radial-gradient(circle at center, ${"toEdge" === this.type ? `${e},${t}` : `${t},${e}`})`;
|
||||
}
|
||||
}
|
||||
class Reason extends o.StringObject {
|
||||
@@ -56767,9 +56722,7 @@
|
||||
? (n = ` (id: ${this.id})`)
|
||||
: this.name && (n = ` (name: ${this.name} ${this.h.value})`);
|
||||
(0, i.warn)(
|
||||
`XFA - node "${
|
||||
this[r.$nodeName]
|
||||
}"${n} has already enough "${t}"!`,
|
||||
`XFA - node "${this[r.$nodeName]}"${n} has already enough "${t}"!`,
|
||||
);
|
||||
return !1;
|
||||
}
|
||||
@@ -56990,9 +56943,7 @@
|
||||
}
|
||||
if (s[r.$nodeName] !== this[r.$nodeName]) {
|
||||
(0, i.warn)(
|
||||
`XFA - Incompatible prototype: ${s[r.$nodeName]} !== ${
|
||||
this[r.$nodeName]
|
||||
}.`,
|
||||
`XFA - Incompatible prototype: ${s[r.$nodeName]} !== ${this[r.$nodeName]}.`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
@@ -57123,9 +57074,7 @@
|
||||
return !0;
|
||||
}
|
||||
(0, i.warn)(
|
||||
`XFA - node "${e[r.$nodeName]}" accepts no more than ${
|
||||
this[S]
|
||||
} children`,
|
||||
`XFA - node "${e[r.$nodeName]}" accepts no more than ${this[S]} children`,
|
||||
);
|
||||
return !1;
|
||||
}
|
||||
@@ -60108,16 +60057,12 @@
|
||||
[
|
||||
"xfa-font-horizontal-scale",
|
||||
(e) =>
|
||||
`scaleX(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(
|
||||
2,
|
||||
)})`,
|
||||
`scaleX(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(2)})`,
|
||||
],
|
||||
[
|
||||
"xfa-font-vertical-scale",
|
||||
(e) =>
|
||||
`scaleY(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(
|
||||
2,
|
||||
)})`,
|
||||
`scaleY(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(2)})`,
|
||||
],
|
||||
["xfa-spacerun", ""],
|
||||
["xfa-tab-stops", ""],
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[2332],{32332:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j,emptyContent:()=>y});var a=n(65043),s=n(89923),l=n(73216),o=n(99161),r=n(64159),c=n(20554),i=n(77403),p=n(38375),x=n(48793),m=n(92452),d=n(56629),u=n(53518),h=n(70579);const y='{\n "bytes": ""\n}',j=()=>{const e=(0,c.jL)(),t=(0,l.Zp)(),[n,j]=(0,a.useState)(!1),[b,k]=(0,a.useState)(""),[f,C]=(0,a.useState)(y),S=""!==b.trim()&&-1===b.indexOf(" ");return(0,a.useEffect)((()=>{e((0,r.ph)("import_key"))}),[]),(0,h.jsx)(a.Fragment,{children:(0,h.jsxs)(s.xA9,{item:!0,xs:12,children:[(0,h.jsx)(x.A,{label:(0,h.jsx)(s.EGL,{onClick:()=>t(o.zZ.KMS_KEYS),label:"Keys"}),actions:(0,h.jsx)(m.A,{})}),(0,h.jsx)(s.Mxu,{children:(0,h.jsx)(s.Hbc,{title:"Import Key",icon:(0,h.jsx)(s.No_,{}),helpBox:(0,h.jsx)(p.A,{helpText:"Encryption Key",contents:["Import a cryptographic key in the Key Management Service server connected to MINIO."]}),children:(0,h.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:n=>{(n=>{j(!0),n.preventDefault();let a=JSON.parse(f);d.F.kms.kmsImportKey(b,a).then((e=>{t("".concat(o.zZ.KMS_KEYS))})).catch((async t=>{const n=await t.json();e((0,r.C9)((0,u.S)(n)))})).finally((()=>j(!1)))})(n)},children:[(0,h.jsx)(s.cl_,{id:"key-name",name:"key-name",label:"Key Name",autoFocus:!0,value:b,error:(e=>-1!==e.indexOf(" ")?"Key name cannot contain spaces":"")(b),onChange:e=>{k(e.target.value)}}),(0,h.jsx)(s.BYM,{label:"Set key Content",value:f,onChange:e=>{C(e)},editorHeight:"350px"}),(0,h.jsxs)(s.xA9,{item:!0,xs:12,sx:i.Uz.modalButtonBar,children:[(0,h.jsx)(s.$nd,{id:"clear",type:"button",variant:"regular",onClick:()=>{k(""),C("")},label:"Clear"}),(0,h.jsx)(s.$nd,{id:"import-key",type:"submit",variant:"callAction",color:"primary",disabled:n||!S,label:"Import"})]})]})})})]})})}},38375:(e,t,n)=>{n.d(t,{A:()=>o});var a=n(65043),s=n(89923),l=n(70579);const o=e=>{let{helpText:t,contents:n}=e;return(0,l.jsx)(s.lVp,{iconComponent:(0,l.jsx)(s.nag,{}),title:t,help:(0,l.jsx)(a.Fragment,{children:n.map((e=>(0,l.jsx)(s.azJ,{sx:{paddingBottom:"20px"},children:e})))})})}}}]);
|
||||
//# sourceMappingURL=2332.7f421c9f.chunk.js.map
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[2332],{32332:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j,emptyContent:()=>y});var a=n(65043),s=n(89923),l=n(73216),o=n(99161),r=n(64159),c=n(20554),i=n(77403),p=n(38375),x=n(48793),m=n(55968),d=n(56629),u=n(53518),h=n(70579);const y='{\n "bytes": ""\n}',j=()=>{const e=(0,c.jL)(),t=(0,l.Zp)(),[n,j]=(0,a.useState)(!1),[b,k]=(0,a.useState)(""),[f,C]=(0,a.useState)(y),S=""!==b.trim()&&-1===b.indexOf(" ");return(0,a.useEffect)((()=>{e((0,r.ph)("import_key"))}),[]),(0,h.jsx)(a.Fragment,{children:(0,h.jsxs)(s.xA9,{item:!0,xs:12,children:[(0,h.jsx)(x.A,{label:(0,h.jsx)(s.EGL,{onClick:()=>t(o.zZ.KMS_KEYS),label:"Keys"}),actions:(0,h.jsx)(m.A,{})}),(0,h.jsx)(s.Mxu,{children:(0,h.jsx)(s.Hbc,{title:"Import Key",icon:(0,h.jsx)(s.No_,{}),helpBox:(0,h.jsx)(p.A,{helpText:"Encryption Key",contents:["Import a cryptographic key in the Key Management Service server connected to MINIO."]}),children:(0,h.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:n=>{(n=>{j(!0),n.preventDefault();let a=JSON.parse(f);d.F.kms.kmsImportKey(b,a).then((e=>{t("".concat(o.zZ.KMS_KEYS))})).catch((async t=>{const n=await t.json();e((0,r.C9)((0,u.S)(n)))})).finally((()=>j(!1)))})(n)},children:[(0,h.jsx)(s.cl_,{id:"key-name",name:"key-name",label:"Key Name",autoFocus:!0,value:b,error:(e=>-1!==e.indexOf(" ")?"Key name cannot contain spaces":"")(b),onChange:e=>{k(e.target.value)}}),(0,h.jsx)(s.BYM,{label:"Set key Content",value:f,onChange:e=>{C(e)},editorHeight:"350px"}),(0,h.jsxs)(s.xA9,{item:!0,xs:12,sx:i.Uz.modalButtonBar,children:[(0,h.jsx)(s.$nd,{id:"clear",type:"button",variant:"regular",onClick:()=>{k(""),C("")},label:"Clear"}),(0,h.jsx)(s.$nd,{id:"import-key",type:"submit",variant:"callAction",color:"primary",disabled:n||!S,label:"Import"})]})]})})})]})})}},38375:(e,t,n)=>{n.d(t,{A:()=>o});var a=n(65043),s=n(89923),l=n(70579);const o=e=>{let{helpText:t,contents:n}=e;return(0,l.jsx)(s.lVp,{iconComponent:(0,l.jsx)(s.nag,{}),title:t,help:(0,l.jsx)(a.Fragment,{children:n.map((e=>(0,l.jsx)(s.azJ,{sx:{paddingBottom:"20px"},children:e})))})})}}}]);
|
||||
//# sourceMappingURL=2332.7e0aee28.chunk.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
web-app/build/static/js/2959.c4f178f1.chunk.js
Normal file
2
web-app/build/static/js/2959.c4f178f1.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
web-app/build/static/js/2959.c4f178f1.chunk.js.map
Normal file
1
web-app/build/static/js/2959.c4f178f1.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[3035],{13035:(e,t,n)=>{n.r(t),n.d(t,{default:()=>p});var a=n(65043),l=n(22166),s=n(89923),c=n(20554),o=n(56483),i=n(32511),r=n(68603),d=n(64159),u=n(20649),x=n(48793),h=n(92452),m=n(70579);const p=()=>{const e=(0,c.jL)(),t=(0,l.d4)((e=>e.watch.messages)),[n,p]=(0,a.useState)(!1),[b,f]=(0,a.useState)("Select Bucket"),[g,j]=(0,a.useState)(""),[w,k]=(0,a.useState)(""),[S,v]=(0,a.useState)([]);(0,a.useEffect)((()=>{u.A.invoke("GET","/api/v1/buckets").then((e=>{let t=[];null!==e.buckets&&(t=e.buckets),v(t)})).catch((e=>{console.error(e)}))}),[]),(0,a.useEffect)((()=>{if(e((0,r.n4)()),n&&S.some((e=>e.name===b))){const t=new URL(window.location.toString()),n=!1?"9090":t.port,a=new URL(document.baseURI).pathname,l=(0,i.nw)(t.protocol),s=new WebSocket("".concat(l,"://").concat(t.hostname,":").concat(n).concat(a,"ws/watch/").concat(b,"?prefix=").concat(g,"&suffix=").concat(w));let c=null;if(null!==s)return s.onopen=()=>{console.log("WebSocket Client Connected"),s.send("ok"),c=setInterval((()=>{s.send("ok")}),1e4)},s.onmessage=t=>{let n=JSON.parse(t.data.toString());n.Time=new Date(n.Time.toString()),n.key=Math.random(),e((0,r.ID)(n))},s.onclose=()=>{clearInterval(c),console.log("connection closed by server"),p(!1)},()=>{s.close(1e3),clearInterval(c),console.log("closing websockets")}}else p(!1)}),[e,n,S,b,g,w]);const y=S.map((e=>({label:e.name,value:e.name})));(0,a.useEffect)((()=>{e((0,d.ph)("watch"))}),[]);const C=y.map((e=>({label:e.label,value:e.value})));return(0,m.jsxs)(a.Fragment,{children:[(0,m.jsx)(x.A,{label:"Watch",actions:(0,m.jsx)(h.A,{})}),(0,m.jsx)(s.Mxu,{children:(0,m.jsxs)(s.xA9,{container:!0,children:[(0,m.jsxs)(s.xA9,{item:!0,xs:12,sx:{display:"flex",gap:10,marginBottom:15,alignItems:"center"},children:[(0,m.jsxs)(s.azJ,{sx:{flexGrow:1},children:[(0,m.jsx)(s.l1Y,{children:"Bucket"}),(0,m.jsx)(s.l6P,{id:"bucket-name",name:"bucket-name",value:b,onChange:e=>{f(e)},disabled:n,options:C,placeholder:"Select Bucket"})]}),(0,m.jsxs)(s.azJ,{sx:{flexGrow:1},children:[(0,m.jsx)(s.l1Y,{children:"Prefix"}),(0,m.jsx)(s.cl_,{id:"prefix-resource",disabled:n,onChange:e=>{j(e.target.value)}})]}),(0,m.jsxs)(s.azJ,{sx:{flexGrow:1},children:[(0,m.jsx)(s.l1Y,{children:"Suffix"}),(0,m.jsx)(s.cl_,{id:"suffix-resource",disabled:n,onChange:e=>{k(e.target.value)}})]}),(0,m.jsx)(s.azJ,{sx:{alignSelf:"flex-end",paddingBottom:4},children:n?(0,m.jsx)(s.$nd,{id:"stop-watch",type:"submit",variant:"callAction",onClick:()=>p(!1),label:"Stop"}):(0,m.jsx)(s.$nd,{id:"start-watch",type:"submit",variant:"callAction",onClick:()=>p(!0),label:"Start"})})]}),(0,m.jsx)(s.xA9,{item:!0,xs:12,children:(0,m.jsx)(s.bQt,{columns:[{label:"Time",elementKey:"Time",renderFunction:o.cj},{label:"Size",elementKey:"Size",renderFunction:o.nO},{label:"Type",elementKey:"Type"},{label:"Path",elementKey:"Path"}],records:t,entityName:"Watch",customEmptyMessage:"No Changes at this time",idField:"watch_table",isLoading:!1,customPaperHeight:"calc(100vh - 270px)"})})]})})]})}}}]);
|
||||
//# sourceMappingURL=3035.b2eb0918.chunk.js.map
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[3035],{13035:(e,t,n)=>{n.r(t),n.d(t,{default:()=>p});var a=n(65043),l=n(22166),s=n(89923),c=n(20554),o=n(56483),i=n(32511),r=n(68603),d=n(64159),u=n(20649),x=n(48793),h=n(55968),m=n(70579);const p=()=>{const e=(0,c.jL)(),t=(0,l.d4)((e=>e.watch.messages)),[n,p]=(0,a.useState)(!1),[b,f]=(0,a.useState)("Select Bucket"),[g,j]=(0,a.useState)(""),[w,k]=(0,a.useState)(""),[S,v]=(0,a.useState)([]);(0,a.useEffect)((()=>{u.A.invoke("GET","/api/v1/buckets").then((e=>{let t=[];null!==e.buckets&&(t=e.buckets),v(t)})).catch((e=>{console.error(e)}))}),[]),(0,a.useEffect)((()=>{if(e((0,r.n4)()),n&&S.some((e=>e.name===b))){const t=new URL(window.location.toString()),n=!1?"9090":t.port,a=new URL(document.baseURI).pathname,l=(0,i.nw)(t.protocol),s=new WebSocket("".concat(l,"://").concat(t.hostname,":").concat(n).concat(a,"ws/watch/").concat(b,"?prefix=").concat(g,"&suffix=").concat(w));let c=null;if(null!==s)return s.onopen=()=>{console.log("WebSocket Client Connected"),s.send("ok"),c=setInterval((()=>{s.send("ok")}),1e4)},s.onmessage=t=>{let n=JSON.parse(t.data.toString());n.Time=new Date(n.Time.toString()),n.key=Math.random(),e((0,r.ID)(n))},s.onclose=()=>{clearInterval(c),console.log("connection closed by server"),p(!1)},()=>{s.close(1e3),clearInterval(c),console.log("closing websockets")}}else p(!1)}),[e,n,S,b,g,w]);const y=S.map((e=>({label:e.name,value:e.name})));(0,a.useEffect)((()=>{e((0,d.ph)("watch"))}),[]);const C=y.map((e=>({label:e.label,value:e.value})));return(0,m.jsxs)(a.Fragment,{children:[(0,m.jsx)(x.A,{label:"Watch",actions:(0,m.jsx)(h.A,{})}),(0,m.jsx)(s.Mxu,{children:(0,m.jsxs)(s.xA9,{container:!0,children:[(0,m.jsxs)(s.xA9,{item:!0,xs:12,sx:{display:"flex",gap:10,marginBottom:15,alignItems:"center"},children:[(0,m.jsxs)(s.azJ,{sx:{flexGrow:1},children:[(0,m.jsx)(s.l1Y,{children:"Bucket"}),(0,m.jsx)(s.l6P,{id:"bucket-name",name:"bucket-name",value:b,onChange:e=>{f(e)},disabled:n,options:C,placeholder:"Select Bucket"})]}),(0,m.jsxs)(s.azJ,{sx:{flexGrow:1},children:[(0,m.jsx)(s.l1Y,{children:"Prefix"}),(0,m.jsx)(s.cl_,{id:"prefix-resource",disabled:n,onChange:e=>{j(e.target.value)}})]}),(0,m.jsxs)(s.azJ,{sx:{flexGrow:1},children:[(0,m.jsx)(s.l1Y,{children:"Suffix"}),(0,m.jsx)(s.cl_,{id:"suffix-resource",disabled:n,onChange:e=>{k(e.target.value)}})]}),(0,m.jsx)(s.azJ,{sx:{alignSelf:"flex-end",paddingBottom:4},children:n?(0,m.jsx)(s.$nd,{id:"stop-watch",type:"submit",variant:"callAction",onClick:()=>p(!1),label:"Stop"}):(0,m.jsx)(s.$nd,{id:"start-watch",type:"submit",variant:"callAction",onClick:()=>p(!0),label:"Start"})})]}),(0,m.jsx)(s.xA9,{item:!0,xs:12,children:(0,m.jsx)(s.bQt,{columns:[{label:"Time",elementKey:"Time",renderFunction:o.cj},{label:"Size",elementKey:"Size",renderFunction:o.nO},{label:"Type",elementKey:"Type"},{label:"Path",elementKey:"Path"}],records:t,entityName:"Watch",customEmptyMessage:"No Changes at this time",idField:"watch_table",isLoading:!1,customPaperHeight:"calc(100vh - 270px)"})})]})})]})}}}]);
|
||||
//# sourceMappingURL=3035.d50f543e.chunk.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[3061],{43061:(e,l,t)=>{t.r(l),t.d(l,{default:()=>x});var o=t(65043),a=t(89923),n=t(32511),c=t(73216),i=t(14558),s=t(20554),r=t(64159),p=t(28481),d=t(48793),u=t(92452),b=t(70579),m=null;const x=()=>{const e=(0,c.Zp)(),[l,t]=(0,o.useState)(!1),[x,f]=(0,o.useState)(["cpu","mem","block","mutex","goroutines"]),h=(0,i.vf)(),g=e=>{let l=[];l=x.indexOf(e.target.value)>-1?x.filter((l=>l!==e.target.value)):[...x,e.target.value],f(l)},v=(0,s.jL)();return(0,o.useEffect)((()=>{v((0,r.ph)("profile"))}),[]),(0,b.jsxs)(o.Fragment,{children:[(0,b.jsx)(d.A,{label:"Profile",actions:(0,b.jsx)(u.A,{})}),(0,b.jsxs)(a.Mxu,{children:[!h&&(0,b.jsx)(p.A,{compactMode:!0}),(0,b.jsxs)(a.Hbc,{children:[(0,b.jsxs)(a.azJ,{sx:{display:"flex",gap:10,"& div":{width:"initial"},"& .inputItem:not(:last-of-type)":{marginBottom:0}},children:[(0,b.jsx)(a.l1Y,{noMinWidth:!0,children:"Types to profile:"}),[{label:"cpu",value:"cpu"},{label:"mem",value:"mem"},{label:"block",value:"block"},{label:"mutex",value:"mutex"},{label:"goroutines",value:"goroutines"}].map((e=>(0,b.jsx)(a.Sc0,{checked:x.indexOf(e.value)>-1,disabled:l||!h,id:"checkbox-".concat(e.label),label:e.label,name:"checkbox-".concat(e.label),onChange:g,value:e.value},"checkbox-".concat(e.label))))]}),(0,b.jsxs)(a.azJ,{sx:{display:"flex",justifyContent:"flex-end",marginTop:24,gap:10},children:[(0,b.jsx)(a.$nd,{id:"start-profiling",type:"submit",variant:h?"callAction":"regular",disabled:l||x.length<1||!h,onClick:()=>{h?(()=>{const e=x.join(","),l=new URL(window.location.toString()),o=l.port,a=new URL(document.baseURI).pathname,c=(0,n.nw)(l.protocol);if(null!==(m=new WebSocket("".concat(c,"://").concat(l.hostname,":").concat(o).concat(a,"ws/profile?types=").concat(e))))m.onopen=()=>{t(!0),m.send("ok")},m.onmessage=e=>{let l=new Blob([e.data],{type:"application/zip"});t(!1);var o=document.createElement("a");o.href=window.URL.createObjectURL(l),o.download="profile.zip",document.body.appendChild(o),o.click(),document.body.removeChild(o)},m.onclose=()=>{console.log("connection closed by server"),t(!1)}})():e("/support/register")},label:"Start Profiling"}),(0,b.jsx)(a.$nd,{id:"stop-profiling",type:"submit",variant:"callAction",color:"primary",disabled:!l||!h,onClick:()=>{m.close(1e3),t(!1)},label:"Stop Profiling"})]})]})]})]})}}}]);
|
||||
//# sourceMappingURL=3061.c8170979.chunk.js.map
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[3061],{43061:(e,l,t)=>{t.r(l),t.d(l,{default:()=>x});var o=t(65043),a=t(89923),n=t(32511),c=t(73216),i=t(14558),s=t(20554),r=t(64159),p=t(28481),d=t(48793),u=t(55968),b=t(70579),m=null;const x=()=>{const e=(0,c.Zp)(),[l,t]=(0,o.useState)(!1),[x,f]=(0,o.useState)(["cpu","mem","block","mutex","goroutines"]),h=(0,i.vf)(),g=e=>{let l=[];l=x.indexOf(e.target.value)>-1?x.filter((l=>l!==e.target.value)):[...x,e.target.value],f(l)},v=(0,s.jL)();return(0,o.useEffect)((()=>{v((0,r.ph)("profile"))}),[]),(0,b.jsxs)(o.Fragment,{children:[(0,b.jsx)(d.A,{label:"Profile",actions:(0,b.jsx)(u.A,{})}),(0,b.jsxs)(a.Mxu,{children:[!h&&(0,b.jsx)(p.A,{compactMode:!0}),(0,b.jsxs)(a.Hbc,{children:[(0,b.jsxs)(a.azJ,{sx:{display:"flex",gap:10,"& div":{width:"initial"},"& .inputItem:not(:last-of-type)":{marginBottom:0}},children:[(0,b.jsx)(a.l1Y,{noMinWidth:!0,children:"Types to profile:"}),[{label:"cpu",value:"cpu"},{label:"mem",value:"mem"},{label:"block",value:"block"},{label:"mutex",value:"mutex"},{label:"goroutines",value:"goroutines"}].map((e=>(0,b.jsx)(a.Sc0,{checked:x.indexOf(e.value)>-1,disabled:l||!h,id:"checkbox-".concat(e.label),label:e.label,name:"checkbox-".concat(e.label),onChange:g,value:e.value},"checkbox-".concat(e.label))))]}),(0,b.jsxs)(a.azJ,{sx:{display:"flex",justifyContent:"flex-end",marginTop:24,gap:10},children:[(0,b.jsx)(a.$nd,{id:"start-profiling",type:"submit",variant:h?"callAction":"regular",disabled:l||x.length<1||!h,onClick:()=>{h?(()=>{const e=x.join(","),l=new URL(window.location.toString()),o=l.port,a=new URL(document.baseURI).pathname,c=(0,n.nw)(l.protocol);if(null!==(m=new WebSocket("".concat(c,"://").concat(l.hostname,":").concat(o).concat(a,"ws/profile?types=").concat(e))))m.onopen=()=>{t(!0),m.send("ok")},m.onmessage=e=>{let l=new Blob([e.data],{type:"application/zip"});t(!1);var o=document.createElement("a");o.href=window.URL.createObjectURL(l),o.download="profile.zip",document.body.appendChild(o),o.click(),document.body.removeChild(o)},m.onclose=()=>{console.log("connection closed by server"),t(!1)}})():e("/support/register")},label:"Start Profiling"}),(0,b.jsx)(a.$nd,{id:"stop-profiling",type:"submit",variant:"callAction",color:"primary",disabled:!l||!h,onClick:()=>{m.close(1e3),t(!1)},label:"Stop Profiling"})]})]})]})]})}}}]);
|
||||
//# sourceMappingURL=3061.2419f208.chunk.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[3329],{53329:(e,n,t)=>{t.r(n),t.d(n,{default:()=>y});var a=t(65043),s=t(89923),r=t(73216),c=t(99161),l=t(20554),i=t(77403),o=t(38375),x=t(56629),d=t(64159),p=t(53518),j=t(70579);const h=()=>{const e=(0,l.jL)(),n=(0,r.Zp)(),[t,h]=(0,a.useState)(""),[m,u]=(0,a.useState)(!1),y=""!==t.trim()&&-1===t.indexOf(" ");return(0,j.jsx)(s.Mxu,{children:(0,j.jsx)(s.Hbc,{title:"Create Key",icon:(0,j.jsx)(s.No_,{}),helpBox:(0,j.jsx)(o.A,{helpText:"Encryption Key",contents:["Create a new cryptographic key in the Key Management Service server connected to MINIO."]}),children:(0,j.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:a=>{a.preventDefault(),u(!0),x.F.kms.kmsCreateKey({key:t}).then((e=>{n("".concat(c.zZ.KMS_KEYS))})).catch((async n=>{const t=await n.json();e((0,d.C9)((0,p.S)(t)))})).finally((()=>u(!1)))},children:(0,j.jsxs)(s.xA9,{container:!0,children:[(0,j.jsx)(s.xA9,{item:!0,xs:12,children:(0,j.jsx)(s.cl_,{id:"key-name",name:"key-name",label:"Key Name",autoFocus:!0,value:t,error:(e=>-1!==e.indexOf(" ")?"Key name cannot contain spaces":"")(t),onChange:e=>{h(e.target.value)}})}),(0,j.jsxs)(s.xA9,{item:!0,xs:12,sx:i.Uz.modalButtonBar,children:[(0,j.jsx)(s.$nd,{id:"clear",type:"button",variant:"regular",onClick:()=>{h("")},label:"Clear"}),(0,j.jsx)(s.$nd,{id:"save-key",type:"submit",variant:"callAction",color:"primary",disabled:m||!y,label:"Save"})]})]})})})})};var m=t(48793),u=t(92452);const y=()=>{const e=(0,l.jL)(),n=(0,r.Zp)();return(0,a.useEffect)((()=>{e((0,d.ph)("add_key"))}),[]),(0,j.jsx)(a.Fragment,{children:(0,j.jsxs)(s.xA9,{item:!0,xs:12,children:[(0,j.jsx)(m.A,{label:(0,j.jsx)(s.EGL,{label:"Keys",onClick:()=>n(c.zZ.KMS_KEYS)}),actions:(0,j.jsx)(u.A,{})}),(0,j.jsx)(h,{})]})})}},38375:(e,n,t)=>{t.d(n,{A:()=>c});var a=t(65043),s=t(89923),r=t(70579);const c=e=>{let{helpText:n,contents:t}=e;return(0,r.jsx)(s.lVp,{iconComponent:(0,r.jsx)(s.nag,{}),title:n,help:(0,r.jsx)(a.Fragment,{children:t.map((e=>(0,r.jsx)(s.azJ,{sx:{paddingBottom:"20px"},children:e})))})})}}}]);
|
||||
//# sourceMappingURL=3329.c2099208.chunk.js.map
|
||||
"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[3329],{53329:(e,n,t)=>{t.r(n),t.d(n,{default:()=>y});var a=t(65043),s=t(89923),r=t(73216),c=t(99161),l=t(20554),i=t(77403),o=t(38375),x=t(56629),d=t(64159),p=t(53518),j=t(70579);const h=()=>{const e=(0,l.jL)(),n=(0,r.Zp)(),[t,h]=(0,a.useState)(""),[m,u]=(0,a.useState)(!1),y=""!==t.trim()&&-1===t.indexOf(" ");return(0,j.jsx)(s.Mxu,{children:(0,j.jsx)(s.Hbc,{title:"Create Key",icon:(0,j.jsx)(s.No_,{}),helpBox:(0,j.jsx)(o.A,{helpText:"Encryption Key",contents:["Create a new cryptographic key in the Key Management Service server connected to MINIO."]}),children:(0,j.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:a=>{a.preventDefault(),u(!0),x.F.kms.kmsCreateKey({key:t}).then((e=>{n("".concat(c.zZ.KMS_KEYS))})).catch((async n=>{const t=await n.json();e((0,d.C9)((0,p.S)(t)))})).finally((()=>u(!1)))},children:(0,j.jsxs)(s.xA9,{container:!0,children:[(0,j.jsx)(s.xA9,{item:!0,xs:12,children:(0,j.jsx)(s.cl_,{id:"key-name",name:"key-name",label:"Key Name",autoFocus:!0,value:t,error:(e=>-1!==e.indexOf(" ")?"Key name cannot contain spaces":"")(t),onChange:e=>{h(e.target.value)}})}),(0,j.jsxs)(s.xA9,{item:!0,xs:12,sx:i.Uz.modalButtonBar,children:[(0,j.jsx)(s.$nd,{id:"clear",type:"button",variant:"regular",onClick:()=>{h("")},label:"Clear"}),(0,j.jsx)(s.$nd,{id:"save-key",type:"submit",variant:"callAction",color:"primary",disabled:m||!y,label:"Save"})]})]})})})})};var m=t(48793),u=t(55968);const y=()=>{const e=(0,l.jL)(),n=(0,r.Zp)();return(0,a.useEffect)((()=>{e((0,d.ph)("add_key"))}),[]),(0,j.jsx)(a.Fragment,{children:(0,j.jsxs)(s.xA9,{item:!0,xs:12,children:[(0,j.jsx)(m.A,{label:(0,j.jsx)(s.EGL,{label:"Keys",onClick:()=>n(c.zZ.KMS_KEYS)}),actions:(0,j.jsx)(u.A,{})}),(0,j.jsx)(h,{})]})})}},38375:(e,n,t)=>{t.d(n,{A:()=>c});var a=t(65043),s=t(89923),r=t(70579);const c=e=>{let{helpText:n,contents:t}=e;return(0,r.jsx)(s.lVp,{iconComponent:(0,r.jsx)(s.nag,{}),title:n,help:(0,r.jsx)(a.Fragment,{children:t.map((e=>(0,r.jsx)(s.azJ,{sx:{paddingBottom:"20px"},children:e})))})})}}}]);
|
||||
//# sourceMappingURL=3329.89a09424.chunk.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user