Compare commits

...

3 Commits

Author SHA1 Message Date
Aarnav Tale a0d6905123 chore: v0.3.0 2024-09-25 16:32:58 -04:00
Aarnav Tale 4095ed2a68 docs: version the docker images 2024-09-25 16:26:19 -04:00
Aarnav Tale 58e98278d1 chore: support dns use_username_in_magic_dns config 2024-09-25 16:22:00 -04:00
11 changed files with 27 additions and 17 deletions
+4
View File
@@ -1,3 +1,7 @@
### 0.3.0 (September 25, 2024)
- Bumped the minimum supported version of Headscale to 0.23.
- Updated the UI to respect `dns.use_username_in_magic_dns`.
### 0.2.4 (August 24, 2024) ### 0.2.4 (August 24, 2024)
- Removed ACL management from the integration since Headscale 0.23-beta2 now supports it natively. - Removed ACL management from the integration since Headscale 0.23-beta2 now supports it natively.
- Removed the `ACL_FILE` environment variable since it's no longer needed. - Removed the `ACL_FILE` environment variable since it's no longer needed.
+1 -1
View File
@@ -28,7 +28,7 @@ export default function Modal({ name, disabled }: Properties) {
Devices are accessible at Devices are accessible at
{' '} {' '}
<Code> <Code>
[device].[user].{name} [device].{name}
</Code> </Code>
{' '} {' '}
when Magic DNS is enabled. when Magic DNS is enabled.
+4 -2
View File
@@ -25,7 +25,9 @@ export async function loader() {
const dns = { const dns = {
prefixes: config.prefixes, prefixes: config.prefixes,
magicDns: config.dns.magic_dns, magicDns: config.dns.magic_dns,
baseDomain: config.dns.base_domain, baseDomain: config.dns.use_username_in_magic_dns
? `[user].${config.dns.base_domain}`
: config.dns.base_domain,
nameservers: config.dns.nameservers.global, nameservers: config.dns.nameservers.global,
splitDns: config.dns.nameservers.split, splitDns: config.dns.nameservers.split,
searchDomains: config.dns.search_domains, searchDomains: config.dns.search_domains,
@@ -107,7 +109,7 @@ export default function Page() {
on the tailnet. Devices will be accessible at on the tailnet. Devices will be accessible at
{' '} {' '}
<Code> <Code>
[device].[user]. [device].
{data.baseDomain} {data.baseDomain}
</Code> </Code>
{' '} {' '}
+6 -4
View File
@@ -31,6 +31,10 @@ export default function MachineRow({ machine, routes, magic, users }: Props) {
tags.unshift('Expired') tags.unshift('Expired')
} }
let prefix = magic?.startsWith('[user]')
? magic.replace('[user]', machine.user.name)
: magic
return ( return (
<tr <tr
key={machine.id} key={machine.id}
@@ -102,16 +106,14 @@ export default function MachineRow({ machine, routes, magic, users }: Props) {
'justify-between w-full break-keep', 'justify-between w-full break-keep',
)} )}
onPress={async () => { onPress={async () => {
const ip = `${machine.givenName}.${machine.user.name}.${magic}` const ip = `${machine.givenName}.${prefix}`
await navigator.clipboard.writeText(ip) await navigator.clipboard.writeText(ip)
toast('Copied hostname to clipboard') toast('Copied hostname to clipboard')
}} }}
> >
{machine.givenName} {machine.givenName}
. .
{machine.user.name} {prefix}
.
{magic}
<CopyIcon className="w-3 h-3" /> <CopyIcon className="w-3 h-3" />
</Menu.ItemButton> </Menu.ItemButton>
) )
+5 -1
View File
@@ -32,6 +32,10 @@ export async function loader({ request }: LoaderFunctionArgs) {
if (config.dns.magic_dns) { if (config.dns.magic_dns) {
magic = config.dns.base_domain magic = config.dns.base_domain
} }
if (config.dns.use_username_in_magic_dns) {
magic = `[user].${magic}`
}
} }
return { return {
@@ -76,7 +80,7 @@ export default function Page() {
based on their name and also at based on their name and also at
{' '} {' '}
<Code> <Code>
[name].[user]. [name].
{data.magic} {data.magic}
</Code> </Code>
</Tooltip> </Tooltip>
-1
View File
@@ -36,7 +36,6 @@ export default function Add({ magic }: Props) {
{' '} {' '}
<Code> <Code>
[machine]. [machine].
{username.length > 0 ? username : '[username]'}
. .
{magic} {magic}
</Code> </Code>
-1
View File
@@ -59,7 +59,6 @@ export default function Rename({ username, magic }: Props) {
{' '} {' '}
<Code> <Code>
[machine]. [machine].
{newName.length > 0 ? newName : '[new-username]'}
. .
{magic} {magic}
</Code> </Code>
+1 -1
View File
@@ -61,7 +61,7 @@ ACLs when the file is changed.
## Deployment ## Deployment
Requirements: Requirements:
- Headscale 0.23 beta-2 or later - Headscale 0.23 or newer
- Headscale and Headplane need a Reverse Proxy (NGINX, Traefik, Caddy, etc) - Headscale and Headplane need a Reverse Proxy (NGINX, Traefik, Caddy, etc)
Currently there are 3 integration providers that can do this for you: Currently there are 3 integration providers that can do this for you:
+2 -2
View File
@@ -16,7 +16,7 @@ Headplane in a production environment.
## Deployment ## Deployment
Requirements: Requirements:
- Headscale 0.23 beta-2 or later - Headscale 0.23 or newer
- Headscale and Headplane need a Reverse Proxy (NGINX, Traefik, Caddy, etc) - Headscale and Headplane need a Reverse Proxy (NGINX, Traefik, Caddy, etc)
Docker heavily simplifies the deployment process, but this process can be Docker heavily simplifies the deployment process, but this process can be
@@ -29,7 +29,7 @@ Here is a simple Docker Compose deployment:
services: services:
headplane: headplane:
container_name: headplane container_name: headplane
image: ghcr.io/tale/headplane:latest image: ghcr.io/tale/headplane:0.3.0
restart: unless-stopped restart: unless-stopped
ports: ports:
- '3000:3000' - '3000:3000'
+2 -2
View File
@@ -37,7 +37,7 @@ that you'll NEED to setup a reverse proxy and this is incomplete:
```yaml ```yaml
services: services:
headscale: headscale:
image: 'headscale/headscale:0.23.0-beta2' image: 'headscale/headscale:0.23.0'
container_name: 'headscale' container_name: 'headscale'
restart: 'unless-stopped' restart: 'unless-stopped'
command: 'serve' command: 'serve'
@@ -50,7 +50,7 @@ services:
TZ: 'America/New_York' TZ: 'America/New_York'
headplane: headplane:
container_name: headplane container_name: headplane
image: ghcr.io/tale/headplane:latest image: ghcr.io/tale/headplane:0.3.0
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- './data:/var/lib/headscale' - './data:/var/lib/headscale'
+2 -2
View File
@@ -88,7 +88,7 @@ spec:
serviceAccountName: default serviceAccountName: default
containers: containers:
- name: headplane - name: headplane
image: ghcr.io/tale/headplane:latest image: ghcr.io/tale/headplane:0.3.0
env: env:
- name: COOKIE_SECRET - name: COOKIE_SECRET
value: 'abcdefghijklmnopqrstuvwxyz' value: 'abcdefghijklmnopqrstuvwxyz'
@@ -107,7 +107,7 @@ spec:
mountPath: /etc/headscale mountPath: /etc/headscale
- name: headscale - name: headscale
image: headscale/headscale:0.23.0-beta2 image: headscale/headscale:0.23.0
command: ['serve'] command: ['serve']
env: env:
- name: TZ - name: TZ