Skip to content

[Hoch] Feature-Flags wirkungslos: Flagception 6 wertet nur PHP-Attribute aus, Controller nutzen Docblock-Annotationen #535

Description

@maltehuebner

Problem

Die Controller „schützen" Routen mit Docblock-Annotationen:

// src/Controller/AnalysisController.php:16-18 (Klasse), 21-23, 43-45, 61-63
/**
 * @Feature("analysis_komfortofen")
 */
public function komfortofenAction(...)

ebenso src/Controller/StationController.php:57-59 (@Feature("station_history")).

Installiert ist flagception/flagception-bundle 6.1, dessen einziger Controller-Listener vendor/flagception/flagception-bundle/src/Listener/AttributeSubscriber.php ausschließlich native PHP-Attribute liest ($object->getAttributes(Feature::class, ReflectionAttribute::IS_INSTANCEOF)). Einen Annotation-Reader gibt es nicht mehr, doctrine/annotations ist nicht installiert. Alle fünf @Feature-Annotationen sind damit stillschweigend wirkungslos.

Beweis

config/packages/flagception.yaml setzt analysis_fireworks: false, analysis_komfortofen: false, station_history: false → die Routen müssten 404 liefern. Tatsächlich antworten /komfortofen und /analysis/silvester mit 500 (Controller wird ausgeführt und crasht, siehe Elastica-Issue) statt 404 — der Flag-Check findet nie statt.

Zusätzlicher Flag-Namens-Mismatch

  • config/packages/flagception.yaml definiert analysis_fireworks_corona: true; der Menülink wird über feature('analysis_fireworks_corona') eingeblendet (templates/Includes/menu.html.twig:74-80).
  • AnalysisController::coronaFireworksAction (Z. 61–63) ist aber mit @Feature("analysis_fireworks") (= false) annotiert.
  • Konsequenz: Bei einer naiven 1:1-Konvertierung zu Attributen würde die einzige verlinkte und funktionierende Analyse-Seite (/analysis/corona-silvester) plötzlich 404 liefern.

Die Twig-Seite funktioniert korrekt (feature()-Aufrufe in menu.html.twig:59,66,74 und Default/station.html.twig:33 verstecken die Links) — das kaschiert den Bug nur.

Kontext/Risiko

Feature-Flags sind das einzige Gate vor unfertigen/kaputten Seiten. Aktuell sind per Flag deaktivierte Features öffentlich erreichbar; umgekehrt kann man Features nicht mehr per Flag abschalten (z. B. im Incident-Fall). Da drei der „geschützten" Seiten fatale Fehler werfen, ist das direkt produktionsrelevant.

Aufgaben

  • Alle @Feature("…")-Docblocks in #[Feature('…')]-Attribute umwandeln (Flagception\Bundle\FlagceptionBundle\Attribute\Feature) — AnalysisController (4×), StationController (1×)
  • Flag-Namen konsolidieren: coronaFireworksActionanalysis_fireworks_corona (oder Config-Flag umbenennen), totes/inkonsistentes Flag bereinigen
  • Verifizieren: deaktiviertes Flag ⇒ 404 (Functional-Test je geflaggter Route, siehe Test-Issue)
  • Prüfen, ob station_history/analysis_* nach Reparatur (Elastica-Issue) wieder aktiviert werden sollen

Abhängigkeiten

Eng verzahnt mit dem Issue „Sechs Routen liefern garantiert HTTP 500"; Erreichbarkeits-/Härtungskontext: #521, #526.

Metadata

Metadata

Assignees

No one assigned

    Labels

    AI-generatedbugphpPull requests that update Php codesecuritySicherheitsrelevanter Befund

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions