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

open-api-templates.api.mustache Maven / Gradle / Ivy

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;
    }
  }
  }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy