mirror of
https://github.com/netbirdio/dashboard.git
synced 2026-09-23 00:30:43 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e8048dd20 | ||
|
|
97255dd882 | ||
|
|
6d4716cdad | ||
|
|
859916b1df | ||
|
|
80ce7d21b0 | ||
|
|
06fdbd8ec4 | ||
|
|
973cceff79 | ||
|
|
f4a2d6fae8 | ||
|
|
cb922b46b7 | ||
|
|
4c56ae704c | ||
|
|
fe6d8c9bd5 | ||
|
|
121976d101 | ||
|
|
f7071e00b6 | ||
|
|
6b73ccf102 | ||
|
|
87dcd00264 | ||
|
|
99f1bcc375 | ||
|
|
bf34c55110 | ||
|
|
1dfc6e2d75 | ||
|
|
b7860a8786 | ||
|
|
c9172e3a5f | ||
|
|
78d75134f9 | ||
|
|
071feb02f9 | ||
|
|
8e7bcc0c22 | ||
|
|
02a0b71e46 | ||
|
|
a8b66d935f | ||
|
|
f74f9cf812 | ||
|
|
7578595f05 | ||
|
|
a5fc05ca3a | ||
|
|
8ffdb442f1 | ||
|
|
a04e3afccb | ||
|
|
bca327e4cf | ||
|
|
6c74506316 | ||
|
|
663d7ea58c | ||
|
|
b701783dca | ||
|
|
fc9a9dfa3e | ||
|
|
093efc08b3 | ||
|
|
dfa41a48e3 | ||
|
|
2cf366a5f8 | ||
|
|
f91788faef | ||
|
|
ec7bb76f1e | ||
|
|
15bab2cef4 | ||
|
|
4fa3482c74 | ||
|
|
f5059f485c | ||
|
|
3c60de4169 | ||
|
|
2267cecf46 | ||
|
|
2b222e082a | ||
|
|
4612f6c49a | ||
|
|
a3a0e6315f | ||
|
|
fa7bc205ba | ||
|
|
87ff65f1a7 | ||
|
|
748596f710 | ||
|
|
b06cb0ec3d | ||
|
|
0c924f7ded | ||
|
|
f29c915fc2 | ||
|
|
5f8579bfda | ||
|
|
a71389aa29 |
No files matched your search
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"extends": ["next/core-web-vitals","prettier"],
|
||||||
|
"plugins": ["simple-import-sort"],
|
||||||
|
"rules": {
|
||||||
|
"simple-import-sort/imports": [
|
||||||
|
"warn",
|
||||||
|
{
|
||||||
|
"groups": [["^\\u0000", "^@?\\w", "^[^.]", "^\\."]]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"simple-import-sort/exports": "warn"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
name: Bug/Issue report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: ['needs-triage']
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the problem**
|
||||||
|
|
||||||
|
A clear and concise description of what the problem is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Are you using NetBird Cloud?**
|
||||||
|
|
||||||
|
Please specify whether you use NetBird Cloud or self-host NetBird's control plane.
|
||||||
|
|
||||||
|
**NetBird version**
|
||||||
|
|
||||||
|
`netbird version`
|
||||||
|
|
||||||
|
**NetBird status -d output:**
|
||||||
|
|
||||||
|
If applicable, add the `netbird status -d' command output.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
|
||||||
|
Add any other context about the problem here.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: ['feature-request','needs-triage']
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
@@ -2,11 +2,16 @@ name: build and push
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
- "feature/**"
|
||||||
- main
|
- main
|
||||||
|
- debug
|
||||||
tags:
|
tags:
|
||||||
- "**"
|
- "**"
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: netbirdio/dashboard
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build_n_push:
|
build_n_push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -16,19 +21,20 @@ jobs:
|
|||||||
- name: setup-node
|
- name: setup-node
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: '16'
|
node-version: '18'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|
||||||
- name: Build
|
- run: echo '{}' > .local-config.json
|
||||||
# skiping fail on warning for now
|
|
||||||
run: CI=false npm run build
|
- name: Build
|
||||||
-
|
run: npm run build
|
||||||
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v2
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v2
|
||||||
-
|
-
|
||||||
@@ -36,21 +42,21 @@ jobs:
|
|||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v4
|
uses: docker/metadata-action@v4
|
||||||
with:
|
with:
|
||||||
images: wiretrustee/dashboard
|
images: ${{ env.IMAGE_NAME }}
|
||||||
-
|
-
|
||||||
name: Login to DockerHub
|
name: Login to DockerHub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USER }}
|
username: ${{ secrets.NB_DOCKER_USER }}
|
||||||
password: ${{ secrets.DOCKER_TOKEN }}
|
password: ${{ secrets.NB_DOCKER_TOKEN }}
|
||||||
-
|
-
|
||||||
name: Docker build and push
|
name: Docker build and push
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: docker/Dockerfile
|
file: docker/Dockerfile
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: true
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm
|
platforms: linux/amd64,linux/arm64,linux/arm
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
name: run e2e tests
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
e2e_tests:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: setup-node
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: '16'
|
|
||||||
cache: 'npm'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: install playwright
|
|
||||||
run: npx playwright install
|
|
||||||
|
|
||||||
- name: install playwright deps
|
|
||||||
run: npx playwright install-deps
|
|
||||||
|
|
||||||
- name: create test environment
|
|
||||||
run: bash ./e2e-tests/create-test-env.sh
|
|
||||||
|
|
||||||
- name: run e2e tests
|
|
||||||
run: npx playwright test --workers 2
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: playwright-report
|
|
||||||
path: |
|
|
||||||
playwright-report/
|
|
||||||
test-results/
|
|
||||||
retention-days: 3
|
|
||||||
+23
-23
@@ -2,42 +2,42 @@
|
|||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
/node_modules
|
/node_modules
|
||||||
/node_modules.bkp
|
|
||||||
/.pnp
|
/.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
|
|
||||||
# testing
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
|
|
||||||
|
# next.js
|
||||||
|
/.next/
|
||||||
|
/out/
|
||||||
|
|
||||||
# production
|
# production
|
||||||
/build
|
/build
|
||||||
|
/out
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.env.local
|
*.pem
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
|
|
||||||
|
# debug
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
src/auth_config.json
|
# local env files
|
||||||
.idea
|
.env*.local
|
||||||
.eslintcache
|
|
||||||
src/.local-config*.json
|
# vercel
|
||||||
/public/OidcServiceWorker.js
|
.vercel
|
||||||
/public/OidcTrustedDomains.js
|
|
||||||
/e2e-tests/node_modules/
|
# typescript
|
||||||
/e2e-tests/playwright-report/
|
*.tsbuildinfo
|
||||||
/e2e-tests/test-results/
|
next-env.d.ts
|
||||||
/test-results/
|
|
||||||
/playwright-report/
|
# config
|
||||||
.env
|
.local-config.json
|
||||||
Caddyfile
|
.configs/.local-config.zitadel.json
|
||||||
docker-compose.yml
|
.configs/.staging-config.json
|
||||||
machinekey/
|
.configs/.temp-config.json
|
||||||
management.json
|
.configs
|
||||||
turnserver.conf
|
|
||||||
zitadel.env
|
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
Mikhail Bragin (https://github.com/braginini)
|
Mikhail Bragin (https://github.com/braginini)
|
||||||
Maycon Santos (https://github.com/mlsmaycon)
|
Maycon Santos (https://github.com/mlsmaycon)
|
||||||
|
Wiretrustee UG (haftungsbeschränkt)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
BSD 3-Clause License
|
BSD 3-Clause License
|
||||||
|
|
||||||
Copyright (c) 2021 Wiretrustee AUTHORS
|
Copyright (c) 2024 Wiretrustee UG (haftungsbeschränkt) & AUTHORS
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# NetBird dashboard
|
# NetBird Dashboard
|
||||||
|
|
||||||
This project is the UI for NetBird's Management service.
|
This project is the UI for NetBird's Management service.
|
||||||
|
|
||||||
@@ -17,15 +17,15 @@ The dashboard makes it possible to:
|
|||||||
- define access controls
|
- define access controls
|
||||||
|
|
||||||
## Some Screenshots
|
## Some Screenshots
|
||||||
<img src="./media/auth.png" alt="auth"/>
|
<img src="./src/assets/screenshots/peers.png" alt="peers"/>
|
||||||
<img src="./media/peers.png" alt="peers"/>
|
<img src="./src/assets/screenshots/add-peer.png" alt="add-peer"/>
|
||||||
<img src="./media/add-peer.png" alt="add-peer"/>
|
|
||||||
|
|
||||||
|
|
||||||
## Technologies Used
|
## Technologies Used
|
||||||
|
|
||||||
|
- NextJS
|
||||||
- ReactJS
|
- ReactJS
|
||||||
- AntD UI framework
|
- Tailwind CSS
|
||||||
- Auth0
|
- Auth0
|
||||||
- Nginx
|
- Nginx
|
||||||
- Docker
|
- Docker
|
||||||
@@ -38,28 +38,28 @@ Auth0 so far is the only 3rd party dependency that can't be really self-hosted.
|
|||||||
|
|
||||||
1. Install [Docker](https://docs.docker.com/get-docker/)
|
1. Install [Docker](https://docs.docker.com/get-docker/)
|
||||||
2. Register [Auth0](https://auth0.com/) account
|
2. Register [Auth0](https://auth0.com/) account
|
||||||
3. Running Wiretrustee UI Dashboard requires the following Auth0 environmental variables to be set (see docker command below):
|
3. Running NetBird UI Dashboard requires the following Auth0 environmental variables to be set (see docker command below):
|
||||||
|
|
||||||
`AUTH0_DOMAIN` `AUTH0_CLIENT_ID` `AUTH0_AUDIENCE`
|
`AUTH0_DOMAIN` `AUTH0_CLIENT_ID` `AUTH0_AUDIENCE`
|
||||||
|
|
||||||
To obtain these, please use [Auth0 React SDK Guide](https://auth0.com/docs/quickstart/spa/react/01-login#configure-auth0) up until "Configure Allowed Web Origins"
|
To obtain these, please use [Auth0 React SDK Guide](https://auth0.com/docs/quickstart/spa/react/01-login#configure-auth0) up until "Configure Allowed Web Origins"
|
||||||
|
|
||||||
4. Wiretrustee UI Dashboard uses Wiretrustee Management Service HTTP API, so setting `NETBIRD_MGMT_API_ENDPOINT` is required. Most likely it will be `http://localhost:33071` if you are hosting Management API on the same server.
|
4. NetBird UI Dashboard uses NetBirds Management Service HTTP API, so setting `NETBIRD_MGMT_API_ENDPOINT` is required. Most likely it will be `http://localhost:33071` if you are hosting Management API on the same server.
|
||||||
5. Run docker container without SSL (Let's Encrypt):
|
5. Run docker container without SSL (Let's Encrypt):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run -d --name wiretrustee-dashboard \
|
docker run -d --name netbird-dashboard \
|
||||||
--rm -p 80:80 -p 443:443 \
|
--rm -p 80:80 -p 443:443 \
|
||||||
-e AUTH0_DOMAIN=<SET YOUR AUTH DOMAIN> \
|
-e AUTH0_DOMAIN=<SET YOUR AUTH DOMAIN> \
|
||||||
-e AUTH0_CLIENT_ID=<SET YOUR CLIENT ID> \
|
-e AUTH0_CLIENT_ID=<SET YOUR CLIENT ID> \
|
||||||
-e AUTH0_AUDIENCE=<SET YOUR AUDIENCE> \
|
-e AUTH0_AUDIENCE=<SET YOUR AUDIENCE> \
|
||||||
-e NETBIRD_MGMT_API_ENDPOINT=<SET YOUR MANAGEMETN API URL> \
|
-e NETBIRD_MGMT_API_ENDPOINT=<SET YOUR MANAGEMETN API URL> \
|
||||||
wiretrustee/dashboard:main
|
netbirdio/dashboard:main
|
||||||
```
|
```
|
||||||
6. Run docker container with SSL (Let's Encrypt):
|
6. Run docker container with SSL (Let's Encrypt):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run -d --name wiretrustee-dashboard \
|
docker run -d --name netbird-dashboard \
|
||||||
--rm -p 80:80 -p 443:443 \
|
--rm -p 80:80 -p 443:443 \
|
||||||
-e NGINX_SSL_PORT=443 \
|
-e NGINX_SSL_PORT=443 \
|
||||||
-e LETSENCRYPT_DOMAIN=<YOUR PUBLIC DOMAIN> \
|
-e LETSENCRYPT_DOMAIN=<YOUR PUBLIC DOMAIN> \
|
||||||
@@ -68,11 +68,26 @@ Auth0 so far is the only 3rd party dependency that can't be really self-hosted.
|
|||||||
-e AUTH0_CLIENT_ID=<SET YOUR CLEITN ID> \
|
-e AUTH0_CLIENT_ID=<SET YOUR CLEITN ID> \
|
||||||
-e AUTH0_AUDIENCE=<SET YOUR AUDIENCE> \
|
-e AUTH0_AUDIENCE=<SET YOUR AUDIENCE> \
|
||||||
-e NETBIRD_MGMT_API_ENDPOINT=<SET YOUR MANAGEMETN API URL> \
|
-e NETBIRD_MGMT_API_ENDPOINT=<SET YOUR MANAGEMETN API URL> \
|
||||||
wiretrustee/dashboard:main
|
netbirdio/dashboard:main
|
||||||
```
|
```
|
||||||
|
|
||||||
## How to run local development
|
## How to run local development
|
||||||
1. Install node 16
|
|
||||||
2. create and update the `src/.local-config.json` file. This file should contain values to be replaced from `src/config.json`
|
1. Install [Node](https://nodejs.org/)
|
||||||
3. run `npm install`
|
2. Create and update the `.local-config.json` file. This file should contain values to be replaced from `config.json`
|
||||||
4. run `npm run start dev`
|
3. Run `npm install` to install dependencies
|
||||||
|
4. Run `npm run dev` to start the development server
|
||||||
|
|
||||||
|
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||||
|
|
||||||
|
You can start editing by modifying the code inside `src/..`
|
||||||
|
The page auto-updates as you edit the file.
|
||||||
|
|
||||||
|
## How to migrate from old dashboard (v1)
|
||||||
|
|
||||||
|
The new dashboard comes with a new docker image `netbirdio/dashboard:main`.
|
||||||
|
To migrate from the old dashboard (v1) `wiretrustee/dashboard:main` to the new one, please follow the steps below.
|
||||||
|
|
||||||
|
1. Stop the dashboard container `docker compose down dashboard`
|
||||||
|
2. Replace the docker image name in your `docker-compose.yml` with `netbirdio/dashboard:main`
|
||||||
|
3. Recreate the dashboard container `docker compose up -d --force-recreate dashboard`
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://ui.shadcn.com/schema.json",
|
||||||
|
"style": "default",
|
||||||
|
"rsc": true,
|
||||||
|
"tsx": true,
|
||||||
|
"tailwind": {
|
||||||
|
"config": "tailwind.config.ts",
|
||||||
|
"css": "src/app/globals.css",
|
||||||
|
"baseColor": "neutral",
|
||||||
|
"cssVariables": false
|
||||||
|
},
|
||||||
|
"aliases": {
|
||||||
|
"components": "@/components",
|
||||||
|
"utils": "@/utils/helpers"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,12 +5,12 @@
|
|||||||
"authClientSecret": "$AUTH_CLIENT_SECRET",
|
"authClientSecret": "$AUTH_CLIENT_SECRET",
|
||||||
"authScopesSupported": "$AUTH_SUPPORTED_SCOPES",
|
"authScopesSupported": "$AUTH_SUPPORTED_SCOPES",
|
||||||
"authAudience": "$AUTH_AUDIENCE",
|
"authAudience": "$AUTH_AUDIENCE",
|
||||||
|
|
||||||
"apiOrigin": "$NETBIRD_MGMT_API_ENDPOINT",
|
"apiOrigin": "$NETBIRD_MGMT_API_ENDPOINT",
|
||||||
"grpcApiOrigin": "$NETBIRD_MGMT_GRPC_API_ENDPOINT",
|
"grpcApiOrigin": "$NETBIRD_MGMT_GRPC_API_ENDPOINT",
|
||||||
"hotjarTrackID": "$NETBIRD_HOTJAR_TRACK_ID",
|
|
||||||
"redirectURI": "$AUTH_REDIRECT_URI",
|
"redirectURI": "$AUTH_REDIRECT_URI",
|
||||||
"silentRedirectURI": "$AUTH_SILENT_REDIRECT_URI",
|
"silentRedirectURI": "$AUTH_SILENT_REDIRECT_URI",
|
||||||
"tokenSource": "$NETBIRD_TOKEN_SOURCE",
|
"tokenSource": "$NETBIRD_TOKEN_SOURCE",
|
||||||
"dragQueryParams": "$NETBIRD_DRAG_QUERY_PARAMS"
|
"dragQueryParams": "$NETBIRD_DRAG_QUERY_PARAMS",
|
||||||
|
"hotjarTrackID": "$NETBIRD_HOTJAR_TRACK_ID",
|
||||||
|
"googleAnalyticsID": "$NETBIRD_GOOGLE_ANALYTICS_ID"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import { defineConfig } from "cypress";
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
e2e: {
|
||||||
|
baseUrl: "http://localhost:3000",
|
||||||
|
},
|
||||||
|
component: {
|
||||||
|
devServer: {
|
||||||
|
framework: "next",
|
||||||
|
bundler: "webpack",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
viewportWidth: 1920,
|
||||||
|
viewportHeight: 1080,
|
||||||
|
});
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
describe("Click all tabs in peer modal", () => {
|
||||||
|
it("passes", () => {
|
||||||
|
cy.visit("/install");
|
||||||
|
cy.get("div").contains("Linux").click();
|
||||||
|
cy.get("[data-cy=copy-to-clipboard]").click();
|
||||||
|
cy.get("div").contains("Windows").click();
|
||||||
|
cy.get("[data-cy=copy-to-clipboard]").click();
|
||||||
|
cy.get("div").contains("Android").click();
|
||||||
|
cy.get("[data-cy=copy-to-clipboard]").click();
|
||||||
|
cy.get("div").contains("Docker").click();
|
||||||
|
cy.get("[data-cy=copy-to-clipboard]").click();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"name": "Using fixtures to represent data",
|
||||||
|
"email": "hello@cypress.io",
|
||||||
|
"body": "Fixtures are a great way to mock data for responses to routes"
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/// <reference types="cypress" />
|
||||||
|
// ***********************************************
|
||||||
|
// This example commands.ts shows you how to
|
||||||
|
// create various custom commands and overwrite
|
||||||
|
// existing commands.
|
||||||
|
//
|
||||||
|
// For more comprehensive examples of custom
|
||||||
|
// commands please read more here:
|
||||||
|
// https://on.cypress.io/custom-commands
|
||||||
|
// ***********************************************
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// -- This is a parent command --
|
||||||
|
// Cypress.Commands.add('login', (email, password) => { ... })
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// -- This is a child command --
|
||||||
|
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// -- This is a dual command --
|
||||||
|
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// -- This will overwrite an existing command --
|
||||||
|
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
||||||
|
//
|
||||||
|
// declare global {
|
||||||
|
// namespace Cypress {
|
||||||
|
// interface Chainable {
|
||||||
|
// login(email: string, password: string): Chainable<void>
|
||||||
|
// drag(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
|
||||||
|
// dismiss(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
|
||||||
|
// visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element>
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// ***********************************************************
|
||||||
|
// This example support/e2e.ts is processed and
|
||||||
|
// loaded automatically before your test files.
|
||||||
|
//
|
||||||
|
// This is a great place to put global configuration and
|
||||||
|
// behavior that modifies Cypress.
|
||||||
|
//
|
||||||
|
// You can change the location of this file or turn off
|
||||||
|
// automatically serving support files with the
|
||||||
|
// 'supportFile' configuration option.
|
||||||
|
//
|
||||||
|
// You can read more here:
|
||||||
|
// https://on.cypress.io/configuration
|
||||||
|
// ***********************************************************
|
||||||
|
|
||||||
|
// Import commands.js using ES2015 syntax:
|
||||||
|
import './commands'
|
||||||
|
|
||||||
|
// Alternatively you can use CommonJS syntax:
|
||||||
|
// require('./commands')
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es5",
|
||||||
|
"lib": ["es5", "dom"],
|
||||||
|
"baseUrl": "http://localhost:3000",
|
||||||
|
"types": ["cypress", "node"],
|
||||||
|
},
|
||||||
|
"include": ["**/*.ts"]
|
||||||
|
}
|
||||||
+1
-1
@@ -21,4 +21,4 @@ RUN chmod +x /usr/local/init_react_envs.sh
|
|||||||
# configure supervisor
|
# configure supervisor
|
||||||
COPY docker/supervisord.conf /etc/supervisord.conf
|
COPY docker/supervisord.conf /etc/supervisord.conf
|
||||||
# copy build files
|
# copy build files
|
||||||
COPY build/ /usr/share/nginx/html/
|
COPY out/ /usr/share/nginx/html/
|
||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
# Wiretrustee Dashboard
|
# NetBird Dashboard
|
||||||
Wiretrustee Dashboard is a the Wiretrustee Management server UI. It allow users to signin, view setup keys and manage peers. This image is **not ready** for production use.
|
NetBird Dashboard is NetBirds Management server UI. It allows users to signin, view setup keys and manage peers. This image is **not ready** for production use.
|
||||||
## Tags
|
## Tags
|
||||||
```latest``` ```vX.X.X``` not available yet.
|
```latest``` ```vX.X.X``` not available yet.
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ Using SSL certificate from Let's Encrypt®:
|
|||||||
docker run -d --rm -p 80:80 -p 443:443 \
|
docker run -d --rm -p 80:80 -p 443:443 \
|
||||||
-e LETSENCRYPT_DOMAIN=app.mydomain.com \
|
-e LETSENCRYPT_DOMAIN=app.mydomain.com \
|
||||||
-e LETSENCRYPT_EMAIL=hello@mydomain.com \
|
-e LETSENCRYPT_EMAIL=hello@mydomain.com \
|
||||||
wiretrustee/dashboard:main
|
netbirdio/dashboard:main
|
||||||
```
|
```
|
||||||
> For SSL generation, you need to run this image in a server with proper public IP and a domain name pointing to it.
|
> For SSL generation, you need to run this image in a server with proper public IP and a domain name pointing to it.
|
||||||
## Environment variables
|
## Environment variables
|
||||||
|
|||||||
+10
-7
@@ -1,4 +1,3 @@
|
|||||||
# simple server configuration to replace nginx's default
|
|
||||||
server {
|
server {
|
||||||
listen 80 default_server;
|
listen 80 default_server;
|
||||||
listen [::]:80 default_server;
|
listen [::]:80 default_server;
|
||||||
@@ -6,11 +5,15 @@ server {
|
|||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri /index.html;
|
try_files $uri $uri.html $uri/ =404;
|
||||||
}
|
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
|
||||||
# You may need this to prevent return 404 recursion.
|
expires off;
|
||||||
location = /404.html {
|
}
|
||||||
internal;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
error_page 404 /404.html;
|
||||||
|
location = /404.html {
|
||||||
|
internal;
|
||||||
|
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
|
||||||
|
expires off;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loaded 20 of 1132 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user