-
Notifications
You must be signed in to change notification settings - Fork 142
Crafty's Self Signed or User Self Signed Certificate not working #240
Copy link
Copy link
Open
Labels
Description
Widget link
Description
Current home.yml
- name: Home
# Optionally, if you only have a single page you can hide the desktop navigation for a cleaner look
# hide-desktop-navigation: true
columns:
- size: full
widgets:
- type: custom-api
title: Crafty Controller - Minecraft Server
cache: 5s
options:
base-url: ${CRAFTY_URL}
api-key: ${CRAFTY_API_TOKEN}
server-id: ${CRAFTY_SERVER_ID}
display-MOTD: true
allow-insecure: true
template: |
{{/* Required config options */}}
{{ $baseURL := .Options.StringOr "base-url" "" }}
{{ $apiKey := .Options.StringOr "api-key" "" }}
{{ $serverID := .Options.StringOr "server-id" "" }}
{{/* Optional config options */}}
{{ $displayMOTD := .Options.BoolOr "display-MOTD" true }}
{{ $serverStats := newRequest (print $baseURL "/api/v2/servers/" $serverID "/stats")
| withHeader "Authorization" (print "Bearer " $apiKey)
| withHeader "Accept" "application/json"
| getResponse }}
{{ $is_running := $serverStats.JSON.Bool "data.running" }}
{{ $online_players := $serverStats.JSON.Int "data.online" | formatNumber }}
{{ $max_players := $serverStats.JSON.Int "data.max" | formatNumber }}
{{ $name := $serverStats.JSON.String "data.world_name" }}
{{ $size := $serverStats.JSON.String "data.world_size" }}
{{ $version := $serverStats.JSON.String "data.version" }}
{{ $icon := $serverStats.JSON.String "data.icon" }}
{{ $server_ip := $serverStats.JSON.String "data.server_id.server_ip" }}
{{ $server_port := $serverStats.JSON.String "data.server_id.server_port" }}
{{ $motd := $serverStats.JSON.String "data.desc" }}
{{ $server_addr := "" }}
{{ if and ($is_running) (eq $server_ip "127.0.0.1") }}
{{ $server_addr = printf "%s:%s" (replaceMatches "https?://" "" $baseURL) $server_port }}
{{ else if $is_running }}
{{ $server_addr = printf "%s:%s" $server_ip $server_port }}
{{ end }}
{{ $starting := false }}
{{ if and ($is_running) (eq $max_players "0") (eq $version "False") }}
{{ $starting = true }}
{{ end }}
<!-- I couldn't find documentation describing the "waiting_start" state or the other booleans below. Implementation might not be correct. -->
{{ $updating := $serverStats.JSON.Bool "data.updating" }}
{{ $importing := $serverStats.JSON.Bool "data.importing" }}
{{ $crashed := $serverStats.JSON.Bool "data.crashed" }}
<div style="display:flex; align-items:center; gap:12px;">
<!-- Server Icon -->
<div style="width:40px; height:40px; flex-shrink:0; border-radius:4px; display:flex; justify-content:center; align-items:center; overflow:hidden;">
{{ if eq $icon "" }}
<img src="https://cdn.jsdelivr.net/gh/selfhst/icons/png/minecraft.png" style="width:100%; height:100%; object-fit:contain;" alt="Server icon">
{{ else }}
<img src="data:image/png;base64, {{ $icon }}" style="width:100%; height:100%; object-fit:contain;" alt="Server icon">
{{ end }}
</div>
<!-- Right side: Info -->
<div style="display:flex; flex-direction:column;">
<!-- First row: Server Name + IP -->
<div style="display:flex; align-items:center; gap:6px;">
<span class="size-h4 block text-truncate color-primary">
{{ $name }}
</span>
{{ if and ($is_running) (not $starting) (not (eq $server_addr "")) }}
<div style="font-size:0.9em; color:var(--color-secondary);">
<span class="size-h6 color-secondary">
- {{ $server_addr }}
</span>
</div>
{{ end }}
</div>
<!-- Second row: MOTD & Stats if server is running, otherwise show status msg ... -->
{{ if and ($is_running) (not $starting) }}
{{ if and (not (eq $motd "")) ($displayMOTD) }}
<div style="font-size:0.9em; color:var(--color-secondary);">
{{ replaceMatches "§." "" $motd }}
</div>
{{ end }}
<div style="font-size:0.9em; color:var(--color-secondary);">
{{ $version }} - {{ $online_players }}/{{ $max_players }} players - {{ $size }}
</div>
<!-- lots of assumptions about the boolean states meanings from crafty api.. -->
{{ else if $starting }}
<div style="font-size:0.9em; color:var(--color-secondary);">Server is starting up..</div>
{{ else if $importing }}
<div style="font-size:0.9em; color:var(--color-secondary);">Server is being imported..</div>
{{ else if $updating }}
<div style="font-size:0.9em; color:var(--color-secondary);">Server is being updated..</div>
{{ else if $crashed }}
<div style="font-size:0.9em; color:var(--color-secondary);">Server has crashed!</div>
{{ else }}
<div style="font-size:0.9em; color:var(--color-secondary);">Server is offline</div>
{{ end }}
</div>
</div>
sudo docker logs glance
dell@macintosh:~/glance$ sudo docker logs glance
2025/12/21 19:59:32 Starting server on :8080 (base-url: "", assets-path: "/app/assets")
2025/12/21 20:08:23 ERROR Could not fetch response within custom API template error="Get \"https://<ip>:8443/api/v2/servers/<server-id>/stats\": tls: failed to verify certificate: x509: certificate signed by unknown authority"
Also tried to copy the self-signed cert to the system CA folder.
❌ default Crafty self-signed
❌ Self-signed (Replace Crafty)
❌ Self-signed (Copy to System CA Folder)
Reactions are currently unavailable