1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
import base64
import os
import oauth2 as oauth
from jira import JIRA
from tlslite.utils import keyfactory
from pharos_dashboard import settings
class SignatureMethod_RSA_SHA1(oauth.SignatureMethod):
name = 'RSA-SHA1'
def signing_base(self, request, consumer, token):
if not hasattr(request, 'normalized_url') or request.normalized_url is None:
raise ValueError("Base URL for request is not set.")
sig = (
oauth.escape(request.method),
oauth.escape(request.normalized_url),
oauth.escape(request.get_normalized_parameters()),
)
key = '%s&' % oauth.escape(consumer.secret)
if token:
key += oauth.escape(token.secret)
raw = '&'.join(sig)
return key, raw
def sign(self, request, consumer, token):
"""Builds the base signature string."""
key, raw = self.signing_base(request, consumer, token)
module_dir = os.path.dirname(__file__) # get current directory
with open(module_dir + '/rsa.pem', 'r') as f:
data = f.read()
privateKeyString = data.strip()
privatekey = keyfactory.parsePrivateKey(privateKeyString)
raw = str.encode(raw)
signature = privatekey.hashAndSign(raw)
return base64.b64encode(signature)
def get_jira(user):
module_dir = os.path.dirname(__file__) # get current directory
with open(module_dir + '/rsa.pem', 'r') as f:
key_cert = f.read()
oauth_dict = {
'access_token': user.userprofile.oauth_token,
'access_token_secret': user.userprofile.oauth_secret,
'consumer_key': settings.OAUTH_CONSUMER_KEY,
'key_cert': key_cert
}
return JIRA(server=settings.JIRA_URL, oauth=oauth_dict)
|