Compare commits

..
Author SHA1 Message Date
Sarooj Bukhari e208397715 fix update bug 2023-10-04 22:51:27 +05:00
Sarooj Bukhari 586e76ec60 allow user to select one group peer 2023-10-04 12:27:01 +05:00
Sarooj Bukhari 1989d5ba8c allow group creation from route 2023-10-02 23:23:46 +05:00
Sarooj Bukhari 6f7bd9aeb0 fix bugs 2023-10-02 21:04:51 +05:00
Sarooj Bukhari fb5f0cee18 fix tooltip stylinh 2023-10-02 15:28:53 +05:00
Sarooj Bukhari bc5364d610 fix tooltip stylinh 2023-10-02 13:57:57 +05:00
Sarooj Bukhari 9879c9c496 fix tooltip stylinh 2023-10-02 13:50:27 +05:00
Maycon Santos 7e3f459178 update text and icon color 2023-10-01 00:01:16 +02:00
Sarooj Bukhari 5d5a15118b fix 2023-10-01 01:31:52 +05:00
Sarooj Bukhari 629871606c add check 2023-09-29 23:35:17 +05:00
Maycon Santos a75449bc4a Merge remote-tracking branch 'origin/add-support-to-routing-peer' into add-support-to-routing-peer 2023-09-29 15:38:55 +02:00
Maycon Santos a2a614c61b update text and icon color 2023-09-29 15:37:54 +02:00
Sarooj Bukhari 8d252ac8eb fix 2023-09-29 00:36:40 +05:00
Sarooj Bukhari c7048106ef change HA logic 2023-09-29 00:30:57 +05:00
Sarooj Bukhari 8b88fd7471 fix code 2023-09-28 19:57:00 +05:00
Sarooj Bukhari 31149d19d3 fix code 2023-09-28 19:32:13 +05:00
Sarooj Bukhari 234a7427c5 fix peer bug and add tooltip 2023-09-28 19:19:27 +05:00
Sarooj Bukhari 816d24c8b8 fix message 2023-09-27 19:25:45 +05:00
Sarooj Bukhari 4d80685e6f fix message 2023-09-27 16:57:59 +05:00
Sarooj Bukhari 7289f2ddad fix message 2023-09-27 16:57:51 +05:00
Sarooj Bukhari de2920f4cd fix bugs 2023-09-27 15:40:06 +05:00
Sarooj Bukhari f2ea366f24 fix bugs 2023-09-27 15:38:57 +05:00
Sarooj Bukhari 43fc4efe5a update route listing on peer udpate 2023-09-27 15:28:41 +05:00
Sarooj Bukhari b993835f66 listing route on peer 2023-09-27 12:57:53 +05:00
Sarooj Bukhari 8df93da24b fix bug 2023-09-26 23:46:58 +05:00
Sarooj Bukhari 0ead022c44 fix HA logic 2023-09-26 23:24:00 +05:00
Sarooj Bukhari 36d8c83d53 delete 2023-09-26 19:02:11 +05:00
Sarooj Bukhari d90b20ab15 add, delete, edit and configure peer gropus 2023-09-26 18:42:58 +05:00
44 changed files with 670 additions and 1868 deletions

No files matched your search

