summaryrefslogtreecommitdiffstats
path: root/src/account/jira_util.py
blob: fdb87f7763a1b26750ff57de2c76c2e432443877 (plain)
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
57
58
59
60
61
62
63
64
65
##############################################################################
# Copyright (c) 2016 Max Breitenfeldt and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################


import base64
import os

import oauth2 as oauth
from django.conf import settings
from jira import JIRA
from tlslite.utils import keyfactory


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)