CasCustomConfiguration.java

/*
 * Copyright (c) 2007-2026 MetaSolutions AB
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.entrystore.rest.springboot.configuration;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.bind.DefaultValue;

@ConfigurationProperties(prefix = "entrystore.auth.cas")
public record CasCustomConfiguration(
		@DefaultValue("false") boolean enabled,
		@DefaultValue("CAS2") CasVersion version,
		Server server,
		@DefaultValue("false") boolean userAutoProvisioning,
		RedirectSuccess redirectSuccess,
		RedirectFailure redirectFailure
) {
	public CasCustomConfiguration {
		if (server == null) server = new Server(null, null);
		if (redirectSuccess == null) redirectSuccess = new RedirectSuccess("/auth/user");
		if (redirectFailure == null) redirectFailure = new RedirectFailure("/auth/user");
		if (enabled && (server.url() == null || server.url().isBlank())) {
			throw new IllegalArgumentException(
					"CAS is enabled (entrystore.auth.cas.enabled=true) but entrystore.auth.cas.server.url is not configured");
		}
	}

	public record Server(String url, String urlLogin) {
		public String resolvedLoginUrl() {
			if (urlLogin != null) return urlLogin;
			if (url == null) return null;
			return url.endsWith("/") ? url + "login" : url + "/login";
		}
	}

	public record RedirectSuccess(String url) {}
	public record RedirectFailure(String url) {}
}