CfnStringUtils.java

package com.cloudforgeci.api.util;

import software.amazon.awscdk.Fn;

/**
 * CloudFormation string utilities using intrinsic functions.
 *
 * @see <a href="https://github.com/aws/aws-cdk/issues/11171">CDK Issue #11171 - ALB DNS case sensitivity</a>
 */
public final class CfnStringUtils {

    private CfnStringUtils() {}

    /**
     * Convert a CloudFormation token to lowercase using Fn::Join/Fn::Split.
     *
     * <p>ALB DNS names contain mixed case (e.g., nJjqXp6M1K6T) but Cognito
     * callback URLs are case-sensitive. CloudFormation has no native Fn::ToLower.</p>
     *
     * @param value The string token to convert
     * @return A token that resolves to the lowercase string
     */
    public static String toLowerCase(String value) {
        if (value == null) return null;
        String result = value;
        for (char upper = 'A'; upper <= 'Z'; upper++) {
            char lower = (char) (upper + 32);
            result = Fn.join(String.valueOf(lower), Fn.split(String.valueOf(upper), result));
        }
        return result;
    }
}