CLI documentation

Why OpenCloud still answers /status.php

The PHP-era compatibility endpoint OpenCloud still serves, its hardcoded fields, and what this scanner reads from it.

OpenCloud is written in Go. Its /status.php route is a compatibility endpoint for existing clients, not a PHP script.

Where the path comes from

The endpoint preserves a familiar client interface while OpenCloud serves it from Go code. The .php suffix does not imply that PHP runs on the server. Several products expose a compatible endpoint, so the scanner checks the reported product before applying OpenCloud-specific rules. See What OpenCloud is for the architecture and Troubleshooting for product-identification failures.

// vendor/github.com/opencloud-eu/reva/v2/internal/http/services/owncloud/ocdav/ocdav.go
return []string{"/status.php", "/status", "/remote.php/dav/public-files/", ...}
...
case "status.php", "status":
    s.doStatus(w, r)

Both /status.php and the shorter /status reach the same handler. The .php spelling is kept only because clients still ask for it by that exact name; nothing about the response is generated by PHP.

What the handler actually returns

The handler that answers both paths is doStatus, and its response is a struct literal, not a query against any live state:

// vendor/github.com/opencloud-eu/reva/v2/internal/http/services/owncloud/ocdav/status.go
status := &ocs.Status{
    Installed:      true,
    Maintenance:    false,
    NeedsDBUpgrade: false,
    Version:        s.c.Version,
    VersionString:  s.c.VersionString,
    Edition:        s.c.Edition,
    ProductName:    s.c.ProductName,
    ProductVersion: s.c.ProductVersion,
    Product:        s.c.Product,
}

Installed, Maintenance and NeedsDBUpgrade are literal true/false/ false - not s.c.something, not read from a database, not read from a file on disk. Every OpenCloud instance that has ever shipped this handler returns exactly the same three values for them, regardless of whether it just started, is mid-deployment, or has been running for a year. OpenCloud has no database in the sense the field name implies either: it stores data in the filesystem and object storage backends, not a schema-migrated SQL database, so "needsDbUpgrade" describes a state OpenCloud's own architecture does not have.

The remaining fields - Version, VersionString, Edition, ProductName, ProductVersion, Product - come from s.c, the service's own configuration, and do vary by build. Version and VersionString are themselves fixed legacy placeholders kept for old sync clients; only ProductVersion is the real release - see Reading the version correctly.

What this scanner reads from it, and what it does not

This scanner reads product/productname (to refuse ownCloud and Nextcloud rather than rate them) and productversion (the actual release, used for the end-of-life and update checks - see Version and lifecycle disclosure for what depends on that field, and how the scan copes when it is missing). It does not check installed, maintenance, or needsDbUpgrade: a check that always passes - regardless of what is actually happening on the server - would be worse than no check at all, because a green result would imply the scanner had verified something it could not possibly have observed. Earlier releases of this scanner did report maintenanceMode, installed and databaseUpgrade findings from these fields; they were removed once the hardcoded response above was confirmed against OpenCloud's own source.

If a future OpenCloud release starts computing these fields from real state, the source above is the place to check - it is the authoritative answer, not this document, which only quotes it at the time of writing.