From 7d68bc05af3432ee5a97a27c5322a81a82b244ca Mon Sep 17 00:00:00 2001 From: Shree Lakshmi Ramasubramanian Date: Mon, 20 Sep 2021 11:29:58 -0400 Subject: [PATCH 1/2] setting up initial authentication setup --- pom.xml | 48 +++++++++++++--- .../com/se21/Calendar/GoogleCalendar.java | 46 --------------- .../{Calendar.java => mainCalendar.java} | 6 +- .../com/se21/calbot/CalBotApplication.java | 19 ++++++- .../java/com/se21/calbot/GoogleCalendar.java | 56 +++++++++++++++++++ .../calbot/controllers/TestController.java | 19 +++++++ 6 files changed, 135 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/com/se21/Calendar/GoogleCalendar.java rename src/main/java/com/se21/Calendar/{Calendar.java => mainCalendar.java} (71%) create mode 100644 src/main/java/com/se21/calbot/GoogleCalendar.java create mode 100644 src/main/java/com/se21/calbot/controllers/TestController.java diff --git a/pom.xml b/pom.xml index 3cdaead..f820618 100644 --- a/pom.xml +++ b/pom.xml @@ -29,10 +29,10 @@ org.springframework.boot spring-boot-starter-oauth2-client - - org.springframework.boot - spring-boot-starter-security - + + + + org.springframework.boot spring-boot-starter-web @@ -78,11 +78,11 @@ spring-restdocs-mockmvc test - - org.springframework.security - spring-security-test - test - + + + + + com.discord4j discord4j-core @@ -101,6 +101,36 @@ reactor-core 3.4.10 + + + com.google.api-client + google-api-client + 1.32.1 + + + + com.google.oauth-client + google-oauth-client + 1.32.1 + + + + com.google.apis + google-api-services-calendar + v3-rev411-1.25.0 + + + + com.google.oauth-client + google-oauth-client-jetty + 1.32.1 + + + + com.google.api-client + google-api-client-jackson2 + 1.20.0 + diff --git a/src/main/java/com/se21/Calendar/GoogleCalendar.java b/src/main/java/com/se21/Calendar/GoogleCalendar.java deleted file mode 100644 index 01191e4..0000000 --- a/src/main/java/com/se21/Calendar/GoogleCalendar.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.se21.Calendar; - -import org.json.simple.JSONObject; - -public class GoogleCalendar implements Calendar{ - - String accessToken; - String refreshToken; - String authToken; - - @Override - public JSONObject authenticate(JSONObject auth) { - - return null; - } - - @Override - public JSONObject retrieveEvents(JSONObject req) { - - return null; - } - - @Override - public Enums.calApiResponse updateEvents(JSONObject req) { - - return Enums.calApiResponse.Success; - } - - @Override - public Enums.calApiResponse addEvents() { - - return Enums.calApiResponse.Success; - } - - @Override - public Enums.calApiResponse deleteEvents() { - - return Enums.calApiResponse.Success; - } - - @Override - public Enums.calApiResponse createNewUnscheduledCalendar() { - - return Enums.calApiResponse.Success; - } -} diff --git a/src/main/java/com/se21/Calendar/Calendar.java b/src/main/java/com/se21/Calendar/mainCalendar.java similarity index 71% rename from src/main/java/com/se21/Calendar/Calendar.java rename to src/main/java/com/se21/Calendar/mainCalendar.java index 30db26d..ca6a6c8 100644 --- a/src/main/java/com/se21/Calendar/Calendar.java +++ b/src/main/java/com/se21/Calendar/mainCalendar.java @@ -2,9 +2,11 @@ import org.json.simple.JSONObject; -public interface Calendar { +import java.security.GeneralSecurityException; - JSONObject authenticate(JSONObject auth); +public interface mainCalendar { + + void authenticate() throws Exception; JSONObject retrieveEvents(JSONObject req); Enums.calApiResponse updateEvents(JSONObject req); Enums.calApiResponse addEvents(); diff --git a/src/main/java/com/se21/calbot/CalBotApplication.java b/src/main/java/com/se21/calbot/CalBotApplication.java index ddecaa8..850cdc5 100644 --- a/src/main/java/com/se21/calbot/CalBotApplication.java +++ b/src/main/java/com/se21/calbot/CalBotApplication.java @@ -1,12 +1,27 @@ package com.se21.calbot; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; -@SpringBootApplication -public class CalBotApplication { +@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) +@ComponentScan +@EnableAutoConfiguration +public class CalBotApplication implements ApplicationRunner { + + @Autowired + GoogleCalendar calendar; public static void main(String[] args) { SpringApplication.run(CalBotApplication.class, args); } + @Override + public void run(ApplicationArguments args) throws Exception { + calendar.authenticate(); + } } diff --git a/src/main/java/com/se21/calbot/GoogleCalendar.java b/src/main/java/com/se21/calbot/GoogleCalendar.java new file mode 100644 index 0000000..d2b07ab --- /dev/null +++ b/src/main/java/com/se21/calbot/GoogleCalendar.java @@ -0,0 +1,56 @@ +package com.se21.calbot; + +import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; +import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; +import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeRequestUrl; +import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; +import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; +import com.google.api.client.http.javanet.NetHttpTransport; +import com.google.api.client.json.JsonFactory; +import com.google.api.client.json.jackson2.JacksonFactory; +import com.google.api.client.util.store.FileDataStoreFactory; +import com.google.api.services.calendar.CalendarScopes; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Collections; +import java.util.List; + + +import org.springframework.stereotype.Component; + +@Component +public class GoogleCalendar { + + String accessToken; + String refreshToken; + String authToken; + private static final String CREDENTIALS_FILE_PATH = "/credentials.json"; + private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); + private static final String TOKENS_DIRECTORY_PATH = "tokens"; + private static final List SCOPES = Collections.singletonList(CalendarScopes.CALENDAR); + + public void authenticate() throws Exception { + // Load client secrets. + + InputStream in = GoogleCalendar.class.getResourceAsStream(CREDENTIALS_FILE_PATH); + if (in == null) { + throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH); + } + final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); + GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); + // Build flow and trigger user authorization request. + GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( + HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) + .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH))) + .setAccessType("offline") + .build(); + LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); + +// GoogleAuthorizationCodeRequestUrl url = flow.newAuthorizationUrl(); + System.out.println(flow.newAuthorizationUrl().toString()); +// return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user"); +// return null; + } +} diff --git a/src/main/java/com/se21/calbot/controllers/TestController.java b/src/main/java/com/se21/calbot/controllers/TestController.java new file mode 100644 index 0000000..040a112 --- /dev/null +++ b/src/main/java/com/se21/calbot/controllers/TestController.java @@ -0,0 +1,19 @@ +package com.se21.calbot.controllers; + +import com.se21.calbot.GoogleCalendar; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/test") +public class TestController { + @Autowired + GoogleCalendar googleCalendar; + + @GetMapping() + public void AuthenticateTest() throws Exception { + googleCalendar.authenticate(); + } +} From c8f80c89a3dc2d3e678f1bef782a01ee563a0ef1 Mon Sep 17 00:00:00 2001 From: Shree Lakshmi Ramasubramanian Date: Mon, 20 Sep 2021 17:44:36 -0400 Subject: [PATCH 2/2] updating redirect uri --- .../java/com/se21/calbot/CalBotApplication.java | 3 ++- src/main/java/com/se21/calbot/GoogleCalendar.java | 10 ++++++++-- .../se21/calbot/controllers/TestController.java | 15 ++++++--------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/se21/calbot/CalBotApplication.java b/src/main/java/com/se21/calbot/CalBotApplication.java index 850cdc5..d733a7a 100644 --- a/src/main/java/com/se21/calbot/CalBotApplication.java +++ b/src/main/java/com/se21/calbot/CalBotApplication.java @@ -6,11 +6,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) -@ComponentScan +@EntityScan @EnableAutoConfiguration public class CalBotApplication implements ApplicationRunner { diff --git a/src/main/java/com/se21/calbot/GoogleCalendar.java b/src/main/java/com/se21/calbot/GoogleCalendar.java index d2b07ab..4171996 100644 --- a/src/main/java/com/se21/calbot/GoogleCalendar.java +++ b/src/main/java/com/se21/calbot/GoogleCalendar.java @@ -1,5 +1,7 @@ package com.se21.calbot; +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeRequestUrl; @@ -46,10 +48,14 @@ public void authenticate() throws Exception { .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH))) .setAccessType("offline") .build(); - LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); + String url = flow.newAuthorizationUrl().setRedirectUri("http://localhost:8080/test").build(); + LocalServerReceiver receiver = new LocalServerReceiver(); +// Credential auth = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user"); +// System.out.println(auth.getAccessToken()); +// auth.` // GoogleAuthorizationCodeRequestUrl url = flow.newAuthorizationUrl(); - System.out.println(flow.newAuthorizationUrl().toString()); + System.out.println(url); // return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user"); // return null; } diff --git a/src/main/java/com/se21/calbot/controllers/TestController.java b/src/main/java/com/se21/calbot/controllers/TestController.java index 040a112..7ead31c 100644 --- a/src/main/java/com/se21/calbot/controllers/TestController.java +++ b/src/main/java/com/se21/calbot/controllers/TestController.java @@ -3,17 +3,14 @@ import com.se21.calbot.GoogleCalendar; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; -@Controller -@RequestMapping("/test") +@RestController +@CrossOrigin(origins = "*") public class TestController { - @Autowired - GoogleCalendar googleCalendar; - @GetMapping() - public void AuthenticateTest() throws Exception { - googleCalendar.authenticate(); + @RequestMapping(value = "/ping", method = RequestMethod.GET) + public String AuthenticateTest() throws Exception { + return "ping pong"; } }