package org.jsondoc.core.scanner.builder; import java.lang.reflect.Method; import java.util.Arrays; import org.jsondoc.core.annotation.ApiAuthBasic; import org.jsondoc.core.annotation.ApiAuthBasicUser; import org.jsondoc.core.annotation.ApiAuthNone; import org.jsondoc.core.annotation.ApiAuthToken; import org.jsondoc.core.pojo.ApiAuthDoc; import org.jsondoc.core.pojo.ApiAuthType; import org.jsondoc.core.scanner.DefaultJSONDocScanner; public class JSONDocApiAuthDocBuilder { public static ApiAuthDoc getApiAuthDocForController(Class<?> controller) { if(controller.isAnnotationPresent(ApiAuthNone.class)) { return buildFromApiAuthNoneAnnotation(controller.getAnnotation(ApiAuthNone.class)); } if(controller.isAnnotationPresent(ApiAuthBasic.class)) { return buildFromApiAuthBasicAnnotation(controller.getAnnotation(ApiAuthBasic.class)); } if(controller.isAnnotationPresent(ApiAuthToken.class)) { return buildFromApiAuthTokenAnnotation(controller.getAnnotation(ApiAuthToken.class)); } return null; } public static ApiAuthDoc getApiAuthDocForMethod(Method method) { if(method.isAnnotationPresent(ApiAuthNone.class)) { return buildFromApiAuthNoneAnnotation(method.getAnnotation(ApiAuthNone.class)); } if(method.isAnnotationPresent(ApiAuthBasic.class)) { return buildFromApiAuthBasicAnnotation(method.getAnnotation(ApiAuthBasic.class)); } if(method.isAnnotationPresent(ApiAuthToken.class)) { return buildFromApiAuthTokenAnnotation(method.getAnnotation(ApiAuthToken.class)); } return getApiAuthDocForController(method.getDeclaringClass()); } private static ApiAuthDoc buildFromApiAuthNoneAnnotation(ApiAuthNone annotation) { ApiAuthDoc apiAuthDoc = new ApiAuthDoc(); apiAuthDoc.setType(ApiAuthType.NONE.name()); apiAuthDoc.addRole(DefaultJSONDocScanner.ANONYMOUS); return apiAuthDoc; } private static ApiAuthDoc buildFromApiAuthBasicAnnotation(ApiAuthBasic annotation) { ApiAuthDoc apiAuthDoc = new ApiAuthDoc(); apiAuthDoc.setType(ApiAuthType.BASIC_AUTH.name()); apiAuthDoc.setRoles(Arrays.asList(annotation.roles())); for (ApiAuthBasicUser testuser : annotation.testusers()) { apiAuthDoc.addTestUser(testuser.username(), testuser.password()); } return apiAuthDoc; } private static ApiAuthDoc buildFromApiAuthTokenAnnotation(ApiAuthToken annotation) { ApiAuthDoc apiAuthDoc = new ApiAuthDoc(); apiAuthDoc.setType(ApiAuthType.TOKEN.name()); apiAuthDoc.setScheme(annotation.scheme()); apiAuthDoc.setRoles(Arrays.asList(annotation.roles())); for (String testtoken : annotation.testtokens()) { apiAuthDoc.addTestToken(testtoken); } return apiAuthDoc; } }