-15
View File
@@ -1,15 +0,0 @@
name: Codespell
on: [pull_request]
jobs:
check:
name: Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: codespell
uses: codespell-project/actions-codespell@v2
with:
only_warn: 1
skip: package-lock.json,*.svg
+3 -3
View File
@@ -1,15 +1,15 @@
# Wiretrustee 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.
Wiretrustee Dashboard is a the Wiretrustee Managemenet server UI. It allow users to signin, view setup keys and manage peers. This image is **not ready** for production use.
## Tags
```latest``` ```vX.X.X``` not available yet.
```main``` built on every PR being merged to the repository
```main``` builded on every PR being merged to the repository
## How to use this image
HTTP run:
```shell
docker run -d --rm -p 80:80 wiretrustee/dashboard:main
```
Using SSL certificate from Let's Encrypt®:
Using SSL certificate from Let's Encript®:
```shell
docker run -d --rm -p 80:80 -p 443:443 \
-e LETSENCRYPT_DOMAIN=app.mydomain.com \
+1 -1
View File
@@ -387,7 +387,7 @@ check_nb_domain() {
if [ "$DOMAIN" == "netbird.example.com" ]; then
echo "The NETBIRD_DOMAIN cannot be netbird.example.com" > /dev/stderr
return 1
retrun 1
fi
return 0
}
+1 -1
View File
@@ -17,7 +17,7 @@ export class AccessControlPage {
}
async assertDefaultAccessCotrolIsCreated() {
await test.step('Assert that default control access is created', async () => {
await test.step('Assert that default cotrol access is created', async () => {
await expect(this.defaulAccessControl).toBeVisible();
})
}
-14
View File
@@ -6,7 +6,6 @@ export class AddPeerModal {
private readonly windowsTab = this.page.getByTestId('add-peer-modal-windows-tab')
private readonly macTab = this.page.getByTestId('add-peer-modal-mac-tab')
private readonly androidTab = this.page.getByTestId('add-peer-modal-android-tab')
private readonly iosTab = this.page.getByTestId('add-peer-modal-ios-tab')
private readonly dockerTab = this.page.getByTestId('add-peer-modal-docker-tab')
private readonly linuxTabText = this.page.locator('pre').filter({ hasText: 'curl -fsSL https://pkgs.netbird.io/install.sh | sh' })
private readonly windowsDownloadButton = this.page.getByTestId('download-windows-button')
@@ -58,13 +57,6 @@ export class AddPeerModal {
})
}
async openIOSTab() {
await test.step('Open iOS tab on add peer modal', async () => {
await this.iosTab.click();
})
}
async openDockerTab() {
await test.step('Open Docker tab on add peer modal', async () => {
await this.dockerTab.click();
@@ -102,12 +94,6 @@ export class AddPeerModal {
})
}
async assertiOSDownloadButtonHasCorrectLink() {
await test.step('Assert iOS download button has a correct link', async () => {
await expect(this.androidDownloadButton).toHaveAttribute('href', 'https://apps.apple.com/app/netbird-p2p-vpn/id6469329339');
})
}
async assertDockerDownloadButtonHasCorrectLink() {
await test.step('Assert Docker download button has a correct link', async () => {
await expect(this.dockerDownloadButton).toHaveAttribute('href', 'https://docs.docker.com/engine/install/');
-5
View File
@@ -30,11 +30,6 @@ test('Test MacOS tab on a first access add peer modal / @bc', async () => {
await addPeerModal.assertM1M2DownloadButtonHasCorrectLink();
});
test('Test iOS tab on a first access add peer modal', async () => {
await addPeerModal.openIOSTab();
await addPeerModal.assertiOSDownloadButtonHasCorrectLink();
});
test('Test Android tab on a first access add peer modal', async () => {
await addPeerModal.openAndroidTab();
await addPeerModal.assertAndroidDownloadButtonHasCorrectLink();
+6 -6
View File
@@ -63,9 +63,9 @@
}
},
"node_modules/@adobe/css-tools": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
"integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg=="
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz",
"integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g=="
},
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
@@ -17173,9 +17173,9 @@
},
"dependencies": {
"@adobe/css-tools": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
"integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg=="
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz",
"integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g=="
},
"@ampproject/remapping": {
"version": "2.2.0",
+1 -2
View File
@@ -22,7 +22,6 @@ import {SecureLoading} from "./components/Loading";
import DNS from "./views/DNS";
import Activity from "./views/Activity";
import Settings from "./views/Settings";
import {isLocalDev, isNetBirdHosted} from "./utils/common";
const {Header, Content} = Layout;
@@ -76,7 +75,7 @@ function App() {
{!show && <SecureLoading padding="3em" width={50} height={50}/>}
{show &&
<Layout>
{(isNetBirdHosted() || isLocalDev()) && <Banner/>}
<Banner/>
<Header className="header" style={{
display: "flex",
flexDirection: "column",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

+4 -6
View File
@@ -15,20 +15,18 @@ const Banner = () => {
localStorage.setItem(banner_closed_key,'true');
};
// todo: when updating this announcement, ensure to
// remove the condition on App.tsx that limits the current banner to cloud and local dev
const announcement = "Discover the new NetBird Dashboard with a brand new look and feel."
const announcement = "New Release! Manage DNS with NetBird."
const announcement_md5 = Md5.hashStr(announcement)
const linkLearnMore = () => {
return (
<a
href="https://preview.netbird.io/peers"
href="https://docs.netbird.io/how-to/manage-dns-in-your-network"
className="font-bold underline"
target="_blank"
rel="noreferrer"
><Text strong style={{color: "#ffffff"}}>Try it out now&nbsp;<span aria-hidden="true">&rarr;</span></Text></a>
><Text strong style={{color: "#ffffff"}}>Learn more&nbsp;<span aria-hidden="true">&rarr;</span></Text></a>
)
}
@@ -38,7 +36,7 @@ const Banner = () => {
if((!stored_banner_closed || stored_banner_closed !== 'true') ||
(!store_banner_md5 || store_banner_md5 !== announcement_md5)) {
setShow(true);
//setShow(true);
localStorage.setItem(banner_md5_key,announcement_md5);
localStorage.setItem(banner_closed_key,'false');
}
+1 -57
View File
@@ -73,7 +73,6 @@ const NameServerGroupAdd = () => {
const inputNameRef = useRef<any>(null);
const inputDescriptionRef = useRef<any>(null);
const [selectCustom, setSelectCustom] = useState(false);
const [matchDomains, setMatchDomains] = useState(0);
useEffect(() => {
if (editName)
@@ -88,6 +87,7 @@ const NameServerGroupAdd = () => {
cursor: "end",
});
}, [editDescription]);
useEffect(() => {
if (!nsGroup) return;
@@ -117,7 +117,6 @@ const NameServerGroupAdd = () => {
nameservers: [] as NameServer[],
groups: [],
enabled: false,
search_domains_enabled: false,
} as NameServerGroup)
);
setEditName(false);
@@ -126,7 +125,6 @@ const NameServerGroupAdd = () => {
};
const onChange = (changedValues: any) => {
if (changedValues.primary !== undefined) {
setIsPrimary(changedValues.primary);
}
@@ -158,7 +156,6 @@ const NameServerGroupAdd = () => {
],
groups: [],
enabled: true,
search_domains_enabled: false,
},
{
name: cloudflareChoice,
@@ -179,7 +176,6 @@ const NameServerGroupAdd = () => {
],
groups: [],
enabled: true,
search_domains_enabled: false,
},
{
name: quad9Choice,
@@ -200,7 +196,6 @@ const NameServerGroupAdd = () => {
],
groups: [],
enabled: true,
search_domains_enabled: false,
},
];
@@ -208,7 +203,6 @@ const NameServerGroupAdd = () => {
let nsGroupLocal = {} as NameServerGroup;
if (value === customChoice) {
nsGroupLocal = nsGroup;
nsGroupLocal.domains = [];
} else {
defaultDNSOptions.forEach((nsg) => {
if (value === nsg.name) {
@@ -268,8 +262,6 @@ const NameServerGroupAdd = () => {
groups: existingGroups,
groupsToCreate: newGroups,
enabled: values.enabled,
search_domains_enabled:
matchDomains > 0 ? formNSGroup.search_domains_enabled : false,
} as NameServerGroupToSave;
};
@@ -470,7 +462,6 @@ const NameServerGroupAdd = () => {
</Col>
</Space>
</Row>
{setMatchDomains(fields.length)}
{fields.map((field, index) => {
return (
<Row key={index} style={{ marginBottom: "5px" }}>
@@ -531,13 +522,6 @@ const NameServerGroupAdd = () => {
});
};
const handleChangeMarkDomain = (checked: boolean) => {
setFormNSGroup({
...formNSGroup,
search_domains_enabled: checked,
});
};
return (
<>
{nsGroup && (
@@ -717,46 +701,6 @@ const NameServerGroupAdd = () => {
<Col span={24}>
<Form.List name="domains">{renderDomains}</Form.List>
</Col>
{matchDomains > 0 && (
<Col span={24}>
<Form.Item name="search_domains_enabled" label="">
<div
style={{
display: "flex",
gap: "15px",
}}
>
<Switch
onChange={handleChangeMarkDomain}
size="small"
/>
<div>
<label
style={{
color: "rgba(0, 0, 0, 0.88)",
fontSize: "14px",
fontWeight: "500",
}}
>
Mark match domains as search domains
</label>
<Paragraph
type={"secondary"}
style={{
marginTop: "-2",
fontWeight: "400",
marginBottom: "0",
}}
>
E.g., "peer.example.com" will be accessible with
"peer"
</Paragraph>
</div>
</div>
</Form.Item>
</Col>
)}
<Col span={24}>
<label
style={{
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -161,7 +161,7 @@ const Navbar = () => {
return false;
}
if (user.role?.toLowerCase() === "admin" || user.role?.toLowerCase() === "owner") {
if (user.role?.toLowerCase() === "admin") {
return true;
}
return !adminOnlyTabs.find((t) => t === key);
-1
View File
@@ -197,7 +197,6 @@ const PeerUpdate = (props: any) => {
os !== "" &&
!os.toLowerCase().startsWith("darwin") &&
!os.toLowerCase().startsWith("windows") &&
!os.toLowerCase().startsWith("ios") &&
!os.toLowerCase().startsWith("android")
);
};
+1 -2
View File
@@ -151,7 +151,6 @@ const RouteAddNew = (selectedPeer: any) => {
!os.toLowerCase().startsWith("darwin") &&
!os.toLowerCase().startsWith("windows") &&
!os.toLowerCase().startsWith("android") &&
!os.toLowerCase().startsWith("ios") &&
route &&
!routes
.filter((r) => r.network_id === route.network_id)
@@ -364,7 +363,7 @@ const RouteAddNew = (selectedPeer: any) => {
const peerGroupsValidaton = (_: RuleObject, value: string) => {
if (value.length < 1) {
return Promise.reject(new Error("Please select a peer group"));
return Promise.reject(new Error("Please select peer groups"));
}
return Promise.resolve();
};
+10 -11
View File
@@ -100,7 +100,6 @@ const RoutePeerUpdate = () => {
!os.toLowerCase().startsWith("darwin") &&
!os.toLowerCase().startsWith("windows") &&
!os.toLowerCase().startsWith("android") &&
!os.toLowerCase().startsWith("ios") &&
route &&
!routes
.filter((r) => r.network_id === route.network_id)
@@ -114,15 +113,15 @@ const RoutePeerUpdate = () => {
}
});
const handleSingleChangeTags = (values: any) => {
const lastValue = values[values.length - 1];
if (values.length > 0) {
form.setFieldsValue({
peer_groups: [lastValue],
});
}
};
const handleSingleChangeTags = (values: any) => {
const lastValue = values[values.length - 1];
if (values.length > 0) {
form.setFieldsValue({
peer_groups: [lastValue],
});
}
};
const createRouteToSave = (inputRoute: FormRoute): RouteToSave => {
if (inputRoute.peer_groups) {
inputRoute = {
@@ -368,7 +367,7 @@ const RoutePeerUpdate = () => {
},
{
key: "groupOfPeers",
label: "Peer group",
label: "Peer groups",
disabled: true,
children: (
<>
+13 -11
View File
@@ -96,7 +96,6 @@ const RouteAddNew = () => {
!os.toLowerCase().startsWith("darwin") &&
!os.toLowerCase().startsWith("windows") &&
!os.toLowerCase().startsWith("android") &&
!os.toLowerCase().startsWith("ios") &&
route &&
!routes
.filter((r) => r.network_id === route.network_id)
@@ -167,21 +166,24 @@ const RouteAddNew = () => {
return payload;
};
const handleSingleChangeTags = (values: any) => {
const lastValue = values[values.length - 1];
if (values.length > 0) {
form.setFieldsValue({
peer_groups: [lastValue],
});
}
};
const handleSingleChangeTags = (values: any) => {
const lastValue = values[values.length - 1];
if (values.length > 0) {
form.setFieldsValue({
peer_groups: [lastValue],
});
}
};
const handleFormSubmit = () => {
form
.validateFields()
.then(() => {
if (!setupNewRouteHA || formRoute.peer != "") {
const routeToSave = createRouteToSave(formRoute);
if (routeToSave.peer && routeToSave.peer_groups?.length === 0) {
delete routeToSave.peer_groups;
}
dispatch(
routeActions.saveRoute.request({
getAccessTokenSilently: getTokenSilently,
@@ -411,7 +413,7 @@ const RouteAddNew = () => {
fontWeight: "500",
}}
>
Peer group
Peer groups
</label>
<Paragraph
type={"secondary"}
+2
View File
@@ -472,6 +472,8 @@ const SetupKeyNew = (props: any) => {
placeholder="Associate groups with the key"
tagRender={blueTagRender}
dropdownRender={dropDownRender}
// enabled only when we have a new key !setupkey.id or when the key is valid
disabled={!(!setupKey.id || setupKey.valid)}
optionFilterProp="searchValue"
>
{tagGroups.map((m, index) => (
+10 -23
View File
@@ -79,7 +79,6 @@ const UserEdit = (props: any) => {
const [formUser, setFormUser] = useState({} as FormUser);
const [form] = Form.useForm();
const [isAdmin, setIsAdmin] = useState(false);
const [isOwner, setIsOwner] = useState(false);
const [confirmModal, confirmModalContextHolder] = Modal.useModal();
@@ -95,21 +94,15 @@ const UserEdit = (props: any) => {
};
const createUserToSave = (values: any): UserToSave => {
let autoGroups:string[] = []
if (values.autoGroupsNames) {
autoGroups =
groups
?.filter((g) => values.autoGroupsNames.includes(g.id))
.map((g) => g.id || "") || [];
}
const autoGroups =
groups
?.filter((g) => values.autoGroupsNames.includes(g.id))
.map((g) => g.id || "") || [];
// find groups that do not yet exist (newly added by the user)
const allGroupsNames: string[] = groups?.map((g) => g.id || "");
let groupsToCreate:string[] = []
if (values.autoGroupsNames) {
groupsToCreate = values.autoGroupsNames.filter(
(s: string) => !allGroupsNames.includes(s)
);
}
const groupsToCreate = values.autoGroupsNames.filter(
(s: string) => !allGroupsNames.includes(s)
);
let userID = user ? user.id : "";
let isServiceUser = user ? user?.is_service_user : false;
return {
@@ -127,8 +120,7 @@ const UserEdit = (props: any) => {
if (users) {
let currentUser = users.find((user) => user?.is_current);
if (currentUser) {
setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner");
setIsOwner(currentUser.role === "owner");
setIsAdmin(currentUser.role === "admin");
}
}
}, [users]);
@@ -411,7 +403,7 @@ const UserEdit = (props: any) => {
>
<Select
style={{ width: "100%" }}
disabled={user?.is_current || user?.role === "owner"}
disabled={user?.is_current}
>
<Option value="admin">
<Text type={"secondary"}>admin</Text>
@@ -419,11 +411,6 @@ const UserEdit = (props: any) => {
<Option value="user">
<Text type={"secondary"}>user</Text>
</Option>
{!user?.is_service_user && isOwner && (
<Option value="owner">
<Text type={"secondary"}>owner</Text>
</Option>
)}
</Select>
</Form.Item>
</Col>
@@ -486,7 +473,7 @@ const UserEdit = (props: any) => {
label="Block user"
style={{ marginRight: "50px", fontWeight: "500" }}
>
<Switch disabled={user?.role == "owner"} />
<Switch />
</Form.Item>
</Col>
)}
@@ -11,8 +11,6 @@ import MacTab from "./MacTab";
import Link from "antd/lib/typography/Link";
import DockerTab from "./DockerTab";
import AndroidTab from "./AndroidTab";
import IOSTab from "./IOSTab";
import {IOSIcon} from "./IOSIcon";
type Props = {
greeting?: string;
@@ -56,16 +54,11 @@ export const AddPeerPopup: React.FC<Props> = ({
},
{
key: "4",
label: <span data-testid="add-peer-modal-ios-tab"><IOSIcon/>iOS</span>,
children: <IOSTab/>,
},
{
key: "5",
label: <span data-testid="add-peer-modal-android-tab"><AndroidFilled/>Android</span>,
children: <AndroidTab/>,
},
{
key: "6",
key: "5",
label: <span data-testid="add-peer-modal-docker-tab"><Icon component={DockerSVG}/>Docker</span>,
children: <DockerTab/>,
}
Loaded 20 of 44 files, more files were not shown because too many files have changed in this diff. Show more