Skip to content

Commit f7d2d7b

Browse files
committed
Allow copying the OAuth2 access token from user menu
1 parent df91054 commit f7d2d7b

File tree

6 files changed

+41
-2
lines changed

6 files changed

+41
-2
lines changed

src/main/java/com/faforever/client/api/TokenRetriever.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ public class TokenRetriever implements InitializingBean {
4343

4444
private final Mono<String> refreshedTokenMono = Mono.defer(this::refreshAccess)
4545
.cacheInvalidateWhen(this::getExpirationMono)
46-
47-
.map(OAuth2AccessToken::getTokenValue);
46+
.map(OAuth2AccessToken::getTokenValue);
4847

4948
@Override
5049
public void afterPropertiesSet() throws Exception {
@@ -130,4 +129,8 @@ public void invalidateToken() {
130129
public Flux<Long> invalidationFlux() {
131130
return invalidateFlux;
132131
}
132+
133+
public String getAccessToken() {
134+
return refreshedTokenMono.block();
135+
}
133136
}

src/main/java/com/faforever/client/headerbar/UserButtonController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.faforever.client.headerbar;
22

3+
import com.faforever.client.api.TokenRetriever;
34
import com.faforever.client.domain.server.PlayerInfo;
45
import com.faforever.client.fx.NodeController;
56
import com.faforever.client.player.PlayerInfoWindowController;
67
import com.faforever.client.player.PlayerService;
78
import com.faforever.client.reporting.ReportDialogController;
89
import com.faforever.client.theme.UiService;
910
import com.faforever.client.user.LoginService;
11+
import com.faforever.client.util.ClipboardUtil;
12+
import javafx.application.Platform;
1013
import javafx.scene.Node;
1114
import javafx.scene.Scene;
1215
import javafx.scene.control.MenuButton;
@@ -23,6 +26,7 @@ public class UserButtonController extends NodeController<Node> {
2326
private final PlayerService playerService;
2427
private final UiService uiService;
2528
private final LoginService loginService;
29+
private final TokenRetriever tokenRetriever;
2630

2731
public MenuButton userMenuButtonRoot;
2832

@@ -57,6 +61,10 @@ public void onReport() {
5761
reportDialogController.show();
5862
}
5963

64+
public void onCopyAccessToken() {
65+
Platform.runLater(() -> ClipboardUtil.copyToClipboard(tokenRetriever.getAccessToken()));
66+
}
67+
6068
public void onLogOut() {
6169
loginService.logOut();
6270
}

src/main/resources/i18n/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ view.tiles = Tiles
2121
view.table = Table
2222
userMenu.logOut = Log out
2323
userMenu.showProfile = Show profile
24+
userMenu.copyAccessToken=Copy access token
2425
menu.feedback = Feedback
2526
menu.exit = Exit
2627
menu.settings = Settings

src/main/resources/theme/headerbar/user_button.fxml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<items>
1010
<MenuItem mnemonicParsing="false" onAction="#onShowProfile" text="%userMenu.showProfile"/>
1111
<MenuItem mnemonicParsing="false" onAction="#onReport" text="%userMenu.moderationReport"/>
12+
<MenuItem mnemonicParsing="false" onAction="#onCopyAccessToken" text="%userMenu.copyAccessToken"/>
1213
<MenuItem mnemonicParsing="false" onAction="#onLogOut" text="%userMenu.logOut"/>
1314
</items>
1415
</MenuButton>

src/test/java/com/faforever/client/api/TokenRetrieverTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,16 @@ public void testGetRefreshToken() throws Exception {
183183

184184
assertEquals(tokenProperties.get(REFRESH_TOKEN), loginPrefs.getRefreshToken());
185185
}
186+
187+
@Test
188+
public void testGetAccessToken() throws Exception {
189+
loginPrefs.setRememberMe(true);
190+
Map<String, String> tokenProperties = Map.of(EXPIRES_IN, "3600", REFRESH_TOKEN, "refresh", ACCESS_TOKEN, "test",
191+
TOKEN_TYPE, "bearer");
192+
prepareTokenResponse(tokenProperties);
193+
194+
String result = instance.getAccessToken();
195+
196+
assertEquals(result, "test");
197+
}
186198
}

src/test/java/com/faforever/client/headerbar/UserButtonControllerTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.faforever.client.headerbar;
22

3+
import com.faforever.client.api.TokenRetriever;
34
import com.faforever.client.builders.PlayerInfoBuilder;
45
import com.faforever.client.domain.server.PlayerInfo;
56
import com.faforever.client.player.PlayerInfoWindowController;
@@ -16,6 +17,7 @@
1617

1718
import static org.mockito.Mockito.lenient;
1819
import static org.mockito.Mockito.verify;
20+
import static org.mockito.Mockito.when;
1921

2022
public class UserButtonControllerTest extends PlatformTest {
2123
private static final String TEST_USER_NAME = "junit";
@@ -30,6 +32,8 @@ public class UserButtonControllerTest extends PlatformTest {
3032
private ReportDialogController reportDialogController;
3133
@Mock
3234
private PlayerInfoWindowController playerInfoWindowController;
35+
@Mock
36+
private TokenRetriever tokenRetriever;
3337

3438

3539
@InjectMocks
@@ -64,6 +68,16 @@ public void testReport() {
6468
verify(reportDialogController).show();
6569
}
6670

71+
@Test
72+
public void testCopyAccessToken() {
73+
when(tokenRetriever.getAccessToken()).thenReturn("someToken");
74+
75+
instance.onCopyAccessToken();
76+
77+
waitFxEvents();
78+
verify(tokenRetriever).getAccessToken();
79+
}
80+
6781
@Test
6882
public void testLogOut() {
6983
instance.onLogOut();

0 commit comments

Comments
 (0)