Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,14 @@ EOF
bjira setpass
```

Для доступа можно также использовать [токен](https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html)

```shell script
bjira settoken
```

Пароль и токен не хранятся одновременно — задание токена сбрасывает пароль и наоборот

### Использовать

```shell script
Expand Down
5 changes: 4 additions & 1 deletion bjira/operations/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import keyring
from jira import JIRA

from bjira.utils import JIRA_SERVICE
from bjira.utils import JIRA_SERVICE, JIRA_TOKEN


class BJiraOperation:
Expand All @@ -24,6 +24,9 @@ def get_config(self):

def get_jira_api(self, **kwargs):
user = self.get_user()
token = keyring.get_password(JIRA_TOKEN, user)
if token:
return JIRA(server=self.get_config()['host'], token_auth=token)
return JIRA(server=self.get_config()['host'],
basic_auth=(user, keyring.get_password(JIRA_SERVICE, user)), **kwargs)

Expand Down
8 changes: 5 additions & 3 deletions bjira/operations/setpass.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,21 @@
import keyring

from bjira.operations import BJiraOperation
from bjira.utils import JIRA_SERVICE
from bjira.utils import JIRA_SERVICE, JIRA_TOKEN


class Operation(BJiraOperation):

def configure_arg_parser(self, subparsers):
parser_setpass = subparsers.add_parser('setpass', help='set jira password')
parser_setpass = subparsers.add_parser('setpass', help='set jira password, remove token if present')
parser_setpass.set_defaults(func=self._set_password)

def _set_password(self, args):
config = self.get_config()
user = config['user']
keyring.set_password(JIRA_SERVICE, user, getpass(f'set password for user {user}'))
keyring.set_password(JIRA_SERVICE, user, getpass(f'set password for user {user} '))
if keyring.get_password(JIRA_TOKEN, user):
keyring.delete_password(JIRA_TOKEN, user)
try:
self.get_jira_api(max_retries=0)
print('password set')
Expand Down
24 changes: 24 additions & 0 deletions bjira/operations/settoken.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from getpass import getpass

import keyring

from bjira.operations import BJiraOperation
from bjira.utils import JIRA_TOKEN, JIRA_SERVICE


class Operation(BJiraOperation):

def configure_arg_parser(self, subparsers):
parser_setpass = subparsers.add_parser('settoken', help='set jira token, remove password if present')
parser_setpass.set_defaults(func=self._set_token)

def _set_token(self, args):
user = self.get_user()
keyring.set_password(JIRA_TOKEN, user, getpass(f'set jira token for {user}: '))
if keyring.get_password(JIRA_SERVICE, user):
keyring.delete_password(JIRA_SERVICE, user)
try:
self.get_jira_api(max_retries=0)
print('token set')
except:
print('bad token')
1 change: 1 addition & 0 deletions bjira/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from collections import defaultdict

JIRA_SERVICE = 'bjira'
JIRA_TOKEN = 'bjira_token'

IMG_STATUS_PREFIX = {
'Closed': '✅',
Expand Down