update
This commit is contained in:
+12
-5
@@ -23,12 +23,14 @@ var (
|
||||
)
|
||||
hexCredentialPattern = regexp.MustCompile(`^[0-9a-f]{64}$`)
|
||||
fleetValuePattern = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9._+~,:/() -]*$`)
|
||||
fleetHostnamePattern = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9._-]{0,252}$`)
|
||||
errorCodePattern = regexp.MustCompile(`^[a-z0-9][a-z0-9_-]*$`)
|
||||
)
|
||||
|
||||
type fleetRequest struct {
|
||||
SchemaVersion int `json:"schema_version"`
|
||||
InstallationID string `json:"installation_id"`
|
||||
Hostname string `json:"hostname,omitempty"`
|
||||
Credential string `json:"credential,omitempty"`
|
||||
Event string `json:"event,omitempty"`
|
||||
Result string `json:"result,omitempty"`
|
||||
@@ -45,6 +47,7 @@ type fleetRequest struct {
|
||||
|
||||
type fleetHostRecord struct {
|
||||
InstallationID string
|
||||
Hostname string
|
||||
VerifiedAt sql.NullTime
|
||||
FirstSeenAt time.Time
|
||||
LastSeenAt time.Time
|
||||
@@ -163,12 +166,14 @@ func decodeFleetRequest(w http.ResponseWriter, r *http.Request, registration boo
|
||||
return request, false
|
||||
}
|
||||
request.InstallationID = strings.ToLower(strings.TrimSpace(request.InstallationID))
|
||||
request.Hostname = strings.TrimSpace(request.Hostname)
|
||||
request.Credential = strings.ToLower(strings.TrimSpace(request.Credential))
|
||||
request.Event = strings.TrimSpace(request.Event)
|
||||
request.Result = strings.TrimSpace(request.Result)
|
||||
request.ErrorCode = strings.TrimSpace(request.ErrorCode)
|
||||
if request.SchemaVersion != 1 ||
|
||||
!installationIDPattern.MatchString(request.InstallationID) ||
|
||||
(request.Hostname != "" && !fleetHostnamePattern.MatchString(request.Hostname)) ||
|
||||
(registration && !hexCredentialPattern.MatchString(request.Credential)) ||
|
||||
!validFleetMetadata(request) {
|
||||
writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid host data"})
|
||||
@@ -233,11 +238,11 @@ func (s *Server) insertFleetHost(
|
||||
if _, err := tx.ExecContext(
|
||||
ctx,
|
||||
`INSERT INTO fleet_hosts
|
||||
(installation_id, credential_hash, registration_source_hash,
|
||||
(installation_id, hostname, credential_hash, registration_source_hash,
|
||||
proxmenu_version, git_commit, pve_version, os_version,
|
||||
kernel_version, architecture, clustered)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
request.InstallationID, credentialHash, sourceHash,
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
request.InstallationID, request.Hostname, credentialHash, sourceHash,
|
||||
request.ProxMenuVersion, request.GitCommit, request.PVEVersion,
|
||||
request.OSVersion, request.KernelVersion, request.Architecture,
|
||||
request.Clustered,
|
||||
@@ -272,6 +277,7 @@ func (s *Server) updateFleetHost(ctx context.Context, request fleetRequest, reco
|
||||
last_event = CASE WHEN ? THEN ? ELSE last_event END,
|
||||
last_result = CASE WHEN ? THEN ? ELSE last_result END,
|
||||
last_error_code = CASE WHEN ? THEN ? ELSE last_error_code END,
|
||||
hostname = CASE WHEN ? <> '' THEN ? ELSE hostname END,
|
||||
proxmenu_version = ?,
|
||||
git_commit = ?,
|
||||
pve_version = ?,
|
||||
@@ -285,6 +291,7 @@ func (s *Server) updateFleetHost(ctx context.Context, request fleetRequest, reco
|
||||
recordEvent, request.Event,
|
||||
recordEvent, request.Result,
|
||||
recordEvent, request.ErrorCode,
|
||||
request.Hostname, request.Hostname,
|
||||
request.ProxMenuVersion, request.GitCommit, request.PVEVersion,
|
||||
request.OSVersion, request.KernelVersion, request.Architecture,
|
||||
request.Clustered, request.InstallationID,
|
||||
@@ -338,7 +345,7 @@ func (s *Server) verifyFleetInstallation(ctx context.Context, installationID str
|
||||
func (s *Server) listFleetHosts(r *http.Request) ([]fleetHostRecord, error) {
|
||||
rows, err := s.db.QueryContext(
|
||||
r.Context(),
|
||||
`SELECT installation_id, verified_at, first_seen_at, last_seen_at,
|
||||
`SELECT installation_id, hostname, verified_at, first_seen_at, last_seen_at,
|
||||
last_success_at, last_event, last_result, last_error_code,
|
||||
proxmenu_version, git_commit, pve_version, os_version,
|
||||
kernel_version, architecture, clustered
|
||||
@@ -354,7 +361,7 @@ func (s *Server) listFleetHosts(r *http.Request) ([]fleetHostRecord, error) {
|
||||
for rows.Next() {
|
||||
var record fleetHostRecord
|
||||
if err := rows.Scan(
|
||||
&record.InstallationID, &record.VerifiedAt, &record.FirstSeenAt,
|
||||
&record.InstallationID, &record.Hostname, &record.VerifiedAt, &record.FirstSeenAt,
|
||||
&record.LastSeenAt, &record.LastSuccessAt, &record.LastEvent,
|
||||
&record.LastResult, &record.LastErrorCode, &record.ProxMenuVersion,
|
||||
&record.GitCommit, &record.PVEVersion, &record.OSVersion,
|
||||
|
||||
Reference in New Issue
Block a user