From a58e6453720060b7470cb9801dc54757796e13f2 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 27 Mar 2018 22:50:48 +0800 Subject: [PATCH] add apache 2 config generator --- .../languages/Apache2ConfigCodegen.java | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Apache2ConfigCodegen.java diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Apache2ConfigCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Apache2ConfigCodegen.java new file mode 100644 index 00000000000..1876022d9e4 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Apache2ConfigCodegen.java @@ -0,0 +1,110 @@ +package org.openapitools.codegen.languages; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.CodegenConfig; +import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.DefaultCodegen; +import org.openapitools.codegen.SupportingFile; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.Operation; +import io.swagger.v3.oas.models.media.*; + + +public class Apache2ConfigCodegen extends DefaultCodegen implements CodegenConfig { + public static final String USER_INFO_PATH = "userInfoPath"; + protected String userInfoPath = "/var/www/html/"; + + @Override + public CodegenType getTag() { + return CodegenType.CONFIG; + } + + @Override + public String getName() { + return "apache2"; + } + + @Override + public String getHelp() { + return "Generates an Apache2 Config file with the permissions"; + } + + public Apache2ConfigCodegen() { + super(); + apiTemplateFiles.put("apache-config.mustache", ".conf"); + + embeddedTemplateDir = templateDir = "apache2"; + + cliOptions.add(new CliOption(USER_INFO_PATH, "Path to the user and group files")); + } + + + @Override + public void processOpts() { + if (additionalProperties.containsKey(USER_INFO_PATH)) { + userInfoPath = additionalProperties.get(USER_INFO_PATH).toString(); + } + } + + @Override + public String escapeQuotationMark(String input) { + // remove " to avoid code injection + return input.replace("\"", ""); + } + + @Override + public String escapeUnsafeCharacters(String input) { + return input.replace("*/", "*_/").replace("/*", "/_*"); + } + + @SuppressWarnings("unchecked") + @Override + public Map postProcessOperations(Map objs) { + Map operations = (Map) objs.get("operations"); + List operationList = (List) operations.get("operation"); + List newOpList = new ArrayList(); + for (CodegenOperation op : operationList) { + String path = new String(op.path); + + String[] items = path.split("/", -1); + List splitPath = new ArrayList(); + for (String item : items) { + if (item.matches("^\\{(.*)\\}$")) { + item = "*"; + } + splitPath.add(item); + op.path += item + "/"; + } + op.vendorExtensions.put("x-codegen-userInfoPath", userInfoPath); + boolean foundInNewList = false; + for (CodegenOperation op1 : newOpList) { + if (!foundInNewList) { + if (op1.path.equals(op.path)) { + foundInNewList = true; + List currentOtherMethodList = (List) op1.vendorExtensions.get("x-codegen-otherMethods"); + if (currentOtherMethodList == null) { + currentOtherMethodList = new ArrayList(); + } + op.operationIdCamelCase = op1.operationIdCamelCase; + currentOtherMethodList.add(op); + op1.vendorExtensions.put("x-codegen-otherMethods", currentOtherMethodList); + } + } + } + if (!foundInNewList) { + newOpList.add(op); + } + } + operations.put("operation", newOpList); + return objs; + } +}