All Downloads are FREE. Search and download functionalities are using the official Maven repository.

am.ik.home.cloudfoundry.broker.UaaServiceInstanceService Maven / Gradle / Ivy

Go to download

Single tenant simple OAuth 2 Server a.k.a. Maki UAA (User Account and Authentication)

The newest version!
package am.ik.home.cloudfoundry.broker;

import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import org.springframework.cloud.servicebroker.model.*;
import org.springframework.cloud.servicebroker.service.ServiceInstanceService;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import am.ik.home.app.App;
import am.ik.home.app.AppGrantType;
import am.ik.home.app.AppRepository;
import am.ik.home.app.AppRole;
import lombok.RequiredArgsConstructor;

@Component
@RequiredArgsConstructor
public class UaaServiceInstanceService implements ServiceInstanceService {
	private final AppRepository appRepository;

	@Override
	public CreateServiceInstanceResponse createServiceInstance(
			CreateServiceInstanceRequest request) {
		ArbitraryParameters parameters = new ArbitraryParameters(request.getParameters());

		String serviceInstanceId = request.getServiceInstanceId();
		App app = App.builder().appId(serviceInstanceId)
				.appSecret(UUID.randomUUID().toString())
				.roles(Collections.singleton(AppRole.CLIENT))
				.scopes(Collections.singleton("openid"))
				.autoApproveScopes(Collections.singleton("openid"))
				.grantTypes(new HashSet() {
					{
						add(AppGrantType.AUTHORIZATION_CODE);
						add(AppGrantType.PASSWORD);
					}
				}).accessTokenValiditySeconds((int) TimeUnit.HOURS.toSeconds(3))
				.refreshTokenValiditySeconds(0).build();

		app.setAppUrl(parameters.appUrl()
				.orElseGet(() -> "http://" + app.getAppId() + ".example.com"));
		app.setAppName(parameters.appName().orElseGet(app::getAppId));
		app.setRedirectUrls(parameters.redirectUrls()
				.map(urls -> urls.stream().collect(Collectors.toSet()))
				.orElseGet(Collections::emptySet));

		appRepository.save(app);
		return new CreateServiceInstanceResponse();
	}

	@Override
	public GetLastServiceOperationResponse getLastOperation(
			GetLastServiceOperationRequest request) {
		return new GetLastServiceOperationResponse();
	}

	@Override
	public DeleteServiceInstanceResponse deleteServiceInstance(
			DeleteServiceInstanceRequest request) {
		String serviceInstanceId = request.getServiceInstanceId();
		appRepository.delete(serviceInstanceId);
		return new DeleteServiceInstanceResponse();
	}

	@Override
	@Transactional
	public UpdateServiceInstanceResponse updateServiceInstance(
			UpdateServiceInstanceRequest request) {
		appRepository.findByAppId(request.getServiceInstanceId()).ifPresent(app -> {
			ArbitraryParameters parameters = new ArbitraryParameters(
					request.getParameters());
			parameters.appUrl().ifPresent(app::setAppUrl);
			parameters.appName().ifPresent(app::setAppName);
			parameters.redirectUrls().ifPresent(urls -> app
					.setRedirectUrls(urls.stream().collect(Collectors.toSet())));
		});
		return new UpdateServiceInstanceResponse();
	}

	private static class ArbitraryParameters {
		final Map parameters;

		ArbitraryParameters(Map parameters) {
			this.parameters = parameters == null ? Collections.emptyMap() : parameters;
		}

		Optional appUrl() {
			return Optional.ofNullable(parameters.get("appUrl")).map(Object::toString);
		}

		Optional appName() {
			return Optional.ofNullable(parameters.get("appName")).map(Object::toString);
		}

		@SuppressWarnings("unchecked")
		Optional> redirectUrls() {
			return Optional.ofNullable(parameters.get("redirectUrls"))
					.map(Collection.class::cast);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy