Skip to content
This repository was archived by the owner on Aug 21, 2025. It is now read-only.

Commit f4fa44d

Browse files
committed
WIP: Refacto Twitch module
1 parent 7df5bde commit f4fa44d

13 files changed

Lines changed: 104 additions & 173 deletions

File tree

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM openjdk:21-slim
1+
FROM amazoncorretto:21-alpine
22

33
ARG service_name
44
ARG service_base_dir

modules/twitch/auth/client/src/main/java/com/funixproductions/api/twitch/auth/client/enums/TwitchClientTokenType.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package com.funixproductions.api.twitch.auth.client.enums;
22

33
import com.google.common.base.Strings;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
46

57
import javax.annotation.Nullable;
68

9+
@Getter
10+
@AllArgsConstructor
711
public enum TwitchClientTokenType {
8-
FUNIXGAMING,
9-
STREAMER,
10-
MODERATOR,
11-
BOT,
12-
VIEWER;
12+
FUNIXGAMING(true),
13+
STREAMER(true),
14+
VIEWER(false);
15+
16+
private boolean needRegisterEvents;
1317

1418
public static TwitchClientTokenType getTokenTypeByString(@Nullable final String tokenType) {
1519
if (Strings.isNullOrEmpty(tokenType)) {

modules/twitch/auth/service/src/main/java/com/funixproductions/api/twitch/auth/service/services/TwitchClientTokenService.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,23 +112,25 @@ public FrontOrigins registerNewAuthorizationAuthToken(final String oAuthCode, fi
112112
}
113113

114114
final CsrfUser csrfUser = this.csrfTokens.get(csrfToken);
115-
116115
if (csrfUser == null) {
117116
throw new ApiBadRequestException("Le csrf token est invalide. Veuillez vous reconnecter avec twitch.");
118-
} else {
119-
final UserDTO userDTO = csrfUser.getUser();
120-
final Optional<TwitchClientToken> searchToken = this.twitchClientTokenRepository.findTwitchClientTokenByUserUuidAndTokenType(
121-
userDTO.getId().toString(),
122-
csrfUser.tokenType
123-
);
124-
125-
searchToken.ifPresent(this.twitchClientTokenRepository::delete);
117+
}
118+
final UserDTO userDTO = csrfUser.getUser();
119+
final TwitchClientTokenType tokenType = csrfUser.getTokenType();
120+
final Optional<TwitchClientToken> searchToken = this.twitchClientTokenRepository.findTwitchClientTokenByUserUuidAndTokenType(
121+
userDTO.getId().toString(),
122+
csrfUser.tokenType
123+
);
126124

127-
this.generateNewAccessToken(csrfUser, userDTO, oAuthCode);
128-
this.csrfTokens.remove(csrfToken);
125+
searchToken.ifPresent(this.twitchClientTokenRepository::delete);
129126

130-
return csrfUser.getFrontOrigin();
127+
final TwitchClientToken generatedToken = this.generateNewAccessToken(csrfUser, userDTO, oAuthCode);
128+
if (tokenType.isNeedRegisterEvents()) {
129+
this.createEventSub(generatedToken.getTwitchUsername());
131130
}
131+
132+
this.csrfTokens.remove(csrfToken);
133+
return csrfUser.getFrontOrigin();
132134
}
133135

134136
public TwitchClientTokenDTO fetchToken(final UUID userUuid, final TwitchClientTokenType tokenType) {
@@ -281,7 +283,7 @@ private String generateNewState(final TwitchClientTokenType tokenType,
281283
return state;
282284
}
283285

284-
private void generateNewAccessToken(final CsrfUser csrfUser, final UserDTO user, final String oAuthToken) {
286+
private TwitchClientToken generateNewAccessToken(final CsrfUser csrfUser, final UserDTO user, final String oAuthToken) {
285287
final Map<String, String> formData = new HashMap<>();
286288
formData.put("client_id", twitchApiConfig.getAppClientId());
287289
formData.put("client_secret", twitchApiConfig.getAppClientSecret());
@@ -305,7 +307,8 @@ private void generateNewAccessToken(final CsrfUser csrfUser, final UserDTO user,
305307
twitchClientToken.setAccessToken(tokenResponseDTO.getAccessToken());
306308
twitchClientToken.setRefreshToken(tokenResponseDTO.getRefreshToken());
307309
twitchClientToken.setExpirationDateToken(Date.from(Instant.now().plusSeconds(tokenResponseDTO.getExpiresIn() - 60L)));
308-
this.twitchClientTokenRepository.save(twitchClientToken);
310+
311+
return this.twitchClientTokenRepository.save(twitchClientToken);
309312
} catch (FeignException e) {
310313
if (e.status() == HttpStatus.UNAUTHORIZED.value()) {
311314
throw new ApiForbiddenException(String.format("L'utilisateur %s à retiré l'accès à la FunixAPI sur twitch.", csrfUser.getUser().getUsername()));
@@ -355,4 +358,8 @@ private TwitchClientTokenDTO refreshToken(final TwitchClientToken token) {
355358
}
356359
}
357360

361+
private void createEventSub(final String streamerName) {
362+
363+
}
364+
358365
}

modules/twitch/eventsub/client/src/main/java/com/funixproductions/api/twitch/eventsub/client/clients/TwitchEventSubClient.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import com.funixproductions.api.twitch.eventsub.client.dtos.TwitchEventSubListDTO;
44
import org.springframework.cloud.openfeign.FeignClient;
5-
import org.springframework.web.bind.annotation.*;
5+
import org.springframework.web.bind.annotation.GetMapping;
6+
import org.springframework.web.bind.annotation.RequestParam;
67

78
@FeignClient(
89
name = "TwitchEventSubClient",
@@ -33,18 +34,4 @@ TwitchEventSubListDTO getSubscriptions(
3334
@RequestParam(name = "after", required = false) String after
3435
);
3536

36-
/**
37-
* Documentation <a href="https://dev.twitch.tv/docs/api/reference/#delete-eventsub-subscription">Doc remove</a>
38-
* @param streamerUsername streamer username who has created streamer token with funix api
39-
*/
40-
@DeleteMapping
41-
void deleteSubscription(@RequestParam(name = "streamer_username") String streamerUsername);
42-
43-
/**
44-
* Documentation <a href="https://dev.twitch.tv/docs/api/reference/#create-eventsub-subscription">Create sub</a>
45-
* @param streamerUsername streamer username who has created streamer token with funix api
46-
*/
47-
@PostMapping
48-
void createSubscription(@RequestBody String streamerUsername);
49-
5037
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.funixproductions.api.twitch.eventsub.client.clients;
2+
3+
import org.springframework.cloud.openfeign.FeignClient;
4+
import org.springframework.web.bind.annotation.DeleteMapping;
5+
import org.springframework.web.bind.annotation.PostMapping;
6+
import org.springframework.web.bind.annotation.RequestBody;
7+
import org.springframework.web.bind.annotation.RequestParam;
8+
9+
@FeignClient(
10+
name = "TwitchEventSubInternalClient",
11+
url = "${funixproductions.api.twitch.eventsub.app-domain-url}",
12+
path = "/kubeinternal/twitch/eventsub/"
13+
)
14+
public interface TwitchEventSubInternalClient {
15+
16+
/**
17+
* Documentation <a href="https://dev.twitch.tv/docs/api/reference/#create-eventsub-subscription">Create sub</a>
18+
* @param streamerUsername streamer username who has created streamer token with funix api
19+
*/
20+
@PostMapping
21+
void createSubscription(@RequestBody String streamerUsername);
22+
23+
/**
24+
* Documentation <a href="https://dev.twitch.tv/docs/api/reference/#delete-eventsub-subscription">Doc remove</a>
25+
* @param streamerUsername streamer username who has created streamer token with funix api
26+
*/
27+
@DeleteMapping
28+
void deleteSubscription(@RequestParam(name = "streamer_username") String streamerUsername);
29+
30+
}

modules/twitch/eventsub/service/src/main/java/com/funixproductions/api/twitch/eventsub/service/entities/TwitchEventSubStreamer.java

Lines changed: 0 additions & 20 deletions
This file was deleted.

modules/twitch/eventsub/service/src/main/java/com/funixproductions/api/twitch/eventsub/service/repositories/TwitchEventSubStreamerRepository.java

Lines changed: 0 additions & 15 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.funixproductions.api.twitch.eventsub.service.resources;
2+
3+
import com.funixproductions.api.twitch.eventsub.client.clients.TwitchEventSubInternalClient;
4+
import com.funixproductions.api.twitch.eventsub.service.services.TwitchEventSubRegistrationService;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.web.bind.annotation.RequestMapping;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
@RestController
10+
@RequestMapping("/kubeinternal/twitch/eventsub")
11+
@RequiredArgsConstructor
12+
public class TwitchEventSubInternalResource implements TwitchEventSubInternalClient {
13+
14+
private final TwitchEventSubRegistrationService twitchEventSubRegistrationService;
15+
16+
@Override
17+
public void createSubscription(String streamerUsername) {
18+
twitchEventSubRegistrationService.createSubscription(streamerUsername);
19+
}
20+
21+
@Override
22+
public void deleteSubscription(String streamerUsername) {
23+
twitchEventSubRegistrationService.removeSubscription(streamerUsername);
24+
}
25+
26+
}

modules/twitch/eventsub/service/src/main/java/com/funixproductions/api/twitch/eventsub/service/resources/TwitchEventSubResource.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.funixproductions.api.twitch.eventsub.client.dtos.TwitchEventSubListDTO;
55
import com.funixproductions.api.twitch.eventsub.service.services.TwitchEventSubCallbackService;
66
import com.funixproductions.api.twitch.eventsub.service.services.TwitchEventSubReferenceService;
7-
import com.funixproductions.api.twitch.eventsub.service.services.TwitchEventSubRegistrationService;
87
import jakarta.servlet.http.HttpServletRequest;
98
import lombok.RequiredArgsConstructor;
109
import org.springframework.web.bind.annotation.PostMapping;
@@ -19,23 +18,12 @@ public class TwitchEventSubResource implements TwitchEventSubClient {
1918

2019
private final TwitchEventSubCallbackService twitchEventSubCallbackService;
2120
private final TwitchEventSubReferenceService twitchEventSubReferenceService;
22-
private final TwitchEventSubRegistrationService twitchEventSubRegistrationService;
2321

2422
@Override
2523
public TwitchEventSubListDTO getSubscriptions(String status, String type, String userId, String after) {
2624
return twitchEventSubReferenceService.getSubscriptions(status, type, userId, after);
2725
}
2826

29-
@Override
30-
public void deleteSubscription(String streamerUsername) {
31-
twitchEventSubRegistrationService.removeSubscription(streamerUsername);
32-
}
33-
34-
@Override
35-
public void createSubscription(String streamerUsername) {
36-
twitchEventSubRegistrationService.createSubscription(streamerUsername);
37-
}
38-
3927
@PostMapping("cb")
4028
public String handleTwitchCallback(@RequestBody final byte[] body,
4129
final HttpServletRequest servletRequest) {

modules/twitch/eventsub/service/src/main/java/com/funixproductions/api/twitch/eventsub/service/security/WebSecurity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class WebSecurity extends ApiWebSecurity {
1717
@Override
1818
public Customizer<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry> getUrlsMatchers() {
1919
return ex -> ex
20+
.requestMatchers("/kubeinternal/**").permitAll()
2021
.requestMatchers("/ws/public/**").permitAll()
2122
.requestMatchers("/twitch/eventsub/cb**").permitAll()
2223
.requestMatchers("/actuator/**").permitAll()

0 commit comments

Comments
 (0)