ApacheConfGen for HTTP Basic Authentication Proposed implementation (#5800)

* - Added Restbed Generator

* - Added Json processing functions to model
- Removed unnused code from restbed codegen class
- Added response header processing to api template

* Changed it to respect alphabetical order

* Made the string joining java 7 compatible

* Added samples

* Auto stash before merge of "master" and "origin/master"

* added missing apache2 config gen in services file

* - Added new Config Type
- Added Samples
- Added sample generating scripts
- Renamed Apache2Confgen to Apache2ConfigCodegen

* - Added Samples
- Added new config type
- Added sample generating scripts
- Renamed Apache2Confgen to Apache2ConfigCodegen
This commit is contained in:
stkrwork 2017-06-27 20:48:53 +02:00 committed by wing328
parent 91f470e41f
commit 3c0623cce1
12 changed files with 423 additions and 1 deletions

View File

@ -0,0 +1,31 @@
#!/usr/bin/env bash
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -l apache2 -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -o samples/config/petstore/apache2"
java $JAVA_OPTS -jar $executable $ags

View File

@ -0,0 +1,10 @@
set executable=.\modules\swagger-codegen-cli\target\swagger-codegen-cli.jar
If Not Exist %executable% (
mvn clean package
)
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore.yaml -l apache2 -o samples\config\petstore\apache2\
java %JAVA_OPTS% -jar %executable% %ags%

View File

@ -7,7 +7,7 @@ import java.util.HashMap;
import java.util.Map;
public enum CodegenType {
CLIENT, SERVER, DOCUMENTATION, OTHER;
CLIENT, SERVER, DOCUMENTATION, CONFIG, OTHER;
private static Map<String, CodegenType> names = new HashMap<String, CodegenType>();

View File

@ -0,0 +1,106 @@
package io.swagger.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 io.swagger.codegen.CliOption;
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.CodegenConstants;
import io.swagger.codegen.CodegenOperation;
import io.swagger.codegen.CodegenType;
import io.swagger.codegen.DefaultCodegen;
import io.swagger.codegen.SupportingFile;
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<String, Object> postProcessOperations(Map<String, Object> objs) {
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
List<CodegenOperation> newOpList = new ArrayList<CodegenOperation>();
for (CodegenOperation op : operationList) {
String path = new String(op.path);
String[] items = path.split("/", -1);
List<String> splitPath = new ArrayList<String>();
for (String item: items) {
if (item.matches("^\\{(.*)\\}$")) {
item = "*";
}
splitPath.add(item);
}
op.path = String.join("/", splitPath);
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<CodegenOperation> currentOtherMethodList = (List<CodegenOperation>) op1.vendorExtensions.get("x-codegen-otherMethods");
if (currentOtherMethodList == null) {
currentOtherMethodList = new ArrayList<CodegenOperation>();
}
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;
}
}

View File

@ -1,5 +1,6 @@
io.swagger.codegen.languages.AkkaScalaClientCodegen
io.swagger.codegen.languages.AndroidClientCodegen
io.swagger.codegen.languages.Apache2ConfigCodegen
io.swagger.codegen.languages.ApexClientCodegen
io.swagger.codegen.languages.AspNet5ServerCodegen
io.swagger.codegen.languages.AspNetCoreServerCodegen

View File

@ -0,0 +1,44 @@
{{#operations}}
{{#operation}}
<Location "{{basePathWithoutHost}}{{path}}">
{{>authConf}}
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
{{#hasAuthMethods}}
{{#authMethods}}
{{#isOAuth}}
<Limit {{httpMethod}}>
{{#scopes}}
Require group {{scope}}
{{/scopes}}
</Limit>
{{/isOAuth}}
{{/authMethods}}
{{/hasAuthMethods}}
{{^hasAuthMethods}}
<Limit {{httpMethod}}>
Require valid-user
</Limit>
{{/hasAuthMethods}}
{{#vendorExtensions.x-codegen-otherMethods}}
{{#hasAuthMethods}}
{{#authMethods}}
{{#isOAuth}}
<Limit {{httpMethod}}>
{{#scopes}}
Require group {{scope}}
{{/scopes}}
</Limit>
{{/isOAuth}}
{{/authMethods}}
{{/hasAuthMethods}}
{{^hasAuthMethods}}
<Limit {{httpMethod}}>
Require valid-user
</Limit>
{{/hasAuthMethods}}
{{/vendorExtensions.x-codegen-otherMethods}}
</Location>
{{/operation}}
{{/operations}}

View File

@ -0,0 +1,5 @@
AuthBasicProvider file
AuthUserFile "{{vendorExtensions.x-codegen-userInfoPath}}htpwd"
AuthGroupFile "{{vendorExtensions.x-codegen-userInfoPath}}groups"
AuthType basic
AuthName "api"

View File

@ -0,0 +1,23 @@
# Swagger Codegen Ignore
# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md

View File

@ -0,0 +1 @@
2.2.3-SNAPSHOT

View File

@ -0,0 +1,78 @@
<Location "/v2/pet">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit POST>
Require group write:pets
Require group read:pets
</Limit>
<Limit PUT>
Require group write:pets
Require group read:pets
</Limit>
</Location>
<Location "/v2/pet/*">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit DELETE>
Require group write:pets
Require group read:pets
</Limit>
<Limit POST>
Require group write:pets
Require group read:pets
</Limit>
</Location>
<Location "/v2/pet/findByStatus">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit GET>
Require group write:pets
Require group read:pets
</Limit>
</Location>
<Location "/v2/pet/findByTags">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit GET>
Require group write:pets
Require group read:pets
</Limit>
</Location>
<Location "/v2/pet/*/uploadImage">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit POST>
Require group write:pets
Require group read:pets
</Limit>
</Location>

View File

@ -0,0 +1,39 @@
<Location "/v2/store/order/*">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit DELETE>
Require valid-user
</Limit>
<Limit GET>
Require valid-user
</Limit>
</Location>
<Location "/v2/store/inventory">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
</Location>
<Location "/v2/store/order">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit POST>
Require valid-user
</Limit>
</Location>

View File

@ -0,0 +1,84 @@
<Location "/v2/user">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit POST>
Require valid-user
</Limit>
</Location>
<Location "/v2/user/createWithArray">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit POST>
Require valid-user
</Limit>
</Location>
<Location "/v2/user/createWithList">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit POST>
Require valid-user
</Limit>
</Location>
<Location "/v2/user/*">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit DELETE>
Require valid-user
</Limit>
<Limit GET>
Require valid-user
</Limit>
<Limit PUT>
Require valid-user
</Limit>
</Location>
<Location "/v2/user/login">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit GET>
Require valid-user
</Limit>
</Location>
<Location "/v2/user/logout">
AuthBasicProvider file
AuthUserFile "/var/www/html/htpwd"
AuthGroupFile "/var/www/html/groups"
AuthType basic
AuthName "api"
<LimitExcept GET POST PUT DELETE>
Require valid-user
</LimitExcept>
<Limit GET>
Require valid-user
</Limit>
</Location>