Access to JIRA ressource using 'com.atlassian.jira:jira-rest-java-client-core:5.0.4' and OAUth ident

Hello, i'm trying to access to JIRA ressource using 'com.atlassian.jira:jira-rest-java-client-core:5.0.4' and OAUth indentification protocol.

I configure the following dependencies

dependencies {
    // Dependencies to jira-rest-java-client-core
    compile 'com.atlassian.jira:jira-rest-java-client-core:5.0.4'
    compile 'org.apache.httpcomponents:httpcore:4.4.8'
    compile 'org.apache.httpcomponents:httpcore-nio:4.4.8'
    compile 'com.atlassian.fugue:fugue:2.7.0'
    
    // Bellow is the a simple binding to the "standard" error output stream
    compile 'org.slf4j:slf4j-simple:1.7.10'
    
    // Dependencies to net.oauth.core
    compile 'net.oauth.core:oauth:20100527'
    compile 'net.oauth.core:oauth-consumer:20100527'
    compile 'net.oauth.core:oauth-httpclient4:20090913'
    
    // JUNIT
    testCompile 'junit:junit:4.12'
}

My JIRAis already configure for an OAuth access, and i have a consumer key, a private key and an access_token.

I try to retrieve an issue using following code.


import java.net.URI;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;

import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.atlassian.httpclient.api.Request.Builder;
import com.atlassian.jira.rest.client.api.AuthenticationHandler;
import com.atlassian.jira.rest.client.api.JiraRestClient;
import com.atlassian.jira.rest.client.api.JiraRestClientFactory;
import com.atlassian.jira.rest.client.api.domain.Issue;
import com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory;
import com.thalesgroup.atms.jira.internal.JiraAccessServicesTest;

import net.oauth.OAuth;
import net.oauth.OAuthAccessor;
import net.oauth.OAuthConsumer;
import net.oauth.OAuthMessage;
import net.oauth.OAuthServiceProvider;
import net.oauth.ParameterStyle;
import net.oauth.client.OAuthClient;
import net.oauth.http.HttpMessage;
import net.oauth.signature.RSA_SHA1;

/**
 * Test for OAuth authentification
 */
public class OAuthTest {
    /** A Logger. */
    private static final Logger LOG = LoggerFactory.getLogger(JiraAccessServicesTest.class.getName());

    /** SERVLET_BASE_URL */
    private static final String SERVLET_BASE_URL = "/plugins/servlet";

    /** A Jira Consumer key. */
    private String consumerKey = "";

    /** A Jira access token. */
    String access_token;

    /** A Jira private key. */
    private String privateKey;

    /** JIRA URL */
    String baseUrl;

    /** OAuth accessor to JIRA. */
    private OAuthAccessor accessorSingleton;

    /**
     * Declare the JIRA OAuth.
     */
    @Before
    public void oAuth() {
        access_token = "_______thisIsAnAccessToken______";
        consumerKey = "__consumer__";
        privateKey = "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivateKeyWithUpperAndLowerCaseAndNumber123AndSpecialChar\r\n"
            + "ThisIsAPrivate==";
        baseUrl = "http://my.jira.instance:8070";
    }

    /**
     *
     * @throws Exception if occured.
     */
    @Test
    public void test() throws Exception {
        final JiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
        final URI jiraServerUri = new URI(baseUrl);
        final JiraRestClient restClient = factory.create(jiraServerUri, new AuthenticationHandler() {
            @Override
            public void configure(final Builder builder) {
                try {
                    final OAuthAccessor accessor = getAccessor();
                    accessor.accessToken = access_token;
                    final OAuthMessage request2 = accessor.newRequestMessage(null,
                            /* request.getUri().toString() */ baseUrl, Collections.<Map.Entry<?, ?>> emptySet());
                    final Object accepted = accessor.consumer.getProperty(OAuthConsumer.ACCEPT_ENCODING);
                    if (accepted != null) {
                        request2.getHeaders().add(
                                new OAuth.Parameter(HttpMessage.ACCEPT_ENCODING, accepted.toString()));
                    }
                    final Object ps = accessor.consumer.getProperty(OAuthClient.PARAMETER_STYLE);
                    final ParameterStyle style =
                            (ps == null) ? ParameterStyle.BODY : Enum.valueOf(ParameterStyle.class, ps.toString());
                    final HttpMessage httpRequest = HttpMessage.newRequest(request2, style);
                    for (final Entry<String, String> ap : httpRequest.headers) {
                        builder.setHeader(ap.getKey(), ap.getValue());
                    }
                    builder.setUri(httpRequest.url.toURI());
                } catch (final Exception e) {
                    e.printStackTrace();
                }
            }
        });

        final Issue issue = restClient.getIssueClient().getIssue("ISSUEID-1234").claim();

        LOG.info(issue.getSummary());

        restClient.close();
    }

    /**
     * OAuthAccessor
     *
     * @return OAuthAccessor
     */
    final OAuthAccessor getAccessor() {
        if (accessorSingleton == null) {
            final OAuthServiceProvider serviceProvider =
                    new OAuthServiceProvider(getRequestTokenUrl(), getAuthorizeUrl(), getAccessTokenUrl());
            final OAuthConsumer consumer = new OAuthConsumer(null, consumerKey, null, serviceProvider);
            consumer.setProperty(RSA_SHA1.PRIVATE_KEY, privateKey);
            consumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.RSA_SHA1);
            accessorSingleton = new OAuthAccessor(consumer);
        }
        return accessorSingleton;
    }

    /**
     * AccessTokenUrl
     *
     * @return AccessTokenUrl
     */
    private String getAccessTokenUrl() {
        return baseUrl + SERVLET_BASE_URL + "/oauth/access-token";
    }

    /**
     * AuthorizeUrl
     *
     * @return AuthorizeUrl
     */
    private String getAuthorizeUrl() {
        return baseUrl + SERVLET_BASE_URL + "/oauth/authorize";
    }

    /**
     * RequestTokenUrl
     *
     * @return RequestTokenUrl
     */
    private String getRequestTokenUrl() {
        return baseUrl + SERVLET_BASE_URL + "/oauth/request-token";
    }
}


But it doesn't work ?

Which URL should I put in the newRequestMessage ?

What is the callbackURL of the OAuthConsumer ?

Thanks a lot for your help.



0 answers

Suggest an answer

Log in or Sign up to answer
Community showcase
Posted yesterday in Jira

What modern development practices are at the heart of how your team delivers software?

Hey Community mates! Claire here from the Software Product Marketing team. We all know software development changes rapidly, and it's often tough to keep up. But from our research, we've found the h...

31 views 0 1
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you