Skip to content

Commit 4748236

Browse files
committed
fixup! Simplify the Bitbucket Server token generation logic
1 parent 62bdbd1 commit 4748236

File tree

4 files changed

+74
-4
lines changed

4 files changed

+74
-4
lines changed

wsmaster/che-core-api-factory-bitbucket-server/src/main/java/org/eclipse/che/api/factory/server/bitbucket/BitbucketServerPersonalAccessTokenFetcher.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,29 @@ public BitbucketServerPersonalAccessTokenFetcher(
7474
@Override
7575
public PersonalAccessToken refreshPersonalAccessToken(Subject cheUser, String scmServerUrl)
7676
throws ScmUnauthorizedException, ScmCommunicationException, UnknownScmProviderException {
77-
// #fetchPersonalAccessToken does the same thing as #refreshPersonalAccessToken
78-
return fetchPersonalAccessToken(cheUser, scmServerUrl);
77+
return fetchOrRefreshPersonalAccessToken(cheUser, scmServerUrl, true);
7978
}
8079

8180
@Override
8281
public PersonalAccessToken fetchPersonalAccessToken(Subject cheSubject, String scmServerUrl)
8382
throws ScmUnauthorizedException, ScmCommunicationException, UnknownScmProviderException {
84-
OAuthToken oAuthToken;
83+
return fetchOrRefreshPersonalAccessToken(cheSubject, scmServerUrl, false);
84+
}
8585

86+
private PersonalAccessToken fetchOrRefreshPersonalAccessToken(
87+
Subject cheSubject, String scmServerUrl, boolean forceRefreshToken)
88+
throws ScmCommunicationException, ScmUnauthorizedException, UnknownScmProviderException {
89+
OAuthToken oAuthToken;
8690
if (bitbucketServerApiClient == null || !bitbucketServerApiClient.isConnected(scmServerUrl)) {
8791
LOG.debug("not a valid url {} for current fetcher ", scmServerUrl);
8892
return null;
8993
}
9094
try {
9195
BitbucketUser user = bitbucketServerApiClient.getUser();
92-
oAuthToken = oAuthAPI.getOrRefreshToken(OAUTH_PROVIDER_NAME);
96+
oAuthToken =
97+
forceRefreshToken
98+
? oAuthAPI.refreshToken(OAUTH_PROVIDER_NAME)
99+
: oAuthAPI.getOrRefreshToken(OAUTH_PROVIDER_NAME);
93100
String tokenName = NameGenerator.generate(OAUTH_2_PREFIX, 5);
94101
String tokenId = NameGenerator.generate("id-", 5);
95102
return new PersonalAccessToken(

wsmaster/che-core-api-factory-bitbucket-server/src/test/java/org/eclipse/che/api/factory/server/bitbucket/BitbucketServerPersonalAccessTokenFetcherTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,24 @@ public void shouldBeAbleToFetchPersonalAccessToken() throws Exception {
156156
assertEquals(result.getToken(), "token");
157157
}
158158

159+
@Test
160+
public void shouldRefreshPersonalAccessToken() throws Exception {
161+
// given
162+
when(bitbucketServerApiClient.isConnected(eq(someBitbucketURL))).thenReturn(true);
163+
when(bitbucketServerApiClient.getUser()).thenReturn(bitbucketUser);
164+
when(oAuthToken.getToken()).thenReturn("token");
165+
when(oAuthAPI.refreshToken(eq("bitbucket-server"))).thenReturn(oAuthToken);
166+
// when
167+
PersonalAccessToken result = fetcher.refreshPersonalAccessToken(subject, someBitbucketURL);
168+
// then
169+
assertNotNull(result);
170+
assertEquals(result.getScmProviderUrl(), someBitbucketURL);
171+
assertEquals(result.getCheUserId(), subject.getUserId());
172+
assertNull(result.getScmOrganization(), bitbucketUser.getName());
173+
assertTrue(result.getScmTokenId().startsWith("id-"));
174+
assertEquals(result.getToken(), "token");
175+
}
176+
159177
@Test
160178
public void shouldSkipToValidateTokensWithUnknownUrls()
161179
throws ScmUnauthorizedException, ScmCommunicationException, ForbiddenException,

wsmaster/che-core-api-factory-bitbucket-server/src/test/java/org/eclipse/che/api/factory/server/bitbucket/HttpBitbucketServerApiClientTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,27 @@ public void testGetUser()
136136
assertNotNull(user);
137137
}
138138

139+
@Test
140+
public void shouldGetUserWithSpecialCharacters()
141+
throws ScmItemNotFoundException, ScmUnauthorizedException, ScmCommunicationException {
142+
stubFor(
143+
get(urlEqualTo("/rest/api/1.0/application-properties"))
144+
.willReturn(aResponse().withHeader("x-ausername", "user%40email.com")));
145+
stubFor(
146+
get(urlEqualTo("/rest/api/1.0/users?start=0&limit=25&filter=user@email.com"))
147+
.withHeader(HttpHeaders.AUTHORIZATION, equalTo(AUTHORIZATION_TOKEN))
148+
.withQueryParam("start", equalTo("0"))
149+
.withQueryParam("limit", equalTo("25"))
150+
.withQueryParam("filter", equalTo("user@email.com"))
151+
.willReturn(
152+
aResponse()
153+
.withHeader("Content-Type", "application/json; charset=utf-8")
154+
.withBodyFile("bitbucket/rest/api/1.0/users/email-user/response.json")));
155+
156+
BitbucketUser user = bitbucketServer.getUser();
157+
assertNotNull(user);
158+
}
159+
139160
@Test
140161
public void testGetUsers()
141162
throws ScmCommunicationException, ScmBadRequestException, ScmUnauthorizedException {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"size": 1,
3+
"limit": 3,
4+
"isLastPage": true,
5+
"values": [
6+
{
7+
"name": "user@email.com",
8+
"emailAddress": "user@email.com",
9+
"id": 58,
10+
"displayName": "user",
11+
"active": true,
12+
"slug": "user@email.com",
13+
"type": "NORMAL",
14+
"links": {
15+
"self": [
16+
{
17+
"href": "https://bitbucket-bitbucket.apps.cluster-devtools-c9ac.devtools-c9ac.example.opentlc.com/users/user%40email.com"
18+
}
19+
]
20+
}
21+
}
22+
],
23+
"start": 9
24+
}

0 commit comments

Comments
 (0)