mirror of
				https://github.com/OpenAPITools/openapi-generator.git
				synced 2025-11-04 02:33:54 +00:00 
			
		
		
		
	Merge pull request #1862 from cbornet/feign_auth
Add auth support to feign library
This commit is contained in:
		
						commit
						ef8e5dbcf5
					
				@ -223,12 +223,11 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig {
 | 
			
		||||
        final String authFolder = (sourceFolder + '/' + invokerPackage + ".auth").replace(".", "/");
 | 
			
		||||
        if ("feign".equals(getLibrary())) {
 | 
			
		||||
            supportingFiles.add(new SupportingFile("FormAwareEncoder.mustache", invokerFolder, "FormAwareEncoder.java"));
 | 
			
		||||
        } else {
 | 
			
		||||
            supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java"));
 | 
			
		||||
            supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java"));
 | 
			
		||||
            supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java"));
 | 
			
		||||
            supportingFiles.add(new SupportingFile("auth/OAuthFlow.mustache", authFolder, "OAuthFlow.java"));
 | 
			
		||||
        }
 | 
			
		||||
        supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("auth/OAuthFlow.mustache", authFolder, "OAuthFlow.java"));
 | 
			
		||||
 | 
			
		||||
        if (!("feign".equals(getLibrary()) || "retrofit".equals(getLibrary()) || "retrofit2".equals(getLibrary()))) {
 | 
			
		||||
            supportingFiles.add(new SupportingFile("apiException.mustache", invokerFolder, "ApiException.java"));
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,22 @@
 | 
			
		||||
package {{invokerPackage}};
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.databind.DeserializationFeature;
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
import com.fasterxml.jackson.databind.SerializationFeature;
 | 
			
		||||
 | 
			
		||||
import feign.Feign;
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.jackson.JacksonDecoder;
 | 
			
		||||
import feign.jackson.JacksonEncoder;
 | 
			
		||||
import feign.slf4j.Slf4jLogger;
 | 
			
		||||
import {{invokerPackage}}.auth.*;
 | 
			
		||||
import {{invokerPackage}}.auth.OAuth.AccessTokenListener;
 | 
			
		||||
 | 
			
		||||
{{>generatedAnnotation}}
 | 
			
		||||
public class ApiClient {
 | 
			
		||||
@ -14,11 +24,80 @@ public class ApiClient {
 | 
			
		||||
 | 
			
		||||
  private ObjectMapper objectMapper;
 | 
			
		||||
  private String basePath = "{{basePath}}";
 | 
			
		||||
  private Map<String, RequestInterceptor> apiAuthorizations;
 | 
			
		||||
  private Feign.Builder feignBuilder;
 | 
			
		||||
 | 
			
		||||
  public ApiClient() {
 | 
			
		||||
    objectMapper = createObjectMapper();
 | 
			
		||||
    apiAuthorizations = new LinkedHashMap<String, RequestInterceptor>();
 | 
			
		||||
    feignBuilder = Feign.builder()
 | 
			
		||||
                .encoder(new FormAwareEncoder(new JacksonEncoder(objectMapper)))
 | 
			
		||||
                .decoder(new JacksonDecoder(objectMapper))
 | 
			
		||||
                .logger(new Slf4jLogger());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ApiClient(String[] authNames) {
 | 
			
		||||
    this();
 | 
			
		||||
    for(String authName : authNames) { {{#hasAuthMethods}}
 | 
			
		||||
      RequestInterceptor auth;
 | 
			
		||||
      {{#authMethods}}if (authName == "{{name}}") { {{#isBasic}}
 | 
			
		||||
        auth = new HttpBasicAuth();{{/isBasic}}{{#isApiKey}}
 | 
			
		||||
        auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}");{{/isApiKey}}{{#isOAuth}}
 | 
			
		||||
        auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{scope}}{{#hasMore}}, {{/hasMore}}{{/scopes}}");{{/isOAuth}}
 | 
			
		||||
      } else {{/authMethods}}{
 | 
			
		||||
        throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");
 | 
			
		||||
      }
 | 
			
		||||
      addAuthorization(authName, auth);{{/hasAuthMethods}}{{^hasAuthMethods}}
 | 
			
		||||
      throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");{{/hasAuthMethods}}
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Basic constructor for single auth name
 | 
			
		||||
   * @param authName
 | 
			
		||||
   */
 | 
			
		||||
  public ApiClient(String authName) {
 | 
			
		||||
    this(new String[]{authName});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper constructor for single api key
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param apiKey
 | 
			
		||||
   */
 | 
			
		||||
  public ApiClient(String authName, String apiKey) {
 | 
			
		||||
    this(authName);
 | 
			
		||||
    this.setApiKey(apiKey);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper constructor for single basic auth or password oauth2
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param username
 | 
			
		||||
   * @param password
 | 
			
		||||
   */
 | 
			
		||||
  public ApiClient(String authName, String username, String password) {
 | 
			
		||||
    this(authName);
 | 
			
		||||
    this.setCredentials(username,  password);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper constructor for single password oauth2
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param clientId
 | 
			
		||||
   * @param secret
 | 
			
		||||
   * @param username
 | 
			
		||||
   * @param password
 | 
			
		||||
   */
 | 
			
		||||
   public ApiClient(String authName, String clientId, String secret, String username, String password) {
 | 
			
		||||
     this(authName);
 | 
			
		||||
     this.getTokenEndPoint()
 | 
			
		||||
            .setClientId(clientId)
 | 
			
		||||
            .setClientSecret(secret)
 | 
			
		||||
            .setUsername(username)
 | 
			
		||||
            .setPassword(password);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
  public String getBasePath() {
 | 
			
		||||
    return basePath;
 | 
			
		||||
  }
 | 
			
		||||
@ -28,6 +107,23 @@ public class ApiClient {
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public Map<String, RequestInterceptor> getApiAuthorizations() {
 | 
			
		||||
    return apiAuthorizations;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void setApiAuthorizations(Map<String, RequestInterceptor> apiAuthorizations) {
 | 
			
		||||
    this.apiAuthorizations = apiAuthorizations;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public Feign.Builder getFeignBuilder() {
 | 
			
		||||
    return feignBuilder;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ApiClient setFeignBuilder(Feign.Builder feignBuilder) {
 | 
			
		||||
    this.feignBuilder = feignBuilder;
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private ObjectMapper createObjectMapper() {
 | 
			
		||||
    ObjectMapper objectMapper = new ObjectMapper();
 | 
			
		||||
    objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
 | 
			
		||||
@ -45,13 +141,7 @@ public class ApiClient {
 | 
			
		||||
   *    XYZResponse response = api.someMethod(...);
 | 
			
		||||
   */
 | 
			
		||||
  public <T extends Api> T buildClient(Class<T> clientClass) {
 | 
			
		||||
        return Feign.builder()
 | 
			
		||||
                .encoder(new FormAwareEncoder(new JacksonEncoder(objectMapper)))
 | 
			
		||||
                .decoder(new JacksonDecoder(objectMapper))
 | 
			
		||||
// enable for basic auth:
 | 
			
		||||
//                .requestInterceptor(new feign.auth.BasicAuthRequestInterceptor(username, password))
 | 
			
		||||
                .logger(new Slf4jLogger())
 | 
			
		||||
                .target(clientClass, basePath);
 | 
			
		||||
    return feignBuilder.target(clientClass, basePath);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@ -83,4 +173,137 @@ public class ApiClient {
 | 
			
		||||
    if (StringUtil.containsIgnoreCase(contentTypes, "application/json")) return "application/json";
 | 
			
		||||
    return contentTypes[0];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the first api key found
 | 
			
		||||
   * @param apiKey
 | 
			
		||||
   */
 | 
			
		||||
  public void setApiKey(String apiKey) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof ApiKeyAuth) {
 | 
			
		||||
        ApiKeyAuth keyAuth = (ApiKeyAuth) apiAuthorization;
 | 
			
		||||
        keyAuth.setApiKey(apiKey);
 | 
			
		||||
        return ;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    throw new RuntimeException("No API key authentication configured!");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the username/password for basic auth or password OAuth
 | 
			
		||||
   * @param username
 | 
			
		||||
   * @param password
 | 
			
		||||
   */
 | 
			
		||||
  public void setCredentials(String username, String password) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof HttpBasicAuth) {
 | 
			
		||||
        HttpBasicAuth basicAuth = (HttpBasicAuth) apiAuthorization;
 | 
			
		||||
        basicAuth.setCredentials(username, password);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.getTokenRequestBuilder().setUsername(username).setPassword(password);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    throw new RuntimeException("No Basic authentication or OAuth configured!");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the token endpoint of the first oauth found in the apiAuthorizations (there should be only one)
 | 
			
		||||
   * @return
 | 
			
		||||
   */
 | 
			
		||||
  public TokenRequestBuilder getTokenEndPoint() {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        return oauth.getTokenRequestBuilder();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure authorization endpoint of the first oauth found in the apiAuthorizations (there should be only one)
 | 
			
		||||
   * @return
 | 
			
		||||
   */
 | 
			
		||||
  public AuthenticationRequestBuilder getAuthorizationEndPoint() {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        return oauth.getAuthenticationRequestBuilder();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to pre-set the oauth access token of the first oauth found in the apiAuthorizations (there should be only one)
 | 
			
		||||
   * @param accessToken
 | 
			
		||||
   * @param expiresIn : validity period in seconds
 | 
			
		||||
   */
 | 
			
		||||
  public void setAccessToken(String accessToken, Long expiresIn) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.setAccessToken(accessToken, expiresIn);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the oauth accessCode/implicit flow parameters
 | 
			
		||||
   * @param clientId
 | 
			
		||||
   * @param clientSecret
 | 
			
		||||
   * @param redirectURI
 | 
			
		||||
   */
 | 
			
		||||
  public void configureAuthorizationFlow(String clientId, String clientSecret, String redirectURI) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.getTokenRequestBuilder()
 | 
			
		||||
                .setClientId(clientId)
 | 
			
		||||
                .setClientSecret(clientSecret)
 | 
			
		||||
                .setRedirectURI(redirectURI);
 | 
			
		||||
        oauth.getAuthenticationRequestBuilder()
 | 
			
		||||
                .setClientId(clientId)
 | 
			
		||||
                .setRedirectURI(redirectURI);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Configures a listener which is notified when a new access token is received.
 | 
			
		||||
   * @param accessTokenListener
 | 
			
		||||
   */
 | 
			
		||||
  public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.registerAccessTokenListener(accessTokenListener);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public RequestInterceptor getAuthorization(String authName) {
 | 
			
		||||
    return apiAuthorizations.get(authName);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds an authorization to be used by the client
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param authorization
 | 
			
		||||
   */
 | 
			
		||||
  public void addAuthorization(String authName, RequestInterceptor authorization) {
 | 
			
		||||
    if (apiAuthorizations.containsKey(authName)) {
 | 
			
		||||
      throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations");
 | 
			
		||||
    }
 | 
			
		||||
    apiAuthorizations.put(authName, authorization);
 | 
			
		||||
    feignBuilder.requestInterceptor(authorization);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,41 @@
 | 
			
		||||
package {{invokerPackage}}.auth;
 | 
			
		||||
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
 | 
			
		||||
public class ApiKeyAuth implements RequestInterceptor {
 | 
			
		||||
    private final String location;
 | 
			
		||||
    private final String paramName;
 | 
			
		||||
 | 
			
		||||
    private String apiKey;
 | 
			
		||||
 | 
			
		||||
    public ApiKeyAuth(String location, String paramName) {
 | 
			
		||||
        this.location = location;
 | 
			
		||||
        this.paramName = paramName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLocation() {
 | 
			
		||||
        return location;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getParamName() {
 | 
			
		||||
        return paramName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getApiKey() {
 | 
			
		||||
        return apiKey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setApiKey(String apiKey) {
 | 
			
		||||
        this.apiKey = apiKey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void apply(RequestTemplate template) {
 | 
			
		||||
        if (location == "query") {
 | 
			
		||||
            template.query(paramName, apiKey);
 | 
			
		||||
        } else if (location == "header") {
 | 
			
		||||
            template.header(paramName, apiKey);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,41 @@
 | 
			
		||||
package {{invokerPackage}}.auth;
 | 
			
		||||
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
import feign.auth.BasicAuthRequestInterceptor;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An interceptor that adds the request header needed to use HTTP basic authentication.
 | 
			
		||||
 */
 | 
			
		||||
public class HttpBasicAuth implements RequestInterceptor {
 | 
			
		||||
 | 
			
		||||
    private String username;
 | 
			
		||||
    private String password;
 | 
			
		||||
    
 | 
			
		||||
    public String getUsername() {
 | 
			
		||||
        return username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUsername(String username) {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPassword() {
 | 
			
		||||
        return password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPassword(String password) {
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCredentials(String username, String password) {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void apply(RequestTemplate template) {
 | 
			
		||||
      RequestInterceptor requestInterceptor = new BasicAuthRequestInterceptor(username, password);
 | 
			
		||||
      requestInterceptor.apply(template);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,203 @@
 | 
			
		||||
package {{invokerPackage}}.auth;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
 | 
			
		||||
import org.apache.oltu.oauth2.client.HttpClient;
 | 
			
		||||
import org.apache.oltu.oauth2.client.OAuthClient;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
 | 
			
		||||
import org.apache.oltu.oauth2.client.response.OAuthClientResponse;
 | 
			
		||||
import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory;
 | 
			
		||||
import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse;
 | 
			
		||||
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
 | 
			
		||||
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
 | 
			
		||||
import org.apache.oltu.oauth2.common.message.types.GrantType;
 | 
			
		||||
import org.apache.oltu.oauth2.common.token.BasicOAuthToken;
 | 
			
		||||
 | 
			
		||||
import feign.Client;
 | 
			
		||||
import feign.Request.Options;
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
import feign.Response;
 | 
			
		||||
import feign.Util;
 | 
			
		||||
import {{invokerPackage}}.StringUtil;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class OAuth implements RequestInterceptor {
 | 
			
		||||
 | 
			
		||||
    public interface AccessTokenListener {
 | 
			
		||||
        public void notify(BasicOAuthToken token);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private volatile String accessToken;
 | 
			
		||||
    private Long expirationTimeMillis;
 | 
			
		||||
    private OAuthClient oauthClient;
 | 
			
		||||
    private TokenRequestBuilder tokenRequestBuilder;
 | 
			
		||||
    private AuthenticationRequestBuilder authenticationRequestBuilder;
 | 
			
		||||
    private AccessTokenListener accessTokenListener;
 | 
			
		||||
 | 
			
		||||
    public OAuth(Client client, TokenRequestBuilder requestBuilder) {
 | 
			
		||||
        setOauthClient(client);
 | 
			
		||||
        this.tokenRequestBuilder = requestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OAuth(Client client, OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
 | 
			
		||||
        this(client, OAuthClientRequest.tokenLocation(tokenUrl).setScope(scopes));
 | 
			
		||||
        setFlow(flow);
 | 
			
		||||
        authenticationRequestBuilder = OAuthClientRequest.authorizationLocation(authorizationUrl);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OAuth(OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
 | 
			
		||||
        this(new Client.Default(null, null), flow, authorizationUrl, tokenUrl, scopes);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFlow(OAuthFlow flow) {
 | 
			
		||||
        switch(flow) {
 | 
			
		||||
        case accessCode:
 | 
			
		||||
        case implicit:
 | 
			
		||||
            tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE);
 | 
			
		||||
            break;
 | 
			
		||||
        case password:
 | 
			
		||||
            tokenRequestBuilder.setGrantType(GrantType.PASSWORD);
 | 
			
		||||
            break;
 | 
			
		||||
        case application:
 | 
			
		||||
            tokenRequestBuilder.setGrantType(GrantType.CLIENT_CREDENTIALS);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void apply(RequestTemplate template) {
 | 
			
		||||
        // If the request already have an authorization (eg. Basic auth), do nothing
 | 
			
		||||
        if (template.headers().containsKey("Authorization")) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // If first time, get the token
 | 
			
		||||
        if (expirationTimeMillis == null || System.currentTimeMillis() >= expirationTimeMillis) {
 | 
			
		||||
            try {
 | 
			
		||||
                updateAccessToken();
 | 
			
		||||
            } catch (OAuthSystemException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
                return;
 | 
			
		||||
            } catch (OAuthProblemException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (getAccessToken() != null) {
 | 
			
		||||
            template.header("Authorization", "Bearer " + getAccessToken());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized void updateAccessToken() throws OAuthSystemException, OAuthProblemException {
 | 
			
		||||
        if (getAccessToken() == null) {
 | 
			
		||||
            OAuthJSONAccessTokenResponse accessTokenResponse = oauthClient.accessToken(tokenRequestBuilder.buildBodyMessage());
 | 
			
		||||
            if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) {
 | 
			
		||||
                setAccessToken(accessTokenResponse.getAccessToken(), accessTokenResponse.getExpiresIn());
 | 
			
		||||
                if (accessTokenListener != null) {
 | 
			
		||||
                    accessTokenListener.notify((BasicOAuthToken) accessTokenResponse.getOAuthToken());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
 | 
			
		||||
        this.accessTokenListener = accessTokenListener;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized String getAccessToken() {
 | 
			
		||||
        return accessToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized void setAccessToken(String accessToken, Long expiresIn) {
 | 
			
		||||
        this.accessToken = accessToken;
 | 
			
		||||
        this.expirationTimeMillis = System.currentTimeMillis() + expiresIn * 1000;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TokenRequestBuilder getTokenRequestBuilder() {
 | 
			
		||||
        return tokenRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTokenRequestBuilder(TokenRequestBuilder tokenRequestBuilder) {
 | 
			
		||||
        this.tokenRequestBuilder = tokenRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AuthenticationRequestBuilder getAuthenticationRequestBuilder() {
 | 
			
		||||
        return authenticationRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAuthenticationRequestBuilder(AuthenticationRequestBuilder authenticationRequestBuilder) {
 | 
			
		||||
        this.authenticationRequestBuilder = authenticationRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OAuthClient getOauthClient() {
 | 
			
		||||
        return oauthClient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOauthClient(OAuthClient oauthClient) {
 | 
			
		||||
        this.oauthClient = oauthClient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOauthClient(Client client) {
 | 
			
		||||
        this.oauthClient = new OAuthClient( new OAuthFeignClient(client));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class OAuthFeignClient implements HttpClient {
 | 
			
		||||
 | 
			
		||||
        private Client client;
 | 
			
		||||
 | 
			
		||||
        public OAuthFeignClient() {
 | 
			
		||||
            this.client = new Client.Default(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public OAuthFeignClient(Client client) {
 | 
			
		||||
            this.client = client;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public <T extends OAuthClientResponse> T execute(OAuthClientRequest request, Map<String, String> headers,
 | 
			
		||||
                String requestMethod, Class<T> responseClass)
 | 
			
		||||
                        throws OAuthSystemException, OAuthProblemException {
 | 
			
		||||
 | 
			
		||||
            RequestTemplate req = new RequestTemplate()
 | 
			
		||||
                    .append(request.getLocationUri())
 | 
			
		||||
                    .method(requestMethod)
 | 
			
		||||
                    .body(request.getBody());
 | 
			
		||||
 | 
			
		||||
            for (Entry<String, String> entry : headers.entrySet()) {
 | 
			
		||||
                req.header(entry.getKey(), entry.getValue());
 | 
			
		||||
            }
 | 
			
		||||
            Response feignResponse;
 | 
			
		||||
            String body = "";
 | 
			
		||||
            try {
 | 
			
		||||
                feignResponse = client.execute(req.request(), new Options());
 | 
			
		||||
                body = Util.toString(feignResponse.body().asReader());
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                throw new OAuthSystemException(e);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            String contentType = null;
 | 
			
		||||
            Collection<String> contentTypeHeader =  feignResponse.headers().get("Content-Type");
 | 
			
		||||
            if(contentTypeHeader != null) {
 | 
			
		||||
                contentType = StringUtil.join(contentTypeHeader.toArray(new String[0]), ";");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return OAuthClientResponseFactory.createCustomResponse(
 | 
			
		||||
                    body,
 | 
			
		||||
                    contentType,
 | 
			
		||||
                    feignResponse.status(),
 | 
			
		||||
                    responseClass
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void shutdown() {
 | 
			
		||||
            // Nothing to do here
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -164,6 +164,12 @@
 | 
			
		||||
      <version>2.2</version>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>org.apache.oltu.oauth2</groupId>
 | 
			
		||||
      <artifactId>org.apache.oltu.oauth2.client</artifactId>
 | 
			
		||||
      <version>${oltu-version}</version>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
    <!-- test dependencies -->
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>junit</groupId>
 | 
			
		||||
@ -179,5 +185,6 @@
 | 
			
		||||
    <jodatime-version>2.5</jodatime-version>
 | 
			
		||||
    <junit-version>4.12</junit-version>
 | 
			
		||||
    <maven-plugin-version>1.0.0</maven-plugin-version>
 | 
			
		||||
    <oltu-version>1.0.0</oltu-version>
 | 
			
		||||
  </properties>
 | 
			
		||||
</project>
 | 
			
		||||
 | 
			
		||||
@ -164,6 +164,12 @@
 | 
			
		||||
      <version>2.2</version>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>org.apache.oltu.oauth2</groupId>
 | 
			
		||||
      <artifactId>org.apache.oltu.oauth2.client</artifactId>
 | 
			
		||||
      <version>${oltu-version}</version>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
    <!-- test dependencies -->
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>junit</groupId>
 | 
			
		||||
@ -179,5 +185,6 @@
 | 
			
		||||
    <jodatime-version>2.5</jodatime-version>
 | 
			
		||||
    <junit-version>4.12</junit-version>
 | 
			
		||||
    <maven-plugin-version>1.0.0</maven-plugin-version>
 | 
			
		||||
    <oltu-version>1.0.0</oltu-version>
 | 
			
		||||
  </properties>
 | 
			
		||||
</project>
 | 
			
		||||
 | 
			
		||||
@ -1,24 +1,102 @@
 | 
			
		||||
package io.swagger.client;
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.databind.DeserializationFeature;
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
import com.fasterxml.jackson.databind.SerializationFeature;
 | 
			
		||||
 | 
			
		||||
import feign.Feign;
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.jackson.JacksonDecoder;
 | 
			
		||||
import feign.jackson.JacksonEncoder;
 | 
			
		||||
import feign.slf4j.Slf4jLogger;
 | 
			
		||||
import io.swagger.client.auth.*;
 | 
			
		||||
import io.swagger.client.auth.OAuth.AccessTokenListener;
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class ApiClient {
 | 
			
		||||
  public interface Api {}
 | 
			
		||||
 | 
			
		||||
  private ObjectMapper objectMapper;
 | 
			
		||||
  private String basePath = "http://petstore.swagger.io/v2";
 | 
			
		||||
  private Map<String, RequestInterceptor> apiAuthorizations;
 | 
			
		||||
  private Feign.Builder feignBuilder;
 | 
			
		||||
 | 
			
		||||
  public ApiClient() {
 | 
			
		||||
    objectMapper = createObjectMapper();
 | 
			
		||||
    apiAuthorizations = new LinkedHashMap<String, RequestInterceptor>();
 | 
			
		||||
    feignBuilder = Feign.builder()
 | 
			
		||||
                .encoder(new FormAwareEncoder(new JacksonEncoder(objectMapper)))
 | 
			
		||||
                .decoder(new JacksonDecoder(objectMapper))
 | 
			
		||||
                .logger(new Slf4jLogger());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ApiClient(String[] authNames) {
 | 
			
		||||
    this();
 | 
			
		||||
    for(String authName : authNames) { 
 | 
			
		||||
      RequestInterceptor auth;
 | 
			
		||||
      if (authName == "petstore_auth") { 
 | 
			
		||||
        auth = new OAuth(OAuthFlow.implicit, "http://petstore.swagger.io/api/oauth/dialog", "", "write:pets, read:pets");
 | 
			
		||||
      } else if (authName == "api_key") { 
 | 
			
		||||
        auth = new ApiKeyAuth("header", "api_key");
 | 
			
		||||
      } else {
 | 
			
		||||
        throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");
 | 
			
		||||
      }
 | 
			
		||||
      addAuthorization(authName, auth);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Basic constructor for single auth name
 | 
			
		||||
   * @param authName
 | 
			
		||||
   */
 | 
			
		||||
  public ApiClient(String authName) {
 | 
			
		||||
    this(new String[]{authName});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper constructor for single api key
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param apiKey
 | 
			
		||||
   */
 | 
			
		||||
  public ApiClient(String authName, String apiKey) {
 | 
			
		||||
    this(authName);
 | 
			
		||||
    this.setApiKey(apiKey);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper constructor for single basic auth or password oauth2
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param username
 | 
			
		||||
   * @param password
 | 
			
		||||
   */
 | 
			
		||||
  public ApiClient(String authName, String username, String password) {
 | 
			
		||||
    this(authName);
 | 
			
		||||
    this.setCredentials(username,  password);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper constructor for single password oauth2
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param clientId
 | 
			
		||||
   * @param secret
 | 
			
		||||
   * @param username
 | 
			
		||||
   * @param password
 | 
			
		||||
   */
 | 
			
		||||
   public ApiClient(String authName, String clientId, String secret, String username, String password) {
 | 
			
		||||
     this(authName);
 | 
			
		||||
     this.getTokenEndPoint()
 | 
			
		||||
            .setClientId(clientId)
 | 
			
		||||
            .setClientSecret(secret)
 | 
			
		||||
            .setUsername(username)
 | 
			
		||||
            .setPassword(password);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
  public String getBasePath() {
 | 
			
		||||
    return basePath;
 | 
			
		||||
  }
 | 
			
		||||
@ -28,6 +106,23 @@ public class ApiClient {
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public Map<String, RequestInterceptor> getApiAuthorizations() {
 | 
			
		||||
    return apiAuthorizations;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void setApiAuthorizations(Map<String, RequestInterceptor> apiAuthorizations) {
 | 
			
		||||
    this.apiAuthorizations = apiAuthorizations;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public Feign.Builder getFeignBuilder() {
 | 
			
		||||
    return feignBuilder;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ApiClient setFeignBuilder(Feign.Builder feignBuilder) {
 | 
			
		||||
    this.feignBuilder = feignBuilder;
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private ObjectMapper createObjectMapper() {
 | 
			
		||||
    ObjectMapper objectMapper = new ObjectMapper();
 | 
			
		||||
    objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
 | 
			
		||||
@ -45,13 +140,7 @@ public class ApiClient {
 | 
			
		||||
   *    XYZResponse response = api.someMethod(...);
 | 
			
		||||
   */
 | 
			
		||||
  public <T extends Api> T buildClient(Class<T> clientClass) {
 | 
			
		||||
        return Feign.builder()
 | 
			
		||||
                .encoder(new FormAwareEncoder(new JacksonEncoder(objectMapper)))
 | 
			
		||||
                .decoder(new JacksonDecoder(objectMapper))
 | 
			
		||||
// enable for basic auth:
 | 
			
		||||
//                .requestInterceptor(new feign.auth.BasicAuthRequestInterceptor(username, password))
 | 
			
		||||
                .logger(new Slf4jLogger())
 | 
			
		||||
                .target(clientClass, basePath);
 | 
			
		||||
    return feignBuilder.target(clientClass, basePath);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@ -83,4 +172,137 @@ public class ApiClient {
 | 
			
		||||
    if (StringUtil.containsIgnoreCase(contentTypes, "application/json")) return "application/json";
 | 
			
		||||
    return contentTypes[0];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the first api key found
 | 
			
		||||
   * @param apiKey
 | 
			
		||||
   */
 | 
			
		||||
  public void setApiKey(String apiKey) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof ApiKeyAuth) {
 | 
			
		||||
        ApiKeyAuth keyAuth = (ApiKeyAuth) apiAuthorization;
 | 
			
		||||
        keyAuth.setApiKey(apiKey);
 | 
			
		||||
        return ;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    throw new RuntimeException("No API key authentication configured!");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the username/password for basic auth or password OAuth
 | 
			
		||||
   * @param username
 | 
			
		||||
   * @param password
 | 
			
		||||
   */
 | 
			
		||||
  public void setCredentials(String username, String password) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof HttpBasicAuth) {
 | 
			
		||||
        HttpBasicAuth basicAuth = (HttpBasicAuth) apiAuthorization;
 | 
			
		||||
        basicAuth.setCredentials(username, password);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.getTokenRequestBuilder().setUsername(username).setPassword(password);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    throw new RuntimeException("No Basic authentication or OAuth configured!");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the token endpoint of the first oauth found in the apiAuthorizations (there should be only one)
 | 
			
		||||
   * @return
 | 
			
		||||
   */
 | 
			
		||||
  public TokenRequestBuilder getTokenEndPoint() {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        return oauth.getTokenRequestBuilder();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure authorization endpoint of the first oauth found in the apiAuthorizations (there should be only one)
 | 
			
		||||
   * @return
 | 
			
		||||
   */
 | 
			
		||||
  public AuthenticationRequestBuilder getAuthorizationEndPoint() {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        return oauth.getAuthenticationRequestBuilder();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to pre-set the oauth access token of the first oauth found in the apiAuthorizations (there should be only one)
 | 
			
		||||
   * @param accessToken
 | 
			
		||||
   * @param expiresIn : validity period in seconds
 | 
			
		||||
   */
 | 
			
		||||
  public void setAccessToken(String accessToken, Long expiresIn) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.setAccessToken(accessToken, expiresIn);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper method to configure the oauth accessCode/implicit flow parameters
 | 
			
		||||
   * @param clientId
 | 
			
		||||
   * @param clientSecret
 | 
			
		||||
   * @param redirectURI
 | 
			
		||||
   */
 | 
			
		||||
  public void configureAuthorizationFlow(String clientId, String clientSecret, String redirectURI) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.getTokenRequestBuilder()
 | 
			
		||||
                .setClientId(clientId)
 | 
			
		||||
                .setClientSecret(clientSecret)
 | 
			
		||||
                .setRedirectURI(redirectURI);
 | 
			
		||||
        oauth.getAuthenticationRequestBuilder()
 | 
			
		||||
                .setClientId(clientId)
 | 
			
		||||
                .setRedirectURI(redirectURI);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Configures a listener which is notified when a new access token is received.
 | 
			
		||||
   * @param accessTokenListener
 | 
			
		||||
   */
 | 
			
		||||
  public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
 | 
			
		||||
    for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
 | 
			
		||||
      if (apiAuthorization instanceof OAuth) {
 | 
			
		||||
        OAuth oauth = (OAuth) apiAuthorization;
 | 
			
		||||
        oauth.registerAccessTokenListener(accessTokenListener);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public RequestInterceptor getAuthorization(String authName) {
 | 
			
		||||
    return apiAuthorizations.get(authName);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds an authorization to be used by the client
 | 
			
		||||
   * @param authName
 | 
			
		||||
   * @param authorization
 | 
			
		||||
   */
 | 
			
		||||
  public void addAuthorization(String authName, RequestInterceptor authorization) {
 | 
			
		||||
    if (apiAuthorizations.containsKey(authName)) {
 | 
			
		||||
      throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations");
 | 
			
		||||
    }
 | 
			
		||||
    apiAuthorizations.put(authName, authorization);
 | 
			
		||||
    feignBuilder.requestInterceptor(authorization);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ import feign.codec.EncodeException;
 | 
			
		||||
import feign.codec.Encoder;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class FormAwareEncoder implements Encoder {
 | 
			
		||||
  public static final String UTF_8 = "utf-8";
 | 
			
		||||
  private static final String LINE_FEED = "\r\n";
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
package io.swagger.client;
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class StringUtil {
 | 
			
		||||
  /**
 | 
			
		||||
   * Check if the given array contains the given value (with case-insensitive comparison).
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ import java.io.File;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import feign.*;
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public interface PetApi extends ApiClient.Api {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ import io.swagger.client.model.Order;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import feign.*;
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public interface StoreApi extends ApiClient.Api {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ import java.util.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import feign.*;
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public interface UserApi extends ApiClient.Api {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,41 @@
 | 
			
		||||
package io.swagger.client.auth;
 | 
			
		||||
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
 | 
			
		||||
public class ApiKeyAuth implements RequestInterceptor {
 | 
			
		||||
    private final String location;
 | 
			
		||||
    private final String paramName;
 | 
			
		||||
 | 
			
		||||
    private String apiKey;
 | 
			
		||||
 | 
			
		||||
    public ApiKeyAuth(String location, String paramName) {
 | 
			
		||||
        this.location = location;
 | 
			
		||||
        this.paramName = paramName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLocation() {
 | 
			
		||||
        return location;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getParamName() {
 | 
			
		||||
        return paramName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getApiKey() {
 | 
			
		||||
        return apiKey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setApiKey(String apiKey) {
 | 
			
		||||
        this.apiKey = apiKey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void apply(RequestTemplate template) {
 | 
			
		||||
        if (location == "query") {
 | 
			
		||||
            template.query(paramName, apiKey);
 | 
			
		||||
        } else if (location == "header") {
 | 
			
		||||
            template.header(paramName, apiKey);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,41 @@
 | 
			
		||||
package io.swagger.client.auth;
 | 
			
		||||
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
import feign.auth.BasicAuthRequestInterceptor;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An interceptor that adds the request header needed to use HTTP basic authentication.
 | 
			
		||||
 */
 | 
			
		||||
public class HttpBasicAuth implements RequestInterceptor {
 | 
			
		||||
 | 
			
		||||
    private String username;
 | 
			
		||||
    private String password;
 | 
			
		||||
    
 | 
			
		||||
    public String getUsername() {
 | 
			
		||||
        return username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUsername(String username) {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPassword() {
 | 
			
		||||
        return password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPassword(String password) {
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCredentials(String username, String password) {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void apply(RequestTemplate template) {
 | 
			
		||||
      RequestInterceptor requestInterceptor = new BasicAuthRequestInterceptor(username, password);
 | 
			
		||||
      requestInterceptor.apply(template);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,203 @@
 | 
			
		||||
package io.swagger.client.auth;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
 | 
			
		||||
import org.apache.oltu.oauth2.client.HttpClient;
 | 
			
		||||
import org.apache.oltu.oauth2.client.OAuthClient;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
 | 
			
		||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
 | 
			
		||||
import org.apache.oltu.oauth2.client.response.OAuthClientResponse;
 | 
			
		||||
import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory;
 | 
			
		||||
import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse;
 | 
			
		||||
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
 | 
			
		||||
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
 | 
			
		||||
import org.apache.oltu.oauth2.common.message.types.GrantType;
 | 
			
		||||
import org.apache.oltu.oauth2.common.token.BasicOAuthToken;
 | 
			
		||||
 | 
			
		||||
import feign.Client;
 | 
			
		||||
import feign.Request.Options;
 | 
			
		||||
import feign.RequestInterceptor;
 | 
			
		||||
import feign.RequestTemplate;
 | 
			
		||||
import feign.Response;
 | 
			
		||||
import feign.Util;
 | 
			
		||||
import io.swagger.client.StringUtil;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class OAuth implements RequestInterceptor {
 | 
			
		||||
 | 
			
		||||
    public interface AccessTokenListener {
 | 
			
		||||
        public void notify(BasicOAuthToken token);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private volatile String accessToken;
 | 
			
		||||
    private Long expirationTimeMillis;
 | 
			
		||||
    private OAuthClient oauthClient;
 | 
			
		||||
    private TokenRequestBuilder tokenRequestBuilder;
 | 
			
		||||
    private AuthenticationRequestBuilder authenticationRequestBuilder;
 | 
			
		||||
    private AccessTokenListener accessTokenListener;
 | 
			
		||||
 | 
			
		||||
    public OAuth(Client client, TokenRequestBuilder requestBuilder) {
 | 
			
		||||
        setOauthClient(client);
 | 
			
		||||
        this.tokenRequestBuilder = requestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OAuth(Client client, OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
 | 
			
		||||
        this(client, OAuthClientRequest.tokenLocation(tokenUrl).setScope(scopes));
 | 
			
		||||
        setFlow(flow);
 | 
			
		||||
        authenticationRequestBuilder = OAuthClientRequest.authorizationLocation(authorizationUrl);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OAuth(OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
 | 
			
		||||
        this(new Client.Default(null, null), flow, authorizationUrl, tokenUrl, scopes);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFlow(OAuthFlow flow) {
 | 
			
		||||
        switch(flow) {
 | 
			
		||||
        case accessCode:
 | 
			
		||||
        case implicit:
 | 
			
		||||
            tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE);
 | 
			
		||||
            break;
 | 
			
		||||
        case password:
 | 
			
		||||
            tokenRequestBuilder.setGrantType(GrantType.PASSWORD);
 | 
			
		||||
            break;
 | 
			
		||||
        case application:
 | 
			
		||||
            tokenRequestBuilder.setGrantType(GrantType.CLIENT_CREDENTIALS);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void apply(RequestTemplate template) {
 | 
			
		||||
        // If the request already have an authorization (eg. Basic auth), do nothing
 | 
			
		||||
        if (template.headers().containsKey("Authorization")) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // If first time, get the token
 | 
			
		||||
        if (expirationTimeMillis == null || System.currentTimeMillis() >= expirationTimeMillis) {
 | 
			
		||||
            try {
 | 
			
		||||
                updateAccessToken();
 | 
			
		||||
            } catch (OAuthSystemException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
                return;
 | 
			
		||||
            } catch (OAuthProblemException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (getAccessToken() != null) {
 | 
			
		||||
            template.header("Authorization", "Bearer " + getAccessToken());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized void updateAccessToken() throws OAuthSystemException, OAuthProblemException {
 | 
			
		||||
        if (getAccessToken() == null) {
 | 
			
		||||
            OAuthJSONAccessTokenResponse accessTokenResponse = oauthClient.accessToken(tokenRequestBuilder.buildBodyMessage());
 | 
			
		||||
            if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) {
 | 
			
		||||
                setAccessToken(accessTokenResponse.getAccessToken(), accessTokenResponse.getExpiresIn());
 | 
			
		||||
                if (accessTokenListener != null) {
 | 
			
		||||
                    accessTokenListener.notify((BasicOAuthToken) accessTokenResponse.getOAuthToken());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
 | 
			
		||||
        this.accessTokenListener = accessTokenListener;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized String getAccessToken() {
 | 
			
		||||
        return accessToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized void setAccessToken(String accessToken, Long expiresIn) {
 | 
			
		||||
        this.accessToken = accessToken;
 | 
			
		||||
        this.expirationTimeMillis = System.currentTimeMillis() + expiresIn * 1000;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TokenRequestBuilder getTokenRequestBuilder() {
 | 
			
		||||
        return tokenRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTokenRequestBuilder(TokenRequestBuilder tokenRequestBuilder) {
 | 
			
		||||
        this.tokenRequestBuilder = tokenRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AuthenticationRequestBuilder getAuthenticationRequestBuilder() {
 | 
			
		||||
        return authenticationRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAuthenticationRequestBuilder(AuthenticationRequestBuilder authenticationRequestBuilder) {
 | 
			
		||||
        this.authenticationRequestBuilder = authenticationRequestBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OAuthClient getOauthClient() {
 | 
			
		||||
        return oauthClient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOauthClient(OAuthClient oauthClient) {
 | 
			
		||||
        this.oauthClient = oauthClient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOauthClient(Client client) {
 | 
			
		||||
        this.oauthClient = new OAuthClient( new OAuthFeignClient(client));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class OAuthFeignClient implements HttpClient {
 | 
			
		||||
 | 
			
		||||
        private Client client;
 | 
			
		||||
 | 
			
		||||
        public OAuthFeignClient() {
 | 
			
		||||
            this.client = new Client.Default(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public OAuthFeignClient(Client client) {
 | 
			
		||||
            this.client = client;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public <T extends OAuthClientResponse> T execute(OAuthClientRequest request, Map<String, String> headers,
 | 
			
		||||
                String requestMethod, Class<T> responseClass)
 | 
			
		||||
                        throws OAuthSystemException, OAuthProblemException {
 | 
			
		||||
 | 
			
		||||
            RequestTemplate req = new RequestTemplate()
 | 
			
		||||
                    .append(request.getLocationUri())
 | 
			
		||||
                    .method(requestMethod)
 | 
			
		||||
                    .body(request.getBody());
 | 
			
		||||
 | 
			
		||||
            for (Entry<String, String> entry : headers.entrySet()) {
 | 
			
		||||
                req.header(entry.getKey(), entry.getValue());
 | 
			
		||||
            }
 | 
			
		||||
            Response feignResponse;
 | 
			
		||||
            String body = "";
 | 
			
		||||
            try {
 | 
			
		||||
                feignResponse = client.execute(req.request(), new Options());
 | 
			
		||||
                body = Util.toString(feignResponse.body().asReader());
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                throw new OAuthSystemException(e);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            String contentType = null;
 | 
			
		||||
            Collection<String> contentTypeHeader =  feignResponse.headers().get("Content-Type");
 | 
			
		||||
            if(contentTypeHeader != null) {
 | 
			
		||||
                contentType = StringUtil.join(contentTypeHeader.toArray(new String[0]), ";");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return OAuthClientResponseFactory.createCustomResponse(
 | 
			
		||||
                    body,
 | 
			
		||||
                    contentType,
 | 
			
		||||
                    feignResponse.status(),
 | 
			
		||||
                    responseClass
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void shutdown() {
 | 
			
		||||
            // Nothing to do here
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,5 @@
 | 
			
		||||
package io.swagger.client.auth;
 | 
			
		||||
 | 
			
		||||
public enum OAuthFlow {
 | 
			
		||||
    accessCode, implicit, password, application
 | 
			
		||||
}
 | 
			
		||||
@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class Category   {
 | 
			
		||||
  
 | 
			
		||||
  private Long id = null;
 | 
			
		||||
@ -53,8 +53,10 @@ public class Category   {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    Category category = (Category) o;
 | 
			
		||||
    return Objects.equals(id, category.id) &&
 | 
			
		||||
        Objects.equals(name, category.name);
 | 
			
		||||
 | 
			
		||||
    return true && Objects.equals(id, category.id) &&
 | 
			
		||||
        Objects.equals(name, category.name)
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ import java.util.Date;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class Order   {
 | 
			
		||||
  
 | 
			
		||||
  private Long id = null;
 | 
			
		||||
@ -131,12 +131,14 @@ public class Order   {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    Order order = (Order) o;
 | 
			
		||||
    return Objects.equals(id, order.id) &&
 | 
			
		||||
 | 
			
		||||
    return true && Objects.equals(id, order.id) &&
 | 
			
		||||
        Objects.equals(petId, order.petId) &&
 | 
			
		||||
        Objects.equals(quantity, order.quantity) &&
 | 
			
		||||
        Objects.equals(shipDate, order.shipDate) &&
 | 
			
		||||
        Objects.equals(status, order.status) &&
 | 
			
		||||
        Objects.equals(complete, order.complete);
 | 
			
		||||
        Objects.equals(complete, order.complete)
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ import java.util.*;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class Pet   {
 | 
			
		||||
  
 | 
			
		||||
  private Long id = null;
 | 
			
		||||
@ -133,12 +133,14 @@ public class Pet   {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    Pet pet = (Pet) o;
 | 
			
		||||
    return Objects.equals(id, pet.id) &&
 | 
			
		||||
 | 
			
		||||
    return true && Objects.equals(id, pet.id) &&
 | 
			
		||||
        Objects.equals(category, pet.category) &&
 | 
			
		||||
        Objects.equals(name, pet.name) &&
 | 
			
		||||
        Objects.equals(photoUrls, pet.photoUrls) &&
 | 
			
		||||
        Objects.equals(tags, pet.tags) &&
 | 
			
		||||
        Objects.equals(status, pet.status);
 | 
			
		||||
        Objects.equals(status, pet.status)
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class Tag   {
 | 
			
		||||
  
 | 
			
		||||
  private Long id = null;
 | 
			
		||||
@ -53,8 +53,10 @@ public class Tag   {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    Tag tag = (Tag) o;
 | 
			
		||||
    return Objects.equals(id, tag.id) &&
 | 
			
		||||
        Objects.equals(name, tag.name);
 | 
			
		||||
 | 
			
		||||
    return true && Objects.equals(id, tag.id) &&
 | 
			
		||||
        Objects.equals(name, tag.name)
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:18.888+08:00")
 | 
			
		||||
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z")
 | 
			
		||||
public class User   {
 | 
			
		||||
  
 | 
			
		||||
  private Long id = null;
 | 
			
		||||
@ -138,14 +138,16 @@ public class User   {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    User user = (User) o;
 | 
			
		||||
    return Objects.equals(id, user.id) &&
 | 
			
		||||
 | 
			
		||||
    return true && Objects.equals(id, user.id) &&
 | 
			
		||||
        Objects.equals(username, user.username) &&
 | 
			
		||||
        Objects.equals(firstName, user.firstName) &&
 | 
			
		||||
        Objects.equals(lastName, user.lastName) &&
 | 
			
		||||
        Objects.equals(email, user.email) &&
 | 
			
		||||
        Objects.equals(password, user.password) &&
 | 
			
		||||
        Objects.equals(phone, user.phone) &&
 | 
			
		||||
        Objects.equals(userStatus, user.userStatus);
 | 
			
		||||
        Objects.equals(userStatus, user.userStatus)
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user