open-api-templates.api.mustache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of automatiko-engine-codegen Show documentation
Show all versions of automatiko-engine-codegen Show documentation
The Code generation for Automatiko Engine
The newest version!
package {{package}};
import java.util.Base64;
import java.util.Arrays;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.MultivaluedHashMap;
import jakarta.ws.rs.core.MultivaluedMap;
import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
{{#useSwaggerAnnotations}}
import io.swagger.annotations.*;
{{/useSwaggerAnnotations}}
import java.io.InputStream;
import java.util.Map;
import java.util.List;
{{#useBeanValidation}}import javax.validation.constraints.*;
import javax.validation.Valid;{{/useBeanValidation}}
@org.eclipse.microprofile.rest.client.inject.RegisterRestClient(configKey="{{#lowercase}}{{classname}}{{/lowercase}}")
@org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders(value = {{classname}}.HeaderConfig.class)
@org.eclipse.microprofile.rest.client.annotation.RegisterProvider(value = io.automatiko.engine.service.rest.LoggingRestClientFilter.class)
@Path("{{{commonPath}}}"){{#useSwaggerAnnotations}}
@Api(description = "the {{{baseName}}} API"){{/useSwaggerAnnotations}}{{#hasConsumes}}
@Consumes({ {{#consumes}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}}{{#hasProduces}}
@Produces({ {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}}
public {{#interfaceOnly}}interface{{/interfaceOnly}}{{^interfaceOnly}}class{{/interfaceOnly}} {{classname}} {
{{#operations}}
{{#operation}}
{{>apiInterface}}
{{/operation}}
{{/operations}}
public static class HeaderConfig implements ClientHeadersFactory {
@Override
public MultivaluedMap update(MultivaluedMap incomingHeaders,
MultivaluedMap clientOutgoingHeaders) {
Config config = ConfigProvider.getConfig();
MultivaluedMap map = new MultivaluedHashMap<>(clientOutgoingHeaders);
String authType = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-type", String.class).orElse("not-set");
if (authType.equalsIgnoreCase("basic")) {
String basicData = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-basic", String.class).orElse(null);
String username = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-user", String.class).orElse(null);
String password = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-password", String.class).orElse(null);
if (username != null && password != null) {
map.put("Authorization", Arrays.asList("Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes())));
} else if (basicData != null) {
map.put("Authorization", Arrays.asList("Basic " + basicData));
}
} else if (authType.equalsIgnoreCase("oauth")) {
String accessToken = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-access-token", String.class).orElse(null);
if (accessToken == null) {
String clientId = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-client-id", String.class).orElse(null);
String clientSecret = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-client-secret", String.class).orElse(null);
String refreshToken = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-refresh-token", String.class).orElse(null);
String refreshUrl = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-refresh-url", String.class).orElse(null);
String scope = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-scope", String.class).orElse(null);
String url = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/url", String.class).orElse(null);
accessToken = io.automatiko.engine.workflow.http.HttpAuthorization.get().token(url,
clientId,
clientSecret,
refreshToken,
refreshUrl,
scope,
is -> {
try {
return new com.fasterxml.jackson.databind.ObjectMapper().readValue(is, java.util.Map.class);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
map.put("Authorization", Arrays.asList("Bearer " + accessToken));
} else if (authType.equalsIgnoreCase("custom")) {
String name = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-custom-name", String.class).orElse(null);
String value = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-custom-value", String.class).orElse(null);
if (name != null && value != null) {
map.put(name, Arrays.asList(value));
}
} else if (authType.equalsIgnoreCase("on-behalf")) {
String name = config.getOptionalValue("{{#lowercase}}{{classname}}{{/lowercase}}/mp-rest/auth-on-behalf-name", String.class).orElse("Authorization");
if (incomingHeaders.containsKey(name)) {
map.put(name, incomingHeaders.get(name));
}
}
return map;
}
}
}