package cc.mrbird.febs.common.doc.starter.configure; import cc.mrbird.febs.common.doc.starter.properties.FebsDocProperties; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; import com.google.common.collect.Lists; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.core.annotation.Order; import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.List; /** * @author MrBird */ @Configuration @EnableSwagger2 @EnableKnife4j @Import(BeanValidatorPluginsConfiguration.class) @EnableConfigurationProperties(FebsDocProperties.class) @ConditionalOnProperty(value = "febs.doc.enable", havingValue = "true", matchIfMissing = true) public class FebsDocAutoConfigure { private final FebsDocProperties properties; public FebsDocAutoConfigure(FebsDocProperties properties) { this.properties = properties; } @Bean @Order(-1) public Docket groupRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(groupApiInfo()) .select() .apis(RequestHandlerSelectors.basePackage(properties.getBasePackage())) .paths(PathSelectors.any()) .build().securityContexts(Lists.newArrayList(securityContext())).securitySchemes(Lists.newArrayList(apiKey())); } private ApiInfo groupApiInfo() { String description = String.format("
%s
", properties.getDescriptionFontSize(), properties.getDescriptionColor(), properties.getDescription()); Contact contact = new Contact(properties.getName(), properties.getUrl(), properties.getEmail()); return new ApiInfoBuilder() .title(properties.getTitle()) .description(description) .termsOfServiceUrl(properties.getTermsOfServiceUrl()) .contact(contact) .license(properties.getLicense()) .licenseUrl(properties.getLicenseUrl()) .version(properties.getVersion()) .build(); } private ApiKey apiKey() { return new ApiKey("BearerToken", "Authorization", "header"); } private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("/.*")) .build(); } List defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return Lists.newArrayList(new SecurityReference("BearerToken", authorizationScopes)); } }