use of org.eclipse.che.api.factory.server.scm.PersonalAccessToken in project devspaces-images by redhat-developer.
the class GithubPersonalAccessTokenFetcherTest method shouldValidatePersonalToken.
@Test
public void shouldValidatePersonalToken() throws Exception {
stubFor(get(urlEqualTo("/user")).withHeader(HttpHeaders.AUTHORIZATION, equalTo("token " + githubOauthToken)).willReturn(aResponse().withHeader("Content-Type", "application/json; charset=utf-8").withHeader(GithubApiClient.GITHUB_OAUTH_SCOPES_HEADER, "repo").withBodyFile("github/rest/user/response.json")));
PersonalAccessToken token = new PersonalAccessToken("https://github.com", "cheUser", "username", "123456789", "token-name", "tid-23434", githubOauthToken);
assertTrue(githubPATFetcher.isValid(token).get());
}
use of org.eclipse.che.api.factory.server.scm.PersonalAccessToken in project devspaces-images by redhat-developer.
the class GitlabOAuthTokenFetcher method fetchPersonalAccessToken.
@Override
public PersonalAccessToken fetchPersonalAccessToken(Subject cheSubject, String scmServerUrl) throws ScmUnauthorizedException, ScmCommunicationException {
scmServerUrl = StringUtils.trimEnd(scmServerUrl, '/');
GitlabApiClient gitlabApiClient = getApiClient(scmServerUrl);
if (gitlabApiClient == null || !gitlabApiClient.isConnected(scmServerUrl)) {
LOG.debug("not a valid url {} for current fetcher ", scmServerUrl);
return null;
}
if (oAuthAPI == null) {
throw new ScmCommunicationException(format("OAuth 2 is not configured for SCM provider [%s]. For details, refer " + "the documentation in section of SCM providers configuration.", OAUTH_PROVIDER_NAME));
}
OAuthToken oAuthToken;
try {
oAuthToken = oAuthAPI.getToken(OAUTH_PROVIDER_NAME);
GitlabUser user = gitlabApiClient.getUser(oAuthToken.getToken());
PersonalAccessToken token = new PersonalAccessToken(scmServerUrl, cheSubject.getUserId(), user.getUsername(), Long.toString(user.getId()), NameGenerator.generate(OAUTH_2_PREFIX, 5), NameGenerator.generate("id-", 5), oAuthToken.getToken());
Optional<Boolean> valid = isValid(token);
if (valid.isEmpty() || !valid.get()) {
throw new ScmCommunicationException("Current token doesn't have the necessary privileges. Please make sure Che app scopes are correct and containing at least: " + DEFAULT_TOKEN_SCOPES.toString());
}
return token;
} catch (UnauthorizedException e) {
throw new ScmUnauthorizedException(cheSubject.getUserName() + " is not authorized in " + OAUTH_PROVIDER_NAME + " OAuth provider.", OAUTH_PROVIDER_NAME, "2.0", getLocalAuthenticateUrl());
} catch (NotFoundException | ServerException | ForbiddenException | BadRequestException | ScmItemNotFoundException | ScmBadRequestException | ConflictException e) {
LOG.warn(e.getMessage());
throw new ScmCommunicationException(e.getMessage(), e);
}
}
use of org.eclipse.che.api.factory.server.scm.PersonalAccessToken in project devspaces-images by redhat-developer.
the class BitbucketServerPersonalAccessTokenFetcher method fetchPersonalAccessToken.
@Override
public PersonalAccessToken fetchPersonalAccessToken(Subject cheUser, String scmServerUrl) throws ScmUnauthorizedException, ScmCommunicationException {
if (!bitbucketServerApiClient.isConnected(scmServerUrl)) {
LOG.debug("not a valid url {} for current fetcher ", scmServerUrl);
return null;
}
final String tokenName = format(TOKEN_NAME_TEMPLATE, cheUser.getUserId(), apiEndpoint.getHost());
try {
BitbucketUser user = bitbucketServerApiClient.getUser(EnvironmentContext.getCurrent().getSubject());
LOG.debug("Current bitbucket user {} ", user);
// cleanup existed
List<BitbucketPersonalAccessToken> existingTokens = bitbucketServerApiClient.getPersonalAccessTokens(user.getSlug()).stream().filter(p -> p.getName().equals(tokenName)).collect(Collectors.toList());
for (BitbucketPersonalAccessToken existedToken : existingTokens) {
LOG.debug("Deleting existed che token {} {}", existedToken.getId(), existedToken.getName());
bitbucketServerApiClient.deletePersonalAccessTokens(user.getSlug(), existedToken.getId());
}
BitbucketPersonalAccessToken token = bitbucketServerApiClient.createPersonalAccessTokens(user.getSlug(), tokenName, DEFAULT_TOKEN_SCOPE);
LOG.debug("Token created = {} for {}", token.getId(), token.getUser());
return new PersonalAccessToken(scmServerUrl, EnvironmentContext.getCurrent().getSubject().getUserId(), user.getName(), valueOf(user.getId()), token.getName(), valueOf(token.getId()), token.getToken());
} catch (ScmBadRequestException | ScmItemNotFoundException e) {
throw new ScmCommunicationException(e.getMessage(), e);
}
}
use of org.eclipse.che.api.factory.server.scm.PersonalAccessToken in project devspaces-images by redhat-developer.
the class BitbucketServerAuthorizingFileContentProviderTest method shouldResolveRelativePaths.
@Test(dataProvider = "relativePathsProvider")
public void shouldResolveRelativePaths(String relative, String expected, String branch) throws Exception {
BitbucketUrl url = new BitbucketUrl().withHostName(TEST_HOSTNAME).withProject("proj").withRepository("repo").withDevfileFilenames(Collections.singletonList(".devfile"));
if (branch != null) {
url.withBranch(branch);
}
BitbucketServerAuthorizingFileContentProvider fileContentProvider = new BitbucketServerAuthorizingFileContentProvider(url, urlFetcher, gitCredentialManager, personalAccessTokenManager);
PersonalAccessToken token = new PersonalAccessToken(TEST_HOSTNAME, "user1", "token");
when(personalAccessTokenManager.get(any(Subject.class), anyString())).thenReturn(Optional.of(token));
// when
fileContentProvider.fetchContent(relative);
// then
verify(urlFetcher).fetch(eq(expected), eq("Bearer token"));
}
use of org.eclipse.che.api.factory.server.scm.PersonalAccessToken in project devspaces-images by redhat-developer.
the class BitbucketServerAuthorizingFileContentProviderTest method shouldFetchTokenIfNotYetPresent.
@Test
public void shouldFetchTokenIfNotYetPresent() throws Exception {
BitbucketUrl url = new BitbucketUrl().withHostName(TEST_HOSTNAME);
BitbucketServerAuthorizingFileContentProvider fileContentProvider = new BitbucketServerAuthorizingFileContentProvider(url, urlFetcher, gitCredentialManager, personalAccessTokenManager);
PersonalAccessToken token = new PersonalAccessToken(TEST_HOSTNAME, "user1", "token");
when(personalAccessTokenManager.get(any(Subject.class), anyString())).thenReturn(Optional.empty());
when(personalAccessTokenManager.fetchAndSave(any(Subject.class), eq(TEST_HOSTNAME))).thenReturn(token);
when(urlFetcher.fetch(anyString())).thenThrow(new IOException("unauthorized"));
String fileURL = "https://foo.bar/scm/repo/.devfile";
// when
fileContentProvider.fetchContent(fileURL);
// then
verify(personalAccessTokenManager).fetchAndSave(any(Subject.class), eq(TEST_HOSTNAME));
verify(urlFetcher).fetch(eq(fileURL), eq("Bearer token"));
verify(gitCredentialManager).createOrReplace(eq(token));
}
Aggregations