FileExtensionEvaluator.java

/*
 * SPDX-License-Identifier: Apache-2.0
 * Copyright 2026 Nikolas Charalambidis
 */

package dev.nichar.facepalm.engine.evaluator;

import dev.nichar.facepalm.FacepalmConfig;
import dev.nichar.facepalm.engine.FileContext;
import dev.nichar.facepalm.engine.Finding;
import jakarta.annotation.Nonnull;
import java.util.Locale;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;

/**
 * Evaluates findings based on file extensions.
 * Prioritizes sensitive configuration formats and discounts findings in documentation or logs.
 */
@Named
@Singleton
class FileExtensionEvaluator implements FindingEvaluator {

    @Inject
    private FacepalmConfig config;

    @Override
    public void evaluate(@Nonnull final Finding finding, @Nonnull final FileContext context) {
        final var fileName = context.getPath().getFileName().toString().toLowerCase(Locale.ROOT);

        // Elevate risk for sensitive formats like .env or .properties.
        if (config.getEvaluators().getHighRiskExtensions().stream().anyMatch(fileName::endsWith)) {
            finding.log("High Risk Configuration File", 15, 20);
        }
        // Discount findings in low-risk files like documentation or logs.
        else if (config.getEvaluators().getLowRiskExtensions().stream().anyMatch(fileName::endsWith)) {
            finding.log("Documentation/Log File", -30, -40);
        }
    }
}