summaryrefslogtreecommitdiffstats
path: root/scripts/jira/jira-bug-closer/oauth_dance.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/jira/jira-bug-closer/oauth_dance.py')
-rwxr-xr-xscripts/jira/jira-bug-closer/oauth_dance.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/scripts/jira/jira-bug-closer/oauth_dance.py b/scripts/jira/jira-bug-closer/oauth_dance.py
new file mode 100755
index 00000000..2dc08281
--- /dev/null
+++ b/scripts/jira/jira-bug-closer/oauth_dance.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+# Convenience tool to get the JIRA tokens in place.
+# This helps with the initial setup when connecting the bot for the first time.
+
+# This is example code from Atlassian - https://bitbucket.org/atlassianlabs/atlassian-oauth-examples/
+# The modified version for Python requests was copied from this fork:
+# https://bitbucket.org/MicahCarrick/atlassian-oauth-examples/src/68d005311b9b74d6a85787bb87ccc948766486d3/python-requests/example.py?at=default&fileviewer=file-view-default
+
+from oauthlib.oauth1 import SIGNATURE_RSA
+from requests_oauthlib import OAuth1Session
+from jira.client import JIRA
+
+
+def read(file_path: str) -> str:
+ """ Read a file and return it's contents. """
+ with open(file_path) as f:
+ return f.read()
+
+
+# The Consumer Key created while setting up the "Incoming Authentication" in
+# JIRA for the Application Link.
+CONSUMER_KEY = 'jira-gerrit-oauth'
+
+# The contents of the rsa.pem file generated (the private RSA key)
+RSA_KEY = read('jiracloser.pem')
+
+# The URLs for the JIRA instance
+JIRA_SERVER = 'https://bugreports-test.qt.io'
+REQUEST_TOKEN_URL = JIRA_SERVER + '/plugins/servlet/oauth/request-token'
+AUTHORIZE_URL = JIRA_SERVER + '/plugins/servlet/oauth/authorize'
+ACCESS_TOKEN_URL = JIRA_SERVER + '/plugins/servlet/oauth/access-token'
+
+
+# Step 1: Get a request token
+
+oauth = OAuth1Session(CONSUMER_KEY, signature_type='auth_header',
+ signature_method=SIGNATURE_RSA, rsa_key=RSA_KEY)
+request_token = oauth.fetch_request_token(REQUEST_TOKEN_URL)
+
+print("STEP 1: GET REQUEST TOKEN")
+print(" oauth_token={}".format(request_token['oauth_token']))
+print(" oauth_token_secret={}".format(request_token['oauth_token_secret']))
+print("\n")
+
+
+# Step 2: Get the end-user's authorization
+
+print("STEP2: AUTHORIZATION")
+print(" Visit to the following URL to provide authorization:")
+print(" {}?oauth_token={}".format(AUTHORIZE_URL, request_token['oauth_token']))
+print("\n")
+
+while input("Press any key to continue..."):
+ pass
+
+
+# Step 3: Get the access token
+
+access_token = oauth.fetch_access_token(ACCESS_TOKEN_URL, verifier="some_verifier")
+
+print("STEP2: GET ACCESS TOKEN")
+print(" oauth_token={}".format(access_token['oauth_token']))
+print(" oauth_token_secret={}".format(access_token['oauth_token_secret']))
+print("\n")
+
+
+# Now you can use the access tokens with the JIRA client. Hooray!
+
+jira = JIRA(options={'server': JIRA_SERVER}, oauth={
+ 'access_token': access_token['oauth_token'],
+ 'access_token_secret': access_token['oauth_token_secret'],
+ 'consumer_key': CONSUMER_KEY,
+ 'key_cert': RSA_KEY
+})
+
+# print all of the project keys just as an example
+print("Verifying that the access works, listing JIRA projects:")
+for project in jira.projects():
+ print(project.key)