From cf39008d80a229c01dc229ec3de1b491055ac547 Mon Sep 17 00:00:00 2001 From: Jayendra Date: Sat, 13 Jul 2019 14:26:01 +0530 Subject: [PATCH 1/2] Added test Endpoints --- pom.xml | 13 ++ src/main/java/biz/nynja/airdrop/Config.java | 1 - .../airdrop/controller/AirdropController.java | 113 +++++++++++++++--- .../airdrop/grpc/AccountServiceClient.java | 36 ++++++ .../nynja/airdrop/grpc/AuthServiceClient.java | 17 +-- .../AuthorizationServerConfiguration.java | 6 +- .../airdrop/security/CustomTokenEnhancer.java | 22 ++++ .../security/ResourceServerConfiguration.java | 3 +- 8 files changed, 175 insertions(+), 36 deletions(-) create mode 100644 src/main/java/biz/nynja/airdrop/security/CustomTokenEnhancer.java diff --git a/pom.xml b/pom.xml index c70a3ef..450d13c 100644 --- a/pom.xml +++ b/pom.xml @@ -138,6 +138,7 @@ + kr.motd.maven @@ -146,6 +147,18 @@ + + org.springframework.boot + spring-boot-maven-plugin + 2.0.5.RELEASE + + + + repackage + + + + org.xolstice.maven.plugins protobuf-maven-plugin diff --git a/src/main/java/biz/nynja/airdrop/Config.java b/src/main/java/biz/nynja/airdrop/Config.java index d6bdd66..31ca8f5 100644 --- a/src/main/java/biz/nynja/airdrop/Config.java +++ b/src/main/java/biz/nynja/airdrop/Config.java @@ -11,7 +11,6 @@ import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; import org.springframework.context.annotation.Bean; diff --git a/src/main/java/biz/nynja/airdrop/controller/AirdropController.java b/src/main/java/biz/nynja/airdrop/controller/AirdropController.java index 5f479cd..5c03e6a 100644 --- a/src/main/java/biz/nynja/airdrop/controller/AirdropController.java +++ b/src/main/java/biz/nynja/airdrop/controller/AirdropController.java @@ -1,5 +1,6 @@ package biz.nynja.airdrop.controller; +import biz.nynja.account.grpc.SearchResponse; import biz.nynja.airdrop.constants.Constants; import biz.nynja.airdrop.entity.ActionsFailed; import biz.nynja.airdrop.entity.AirdropActions; @@ -14,6 +15,8 @@ import biz.nynja.airdrop.util.AirdropUtil; import biz.nynja.airdrop.util.HttpConstants; import biz.nynja.airdrop.util.HttpResponse; import biz.nynja.airdrop.util.RestTemplateUtil; +import biz.nynja.authentication.grpc.GenerateTokenResponse; +import com.fasterxml.jackson.databind.ObjectMapper; import io.micrometer.core.annotation.Timed; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -93,59 +96,135 @@ public class AirdropController { } - @GetMapping("/test11") - public String test11() { + @GetMapping("/test/1") + public String testEndpoint1() { return "Test Endpoint WITH Token"; } - @GetMapping("/test12") - public String test12() { + @GetMapping("/test/2") + public String testEndpoint2() { return "Test Endpoint WITH-OUT Token"; } + @GetMapping("/tokenDetails") + public String getTokenDetails() throws IOException { + + + ObjectMapper objectMapper = new ObjectMapper(); + Map response = objectMapper.readValue(AirdropController.class.getClassLoader().getResourceAsStream("token/token.json"), Map.class); + + System.out.println(""); + System.out.println("--------------"); + System.out.println(""); + System.out.println("Response :"); + System.out.println(response); + System.out.println(""); + System.out.println("--------------"); + System.out.println(""); + + return response.toString(); + } + + @GetMapping("/test/verifyAccount/{username}") - public String test1(@PathVariable("username") String username) { + public String test1(@PathVariable("username") String username, + @RequestHeader(value = "Authorization", required = false) String token) { System.out.println(""); System.out.println("--------------"); System.out.println(""); System.out.println("Testing verifyAccount Endpoint"); System.out.println(""); + System.out.println("Token : " + token); + System.out.println(""); System.out.println("username : " + username); System.out.println("AccessToken : " + authServiceClient.tokens.get("accessToken")); System.out.println(""); System.out.println("--------------"); System.out.println(""); + SearchResponse searchResponse; - UUID accountId = accountServiceClient.verifyAccount(username, authServiceClient.tokens.get("accessToken")); + if (token == null) { + + System.out.println(""); + System.out.println("Using File Token"); + System.out.println(""); + + searchResponse = accountServiceClient.accountEndpointTest(username, authServiceClient.tokens.get("accessToken")); + } else { + + + System.out.println(""); + System.out.println("Using Provided Token"); + System.out.println(""); + + searchResponse = accountServiceClient.accountEndpointTest(username, token); + } - return "VerifyAccount-Response : " + accountId; + System.out.println(""); + System.out.println("Search Respponse : "); + System.out.println(searchResponse); + System.out.println(""); + System.out.println("Search Ressponse String : "); + System.out.println(searchResponse.toString()); + System.out.println(""); + + + return searchResponse.toString(); } @GetMapping("/test/exchangeToken") - public String test2() throws IOException { + public String test2(@RequestHeader(value = "Authorization", required = false) String refreshToken) throws IOException { System.out.println(""); System.out.println("--------------"); System.out.println(""); - System.out.println("Testing Exchange-Token Endpoint"); + System.out.println("Exchange-Token Endpoint"); + System.out.println(""); + System.out.println("RefreshToken : " + refreshToken); + System.out.println("RefreshToken(From-File) : " + authServiceClient.tokens.get("refreshToken")); System.out.println(""); System.out.println("--------------"); System.out.println(""); - boolean response = authServiceClient.exchangeRefreshToken(); + GenerateTokenResponse tokenResponse; - return "ExchangeToken-Response : " + response; - } + if (refreshToken == null) { + + System.out.println(""); + System.out.println("Using File Token"); + System.out.println(""); + + tokenResponse = authServiceClient.exchangeRefreshTokenManual(authServiceClient.tokens.get("refreshToken")); + + } else { + System.out.println(""); + System.out.println("Using Provided Token"); + System.out.println(""); + + tokenResponse = authServiceClient.exchangeRefreshTokenManual(refreshToken); + } - @GetMapping("/test/exchangeToken/refreshToken/{refreshToken}") + System.out.println(""); + System.out.println("TokenResponse :"); + System.out.println(tokenResponse); + System.out.println(""); + System.out.println("TokenResponse :"); + System.out.println(tokenResponse.toString()); + System.out.println(""); + + return tokenResponse.toString(); + } + + + @GetMapping("/test/exchangeTokenRefreshToken/{refreshToken}") public String test3(@PathVariable("refreshToken") String refreshToken) throws IOException { System.out.println(""); @@ -153,14 +232,12 @@ public class AirdropController { System.out.println(""); System.out.println("Testing Exchange-Token Endpoint By Manual Refresh-Token"); System.out.println(""); - System.out.println("GivenRefreshToken : " + refreshToken); + System.out.println("GivenRefreshToken : " + refreshToken); System.out.println(""); System.out.println("--------------"); System.out.println(""); - boolean response = authServiceClient.exchangeRefreshTokenManual(refreshToken); - - return "ExchangeTokenManual-Response : " + response; + return authServiceClient.exchangeRefreshTokenManual(refreshToken).toString(); } @@ -238,7 +315,7 @@ public class AirdropController { System.out.println(""); System.out.println("AccessToken : " + authServiceClient.tokens.get("accessToken")); System.out.println(""); - UUID accountId = accountServiceClient.verifyAccount(username, authServiceClient.tokens.get("accessToken") ); + UUID accountId = accountServiceClient.verifyAccount(username, authServiceClient.tokens.get("accessToken")); logger.info("accountId:"); logger.debug("{}", accountId); diff --git a/src/main/java/biz/nynja/airdrop/grpc/AccountServiceClient.java b/src/main/java/biz/nynja/airdrop/grpc/AccountServiceClient.java index 27c63c2..73e9756 100644 --- a/src/main/java/biz/nynja/airdrop/grpc/AccountServiceClient.java +++ b/src/main/java/biz/nynja/airdrop/grpc/AccountServiceClient.java @@ -7,6 +7,7 @@ import io.grpc.stub.MetadataUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; + import javax.annotation.PostConstruct; import java.util.UUID; @@ -42,6 +43,41 @@ public class AccountServiceClient { */ + public SearchResponse accountEndpointTest(String username, String token) { + + System.out.println(""); + System.out.println("---------------"); + System.out.println(""); + System.out.println("Account-Endpoint-Test Params :"); + System.out.println(""); + System.out.println("username : " + username); + System.out.println("token : " + token); + System.out.println(""); + System.out.println("---------------"); + System.out.println(""); + + + GetByUsernameRequest request = GetByUsernameRequest.newBuilder().setUsername(username).build(); + + Metadata header = new Metadata(); + Metadata.Key key = + Metadata.Key.of("Authorization", Metadata.ASCII_STRING_MARSHALLER); + header.put(key, "Bearer " + token); + + + accountServiceStub = MetadataUtils.attachHeaders(accountServiceStub, header); + + SearchResponse searchByUserNameResponse = accountServiceStub.searchByUsername(request); + + System.out.println(""); + System.out.println("Account-Endpoint-Test Response :"); + System.out.println(""); + + return searchByUserNameResponse; + + } + + public UUID verifyAccount(String username, String token) { System.out.println(""); diff --git a/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java b/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java index bdd8113..ac8015f 100644 --- a/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java +++ b/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java @@ -52,8 +52,7 @@ public class AuthServiceClient extends AuthenticationServiceGrpc.AuthenticationS } - - public boolean exchangeRefreshTokenManual(String refreshToken) throws IOException { + public GenerateTokenResponse exchangeRefreshTokenManual(String refreshToken) throws IOException { System.out.println(""); System.out.println("---------------"); @@ -66,8 +65,8 @@ public class AuthServiceClient extends AuthenticationServiceGrpc.AuthenticationS System.out.println(""); ExchangeRefreshTokenRequest request = ExchangeRefreshTokenRequest.newBuilder().setRefreshToken(refreshToken).build(); - GenerateTokenResponse generateTokenResponse = authenticationServiceStub.exchangeRefreshToken(request); + TokenResponseDetails tokenResponseDetails = generateTokenResponse.getTokenResponseDetails(); ErrorResponse errorResponse = generateTokenResponse.getError(); @@ -86,19 +85,9 @@ public class AuthServiceClient extends AuthenticationServiceGrpc.AuthenticationS System.out.println(""); System.out.println("Exchange Refresh Token Failed"); System.out.println(""); - - return false; } - String accessToken = tokenResponseDetails.getToken(); - String newRefreshToken = tokenResponseDetails.getRefreshToken(); - - System.out.println(""); - System.out.println("New Access Token : " + accessToken); - System.out.println("New Refresh Token : " + newRefreshToken); - System.out.println(""); - - return true; + return generateTokenResponse; } public boolean exchangeRefreshToken() throws IOException { diff --git a/src/main/java/biz/nynja/airdrop/security/AuthorizationServerConfiguration.java b/src/main/java/biz/nynja/airdrop/security/AuthorizationServerConfiguration.java index 2c4e065..f7e7d73 100644 --- a/src/main/java/biz/nynja/airdrop/security/AuthorizationServerConfiguration.java +++ b/src/main/java/biz/nynja/airdrop/security/AuthorizationServerConfiguration.java @@ -42,15 +42,16 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfigu @Qualifier("authenticationManagerBean") private AuthenticationManager authenticationManager; + @Autowired + private CustomTokenEnhancer customTokenEnhancer; @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints .authenticationManager(authenticationManager) - .tokenStore(tokenStore); + .tokenStore(tokenStore).tokenEnhancer(customTokenEnhancer); } - @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() @@ -62,6 +63,7 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfigu // .secret(passwordEncoder.encode("password")) .accessTokenValiditySeconds(-1) .secret(secret); + } diff --git a/src/main/java/biz/nynja/airdrop/security/CustomTokenEnhancer.java b/src/main/java/biz/nynja/airdrop/security/CustomTokenEnhancer.java new file mode 100644 index 0000000..ec13ed7 --- /dev/null +++ b/src/main/java/biz/nynja/airdrop/security/CustomTokenEnhancer.java @@ -0,0 +1,22 @@ +package biz.nynja.airdrop.security; + +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.stereotype.Component; + +@Component +public class CustomTokenEnhancer implements org.springframework.security.oauth2.provider.token.TokenEnhancer { + + @Override + public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) { + + // Map additionalInfo = new HashMap<>(); + // additionalInfo.put("customInfo", "some_stuff_here"); + // ((DefaultOAuth2AccessToken) oAuth2AccessToken).setAdditionalInformation(additionalInfo); + + ((DefaultOAuth2AccessToken) oAuth2AccessToken).setRefreshToken(null); + + return oAuth2AccessToken; + } +} diff --git a/src/main/java/biz/nynja/airdrop/security/ResourceServerConfiguration.java b/src/main/java/biz/nynja/airdrop/security/ResourceServerConfiguration.java index 348134f..afe5852 100644 --- a/src/main/java/biz/nynja/airdrop/security/ResourceServerConfiguration.java +++ b/src/main/java/biz/nynja/airdrop/security/ResourceServerConfiguration.java @@ -21,6 +21,7 @@ public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter .authorizeRequests().antMatchers(qoinProEndPoints).hasRole("USER") .and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler()); - } + + } -- GitLab From 8be8c09a2b6460b27f712e7b1652764f6feff6d6 Mon Sep 17 00:00:00 2001 From: Jayendra Date: Sat, 13 Jul 2019 15:00:34 +0530 Subject: [PATCH 2/2] Added grpc test endpoints --- pom.xml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 6e6a959..d6e13ff 100644 --- a/pom.xml +++ b/pom.xml @@ -209,18 +209,6 @@ 8 - - org.springframework.boot - spring-boot-maven-plugin - 2.0.5.RELEASE - - - - repackage - - - - - + \ No newline at end of file -- GitLab