diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java index 235a9b5ba6b..69db1b9d2da 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenConfig.java @@ -1,6 +1,7 @@ package com.wordnik.swagger.codegen; import com.wordnik.swagger.models.*; +import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; import com.wordnik.swagger.models.properties.*; import java.util.*; @@ -35,6 +36,8 @@ public interface CodegenConfig { CodegenModel fromModel(String name, Model model); CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation); + List fromSecurity(Map schemes); + Set defaultIncludes(); Map typeMapping(); Map instantiationTypes(); diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenModelType.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenModelType.java index 41c877532f0..62f515b6c69 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenModelType.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenModelType.java @@ -6,7 +6,8 @@ public enum CodegenModelType { OPERATION(CodegenOperation.class), PARAMETER(CodegenParameter.class), PROPERTY(CodegenProperty.class), - RESPONSE(CodegenResponse.class); + RESPONSE(CodegenResponse.class), + SECURITY(CodegenSecurity.class); private final Class defaultImplementation; diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenOperation.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenOperation.java index af192e7e98a..12b405edeb4 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenOperation.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenOperation.java @@ -18,6 +18,7 @@ public class CodegenOperation { public List queryParams = new ArrayList(); public List headerParams = new ArrayList(); public List formParams = new ArrayList(); + public List authMethods; public List tags; public List responses = new ArrayList(); public final List responseHeaders = new ArrayList(); diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenSecurity.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenSecurity.java new file mode 100644 index 00000000000..7323893106f --- /dev/null +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/CodegenSecurity.java @@ -0,0 +1,7 @@ +package com.wordnik.swagger.codegen; + +public class CodegenSecurity { + String name; + String type; + Boolean hasMore; +} diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index e121044b542..2abcfad31ea 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -1,6 +1,7 @@ package com.wordnik.swagger.codegen; import com.wordnik.swagger.models.*; +import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; import com.wordnik.swagger.models.parameters.*; import com.wordnik.swagger.models.properties.*; import com.wordnik.swagger.util.Json; @@ -880,6 +881,23 @@ public class DefaultCodegen { return p; } + public List fromSecurity(Map schemes) { + if(schemes == null) + return null; + + List secs = new ArrayList(); + for(Iterator entries = schemes.entrySet().iterator(); entries.hasNext(); ) { + Map.Entry entry = (Map.Entry) entries.next(); + + CodegenSecurity sec = CodegenModelFactory.newInstance(CodegenModelType.SECURITY); + sec.name = entry.getKey(); + sec.type = entry.getValue().getType(); + sec.hasMore = entries.hasNext(); + secs.add(sec); + } + return secs; + } + protected List> toExamples(Map examples) { if(examples == null) return null; diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java index 9237e1c9c6c..5a405bd2ed3 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java @@ -1,6 +1,7 @@ package com.wordnik.swagger.codegen; import com.wordnik.swagger.models.*; +import com.wordnik.swagger.models.auth.SecuritySchemeDefinition; import com.wordnik.swagger.util.*; import com.samskivert.mustache.*; @@ -227,20 +228,49 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { return ops; } + public SecuritySchemeDefinition fromSecurity(String name) { + Map map = swagger.getSecurityDefinitions(); + if(map == null) + return null; + SecuritySchemeDefinition scheme = map.get(name); + if(scheme == null) + return null; + return scheme; + } + + + public void processOperation(String resourcePath, String httpMethod, Operation operation, Map> operations) { if(operation != null) { List tags = operation.getTags(); - if(tags == null) { + if (tags == null) { tags = new ArrayList(); tags.add("default"); } - for(String tag : tags) { + for (String tag : tags) { CodegenOperation co = config.fromOperation(resourcePath, httpMethod, operation); co.tags = new ArrayList(); co.tags.add(sanitizeTag(tag)); - config.addOperationToGroup(sanitizeTag(tag), resourcePath, operation, co, operations); + + List>> securities = operation.getSecurity(); + if(securities == null) + continue; + Map authMethods = new HashMap(); + for (Map> security : securities) { + if (security.size() != 1) { + //Not sure what to do + continue; + } + String securityName = security.keySet().iterator().next(); + SecuritySchemeDefinition securityDefinition = fromSecurity(securityName); + if(securityDefinition != null) + authMethods.put(securityName, securityDefinition); + } + if(!authMethods.isEmpty()) { + co.authMethods = config.fromSecurity(authMethods); + } } } }