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

live.lingting.component.security.web.resource.SecurityDefaultRemoteResourceServiceImpl Maven / Gradle / Ivy

package live.lingting.component.security.web.resource;

import live.lingting.component.core.constant.GlobalConstants;
import live.lingting.component.core.util.StringUtils;
import live.lingting.component.okhttp.OkHttpClient;
import live.lingting.component.security.mapstruct.SecurityMapstruct;
import live.lingting.component.security.resource.SecurityResourceService;
import live.lingting.component.security.resource.SecurityScope;
import live.lingting.component.security.token.SecurityToken;
import live.lingting.component.security.vo.AuthorizationVO;
import live.lingting.component.security.web.constant.SecurityWebConstants;
import okhttp3.Request;

/**
 * @author lingting 2023-03-31 10:53
 */
public class SecurityDefaultRemoteResourceServiceImpl implements SecurityResourceService {

	protected final OkHttpClient client;

	protected final SecurityRemoteResourceRequestCustomer customer;

	protected final String urlResolve;

	public SecurityDefaultRemoteResourceServiceImpl(String host, OkHttpClient client,
			SecurityRemoteResourceRequestCustomer customer) {
		this.client = client;
		this.customer = customer;
		this.urlResolve = join(host, SecurityWebConstants.URI_RESOLVE);
	}

	public Request.Builder resolveBuilder(SecurityToken token) {
		Request.Builder builder = new Request.Builder();
		builder.get().url(urlResolve);
		builder = fillSecurity(builder, token);
		builder = customer.apply(builder);
		return builder;
	}

	@Override
	public SecurityScope resolve(SecurityToken token) {
		Request.Builder builder = resolveBuilder(token);
		Request request = customer.resolve(builder);
		AuthorizationVO vo = client.request(request, AuthorizationVO.class);
		return SecurityMapstruct.INSTANCE.ofVo(vo);
	}

	Request.Builder fillSecurity(Request.Builder builder, SecurityToken token) {
		builder.header(SecurityWebConstants.TOKEN_HEADER,
				String.format("%s %s",
						StringUtils.hasText(token.getType()) ? token.getType() : SecurityWebConstants.TOKEN_TYPE_BEARER,
						token.getToken()));
		return builder;
	}

	String join(String host, String uri) {
		if (!StringUtils.hasText(host)) {
			throw new IllegalArgumentException("remoteHost is not Null!");
		}
		StringBuilder builder = new StringBuilder(host);
		if (!host.endsWith(GlobalConstants.SLASH)) {
			builder.append(GlobalConstants.SLASH);
		}

		if (uri.startsWith(GlobalConstants.SLASH)) {
			uri = uri.substring(1);
		}
		builder.append(uri);
		return builder.toString();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy