// Path: lolibox-server/src/main/java/io/loli/box/oauth2/AuthorizationServerConfiguration.java
// @Configuration
// @EnableAuthorizationServer
// @Order(3)
// @EntityScan("io.loli.box.oauth2")
// @ConfigurationProperties(prefix = "oauth2")
// public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
// 
//     private static final Log logger = LogFactory
//             .getLog(AuthorizationServerConfiguration.class);
// 
// 
//     private List<OauthClient> clients;
// 
// 
//     @Autowired
//     private AuthenticationManager authenticationManager;
// 
//     @Autowired(required = false)
//     private TokenStore tokenStore;
// 
//     @Autowired
//     private DataSource ds;
// 
//     @Override
//     public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
//         // TODO Add JPA Builder
//         JdbcClientDetailsServiceBuilder builder = clients
//                 .jdbc(ds);
//         if (this.clients != null) {
//             FinalValueHolder<ClientDetailsServiceBuilder> detailHolder = new FinalValueHolder<>(builder);
//             this.clients.forEach(c -> detailHolder.setValue(detailHolder.getValue().withClient(c.getName()).secret(c.getSecret())
//                     .authorizedGrantTypes("password")
//                     .authorities("ROLE_CLIENT")
//                     .scopes("read", "write")
//                     .resourceIds("oauth2-resource")
//                     .accessTokenValiditySeconds(Integer.MAX_VALUE).and()));
//         }
//     }
// 
//     @Override
//     public void configure(AuthorizationServerEndpointsConfigurer endpoints)
//             throws Exception {
//         if (this.tokenStore != null) {
//             endpoints.tokenStore(this.tokenStore);
//         }
//         endpoints.authenticationManager(this.authenticationManager);
//     }
// 
//     public static class OauthClient {
//         private String name;
//         private String secret;
// 
//         public String getName() {
//             return name;
//         }
// 
//         public void setName(String name) {
//             this.name = name;
//         }
// 
//         public String getSecret() {
//             return secret;
//         }
// 
//         public void setSecret(String secret) {
//             this.secret = secret;
//         }
//     }
// 
//     public List<OauthClient> getClients() {
//         return clients;
//     }
// 
//     public void setClients(List<OauthClient> clients) {
//         this.clients = clients;
//     }
// }
// 
// Path: lolibox-server/src/main/java/io/loli/box/oauth2/ResourceServer.java
// @Configuration
// @EnableResourceServer
// public class ResourceServer extends ResourceServerConfigurerAdapter {
// 
//     @Override
//     public void configure(HttpSecurity http) throws Exception {
//         http.antMatcher("/image/oauthUpload")
//                 .authorizeRequests().anyRequest().access("#oauth2.hasScope('write')");
//     }
// 
//     @Autowired
//     private TokenStore tokenStore;
// 
//     @Override
//     public void configure(ResourceServerSecurityConfigurer resources)
//             throws Exception {
//         resources.tokenStore(tokenStore);
//     }
// 
// }


import io.loli.box.oauth2.AuthorizationServerConfiguration;
import io.loli.box.oauth2.ResourceServer;
import org.hashids.Hashids;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.social.config.annotation.EnableSocial;
import javax.servlet.ServletContext;
package io.loli.box;



@SpringBootApplication
@EnableZuulProxy
@EnableJpaRepositories
// Path: lolibox-server/src/main/java/io/loli/box/oauth2/AuthorizationServerConfiguration.java
// @Configuration
// @EnableAuthorizationServer
// @Order(3)
// @EntityScan("io.loli.box.oauth2")
// @ConfigurationProperties(prefix = "oauth2")
// public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
// 
//     private static final Log logger = LogFactory
//             .getLog(AuthorizationServerConfiguration.class);
// 
// 
//     private List<OauthClient> clients;
// 
// 
//     @Autowired
//     private AuthenticationManager authenticationManager;
// 
//     @Autowired(required = false)
//     private TokenStore tokenStore;
// 
//     @Autowired
//     private DataSource ds;
// 
//     @Override
//     public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
//         // TODO Add JPA Builder
//         JdbcClientDetailsServiceBuilder builder = clients
//                 .jdbc(ds);
//         if (this.clients != null) {
//             FinalValueHolder<ClientDetailsServiceBuilder> detailHolder = new FinalValueHolder<>(builder);
//             this.clients.forEach(c -> detailHolder.setValue(detailHolder.getValue().withClient(c.getName()).secret(c.getSecret())
//                     .authorizedGrantTypes("password")
//                     .authorities("ROLE_CLIENT")
//                     .scopes("read", "write")
//                     .resourceIds("oauth2-resource")
//                     .accessTokenValiditySeconds(Integer.MAX_VALUE).and()));
//         }
//     }
// 
//     @Override
//     public void configure(AuthorizationServerEndpointsConfigurer endpoints)
//             throws Exception {
//         if (this.tokenStore != null) {
//             endpoints.tokenStore(this.tokenStore);
//         }
//         endpoints.authenticationManager(this.authenticationManager);
//     }
// 
//     public static class OauthClient {
//         private String name;
//         private String secret;
// 
//         public String getName() {
//             return name;
//         }
// 
//         public void setName(String name) {
//             this.name = name;
//         }
// 
//         public String getSecret() {
//             return secret;
//         }
// 
//         public void setSecret(String secret) {
//             this.secret = secret;
//         }
//     }
// 
//     public List<OauthClient> getClients() {
//         return clients;
//     }
// 
//     public void setClients(List<OauthClient> clients) {
//         this.clients = clients;
//     }
// }
// 
// Path: lolibox-server/src/main/java/io/loli/box/oauth2/ResourceServer.java
// @Configuration
// @EnableResourceServer
// public class ResourceServer extends ResourceServerConfigurerAdapter {
// 
//     @Override
//     public void configure(HttpSecurity http) throws Exception {
//         http.antMatcher("/image/oauthUpload")
//                 .authorizeRequests().anyRequest().access("#oauth2.hasScope('write')");
//     }
// 
//     @Autowired
//     private TokenStore tokenStore;
// 
//     @Override
//     public void configure(ResourceServerSecurityConfigurer resources)
//             throws Exception {
//         resources.tokenStore(tokenStore);
//     }
// 
// }


// Path: lolibox-server/src/main/java/io/loli/box/LoliboxApplication.java
import io.loli.box.oauth2.AuthorizationServerConfiguration;
import io.loli.box.oauth2.ResourceServer;
import org.hashids.Hashids;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.social.config.annotation.EnableSocial;
import javax.servlet.ServletContext;

package io.loli.box;



@SpringBootApplication
@EnableZuulProxy
@EnableJpaRepositories
@Import({MvcConfig.class, SecurityConfig.class, AuthorizationServerConfiguration.class, ResourceServer.class})