[release] v0.23.0-unstable009

This commit is contained in:
Yann Stepienik
2026-08-24 14:21:51 +01:00
parent 4650efa099
commit 0d3e499a4e
15 changed files with 441 additions and 369 deletions
+2 -3
View File
@@ -4,7 +4,7 @@
"description": "REST API for Cosmos Cloud server management",
"title": "Cosmos Server API",
"contact": {},
"version": "0.23.0-unstable008"
"version": "0.23.0-unstable009"
},
"paths": {
"/_logs": {
@@ -10741,8 +10741,7 @@
"constellation.DeviceBlockRequestJSON": {
"type": "object",
"required": [
"deviceName",
"nickname"
"deviceName"
],
"properties": {
"block": {
+2 -3
View File
@@ -4,7 +4,7 @@
"description": "REST API for Cosmos Cloud server management",
"title": "Cosmos Server API",
"contact": {},
"version": "0.23.0-unstable008"
"version": "0.23.0-unstable009"
},
"basePath": "/cosmos",
"paths": {
@@ -8796,8 +8796,7 @@
"constellation.DeviceBlockRequestJSON": {
"type": "object",
"required": [
"deviceName",
"nickname"
"deviceName"
],
"properties": {
"block": {
+1 -2
View File
@@ -115,7 +115,6 @@ definitions:
type: string
required:
- deviceName
- nickname
type: object
constellation.DeviceCreateRequestJSON:
properties:
@@ -2067,7 +2066,7 @@ info:
contact: {}
description: REST API for Cosmos Cloud server management
title: Cosmos Server API
version: 0.23.0-unstable008
version: 0.23.0-unstable009
paths:
/_logs:
get:
+308 -308
View File
@@ -291,9 +291,9 @@ type ConfigapiUpdateRouteRequest struct {
// ConstellationDeviceBlockRequestJSON defines model for constellation.DeviceBlockRequestJSON.
type ConstellationDeviceBlockRequestJSON struct {
Block *bool `json:"block,omitempty"`
DeviceName string `json:"deviceName"`
Nickname string `json:"nickname"`
Block *bool `json:"block,omitempty"`
DeviceName string `json:"deviceName"`
Nickname *string `json:"nickname,omitempty"`
}
// ConstellationDeviceCreateRequestJSON defines model for constellation.DeviceCreateRequestJSON.
@@ -36461,7 +36461,7 @@ func ParsePostRcloneVfsStatsResponse(rsp *http.Response) (*PostRcloneVfsStatsRes
// const string: with thousands of chunks the chained `+` fold is several
// times slower for the Go compiler than parsing a slice literal.
var swaggerSpec = []string{
"7L3rcts41ij6KiidXdVOlSyn0z1ffZOq/cOx7G7PxI6P5GRq73EqGyKXJLRJgAOActSpVJ2HOE94nuQU",
"7L3rcts41ij6KiidXdVOlSyn0z1f7UnV/uFYdrdnYsdHcjK19ziVDyKXJLRJgAOActSpVJ2HOE94nuQU",
"FkCKlACJlO3ETvPHTDsi7lg3rOuXXiTSTHDgWvVef+lJ+E8OSr8RMQP84Y2Il+a/keAauDZ/0ixLWEQ1",
"E/zoDyW4+U1Fc0ip+UsvM+i97onJHxDp3tevX/u9GFQkWWY69F733uEXcsf0nEwVmTJIYqIyiNh0yfiM",
"6DkQCanQ0OvjepiEuPdayxy+9nuRFHzwDzEZ2YX+Y/zustXy/oeEae917/86Wu37yH5VR76xPRv4h5gQ",
@@ -36474,310 +36474,310 @@ var swaggerSpec = []string{
"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",
}
// decodeSpec returns the embedded OpenAPI spec as raw JSON bytes,
+1 -1
View File
@@ -1,4 +1,4 @@
package cosmossdk
// Version is the SDK version, synced with Cosmos Server at build time.
const Version = "0.23.0-unstable008"
const Version = "0.23.0-unstable009"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "cosmos-server",
"version": "0.23.0-unstable008",
"version": "0.23.0-unstable009",
"description": "",
"main": "test-server.js",
"bugs": {
+89 -33
View File
@@ -3,40 +3,98 @@ package configapi
import (
"net/http"
"encoding/json"
"reflect"
"github.com/azukaar/cosmos-server/src/constellation"
"github.com/azukaar/cosmos-server/src/utils"
)
// publishReplicatedDomains publishes the four op-log domains this whole-config
// PUT can touch. Full-state ops are idempotent, so publishing all four
// unconditionally is cheaper than diffing and cannot miss a change. APITokens and
// the auth keypair are restored from disk above, so they are not editable here.
func publishReplicatedDomains(request utils.Config) error {
c := request.ConstellationConfig
err := constellation.PublishDomainOp(constellation.DomainDNS, constellation.DNSPayload{
DNSPort: c.DNSPort,
DNSFallback: c.DNSFallback,
DNSBlockBlacklist: c.DNSBlockBlacklist,
DNSAdditionalBlocklists: c.DNSAdditionalBlocklists,
CustomDNSEntries: c.CustomDNSEntries,
})
if err != nil {
return err
// publishReplicatedDomains publishes only the domains this PUT changed, so a
// node without a writable op-log can still save node-local settings.
func publishReplicatedDomains(request utils.Config, current utils.Config) error {
newDNS := dnsPayloadOf(request)
if !reflect.DeepEqual(newDNS, dnsPayloadOf(current)) {
if err := constellation.PublishDomainOp(constellation.DomainDNS, newDNS); err != nil {
return err
}
}
if err := constellation.PublishDomainOp(constellation.DomainRoles, request.Roles); err != nil {
return err
if !sameRoles(request.Roles, current.Roles) {
if err := constellation.PublishDomainOp(constellation.DomainRoles, request.Roles); err != nil {
return err
}
}
if err := constellation.PublishDomainOp(constellation.DomainOpenIDClients, request.OpenIDClients); err != nil {
return err
if !sameOpenIDClients(request.OpenIDClients, current.OpenIDClients) {
if err := constellation.PublishDomainOp(constellation.DomainOpenIDClients, request.OpenIDClients); err != nil {
return err
}
}
// the real password, restored above — publishing before that restore would send
// the literal "***" to every node
return constellation.PublishDomainOp(constellation.DomainDatabase, constellation.DatabasePayload{
PostgresHost: request.Database.PostgresHost,
PostgresDatabase: request.Database.PostgresDatabase,
PostgresUsername: request.Database.PostgresUsername,
PostgresPassword: request.Database.PostgresPassword,
})
// caller restored the real password; publishing earlier would replicate "***"
newDB := dbPayloadOf(request)
if !reflect.DeepEqual(newDB, dbPayloadOf(current)) {
return constellation.PublishDomainOp(constellation.DomainDatabase, newDB)
}
return nil
}
// slices are normalized to nil so a UI []-for-null round-trip never looks like a change
func dnsPayloadOf(c utils.Config) constellation.DNSPayload {
cc := c.ConstellationConfig
blocklists := cc.DNSAdditionalBlocklists
if len(blocklists) == 0 {
blocklists = nil
}
entries := cc.CustomDNSEntries
if len(entries) == 0 {
entries = nil
}
return constellation.DNSPayload{
DNSPort: cc.DNSPort,
DNSFallback: cc.DNSFallback,
DNSBlockBlacklist: cc.DNSBlockBlacklist,
DNSAdditionalBlocklists: blocklists,
CustomDNSEntries: entries,
}
}
func dbPayloadOf(c utils.Config) constellation.DatabasePayload {
return constellation.DatabasePayload{
PostgresHost: c.Database.PostgresHost,
PostgresDatabase: c.Database.PostgresDatabase,
PostgresUsername: c.Database.PostgresUsername,
PostgresPassword: c.Database.PostgresPassword,
}
}
// nil and empty are the same thing here: JSON round-trips blur them
func sameRoles(a, b map[utils.Role]utils.RoleConfig) bool {
if len(a) != len(b) {
return false
}
for k, ra := range a {
rb, ok := b[k]
if !ok || ra.Name != rb.Name || !samePermissions(ra.Permissions, rb.Permissions) {
return false
}
}
return true
}
func samePermissions(a, b []utils.Permission) bool {
if len(a) != len(b) {
return false
}
for i := range a {
if a[i] != b[i] {
return false
}
}
return true
}
func sameOpenIDClients(a, b []utils.OpenIDClient) bool {
if len(a) == 0 && len(b) == 0 {
return true
}
return reflect.DeepEqual(a, b)
}
// restoreReplicatedDomains takes the replicated fields from the freshly applied
@@ -156,12 +214,10 @@ func ConfigApiSet(w http.ResponseWriter, req *http.Request) {
}
}
// Replicated domains go through the op-log, never straight to disk. Published
// BEFORE the local write so a read-only node fails here with nothing written,
// rather than leaving a node-local edit the log will never hear about and the
// next snapshot will silently discard. ConfigLock must NOT be held across
// these — the apply loop takes it to install the op we are waiting on.
if err := publishReplicatedDomains(request); err != nil {
// Replicated domains go through the op-log, never straight to disk, and are
// published BEFORE the local write so a read-only node fails with nothing
// written. ConfigLock must NOT be held — the apply loop takes it.
if err := publishReplicatedDomains(request, config); err != nil {
utils.HTTPStoreError(w, err, "UC004")
return
}
+5 -3
View File
@@ -82,11 +82,13 @@ func tunneledHostnames() map[string]bool {
local[hostOnly(route.Host)] = true
continue
}
tunneled[hostOnly(route.Host)] = true
// GetAllTunneledRoutes publishes TunneledHost as the public Host
if usableHost(route.TunneledHost) {
// overridden exit serves only TunneledHost; the origin still serves Host
if tunnelHostOverridden(route) {
local[hostOnly(route.Host)] = true
tunneled[hostOnly(route.TunneledHost)] = true
continue
}
tunneled[hostOnly(route.Host)] = true
}
for host := range local {
+9 -1
View File
@@ -8,7 +8,7 @@ import (
)
type DeviceBlockRequestJSON struct {
Nickname string `json:"nickname" validate:"required,min=3,max=32"`
Nickname string `json:"nickname" validate:"omitempty,min=3,max=32"`
DeviceName string `json:"deviceName" validate:"required,min=3,max=32"`
Block bool `json:"block,omitempty"`
}
@@ -66,6 +66,14 @@ func DeviceBlock(w http.ResponseWriter, req *http.Request) {
return
}
// managers (CosmosNode == 2) cannot be blocked; agents (1) and clients (0) can
if request.Block && device.CosmosNode == 2 {
utils.Error("DeviceBlocking: Attempt to block a manager server", nil)
utils.HTTPError(w, "Constellation Error: " + deviceName + " is a manager server and cannot be blocked. Remove it from the Constellation instead.",
http.StatusBadRequest, "DB003")
return
}
err3 := utils.UpdateDevices(map[string]interface{}{
"DeviceName": deviceName,
}, map[string]interface{}{
+8 -9
View File
@@ -9,7 +9,7 @@ import (
)
type DeviceResyncRequest struct {
Nickname string `json:"nickname" validate:"required,max=32"`
Nickname string `json:"nickname" validate:"omitempty,max=32"`
DeviceName string `json:"deviceName" validate:"required,min=3,max=32"`
}
@@ -33,15 +33,9 @@ func GetDeviceConfigManualSync(w http.ResponseWriter, req *http.Request) {
return
}
nickname := utils.Sanitize(request.Nickname)
deviceName := utils.Sanitize(request.DeviceName)
if utils.CheckPermissionsOrSelf(w, req, nickname, utils.PERM_RESOURCES) != nil {
return
}
devices, err := utils.FindDevices(map[string]interface{}{
"Nickname": nickname,
"DeviceName": deviceName,
})
if err != nil {
@@ -55,9 +49,14 @@ func GetDeviceConfigManualSync(w http.ResponseWriter, req *http.Request) {
return
}
utils.Log("DeviceConfigManualSync: Resync Device " + deviceName)
d := devices[0]
// authorize against the device's actual nickname, not the request-supplied one
if utils.CheckPermissionsOrSelf(w, req, d.Nickname, utils.PERM_RESOURCES) != nil {
return
}
utils.Log("DeviceConfigManualSync: Resync Device " + deviceName)
d.PublicKey = ""
d.APIKey = ""
configYml, err := getYAMLClientConfig(d.DeviceName, utils.CONFIGFOLDER + "nebula.yml", "", "", "", "", d, true, true)
+11 -1
View File
@@ -21,6 +21,12 @@ func usableHost(host string) bool {
return host != "" && !strings.Contains(host, ",") && !strings.Contains(host, " ")
}
// tunnelHostOverridden reports whether the tunnel exit serves TunneledHost instead of Host.
func tunnelHostOverridden(route utils.ProxyRouteConfig) bool {
return usableHost(route.TunneledHost) &&
!strings.EqualFold(hostOnly(route.TunneledHost), hostOnly(route.Host))
}
// localHostnames lists the names this node serves itself (main hostname and
// non-tunneled routes), advertised in the heartbeat so every DNS can answer
func localHostnames() []string {
@@ -39,7 +45,11 @@ func localHostnames() []string {
add(config.HTTPConfig.Hostname)
for _, route := range config.HTTPConfig.ProxyConfig.Routes {
if route.UseHost && route.Tunnel == "" {
if !route.UseHost {
continue
}
// overridden exit serves only TunneledHost, so the origin advertises Host
if route.Tunnel == "" || tunnelHostOverridden(route) {
add(route.Host)
}
}
+2 -1
View File
@@ -20,12 +20,13 @@ func TestUnitLocalHostnames(t *testing.T) {
{Name: "plain", UseHost: true, Host: "plain.local:8443"},
{Name: "dup", UseHost: true, Host: "plain.local"},
{Name: "tunneled", UseHost: true, Host: "tunneled.local", Tunnel: "_ANY_"},
{Name: "aliased", UseHost: true, Host: "private.local", TunneledHost: "public.local:8443", Tunnel: "_ANY_"},
{Name: "nohost", UseHost: false, Host: "ignored.local"},
{Name: "multi", UseHost: true, Host: "a.local, b.local"},
}
})
want := []string{"cosmos.local", "plain.local"}
want := []string{"cosmos.local", "plain.local", "private.local"}
if got := localHostnames(); !reflect.DeepEqual(got, want) {
t.Errorf("localHostnames() = %v, want %v", got, want)
}
@@ -72,7 +72,6 @@ func TestUnitTunneledHostnames(t *testing.T) {
want := map[string]bool{
"lbtest.constellation": true,
"ported.constellation": true,
"private.local": true,
"public.constellation": true,
}
+1 -1
View File
@@ -206,7 +206,7 @@ func main() {
}
// @title Cosmos Server API
// @version 0.23.0-unstable008
// @version 0.23.0-unstable009
// @description REST API for Cosmos Cloud server management
// @BasePath /cosmos
// @securityDefinitions.apikey BearerAuth
+1 -1
View File
@@ -345,7 +345,7 @@ func HTTPStoreError(w http.ResponseWriter, err error, userCode string) {
var ec *ErrConstraint
switch {
case errors.Is(err, ErrReadOnly):
HTTPError(w, "Configuration is read-only: no writable op-log (no quorum)", http.StatusConflict, userCode)
HTTPError(w, "Cannot save synchronized settings: the Constellation cluster is unreachable or degraded", http.StatusConflict, userCode)
case errors.Is(err, ErrApplyTimeout):
HTTPError(w, "Timed out waiting for the change to be applied", http.StatusServiceUnavailable, userCode)
case errors.As(err, &ec):