M trello_broker/models.py +10 -0
@@ 145,6 145,15 @@ class BitBucketRepo(BaseModel):
max_length=100,
help_text=_('Slug ID given by BitBucket for this repository.'),
)
+ access_key = models.CharField(
+ max_length=100,
+ blank=True,
+ help_text=_(
+ 'Secret key used to "authenticate" the request. If saved '
+ 'here the key must be appended to the BitBucket hook URL like '
+ 'so: http://yourserver.com/broker/?access_key=<value stored here>'
+ ),
+ )
trello_board = models.ForeignKey(
'trello_broker.TrelloBoard',
limit_choices_to={'status': STATUS_ACTIVE},
@@ 154,6 163,7 @@ class BitBucketRepo(BaseModel):
class Meta:
verbose_name = 'BitBucket Repository'
verbose_name_plural = 'BitBucket Repositories'
+ unique_together = ('slug', 'access_key')
@property
def fix_rule(self):
M trello_broker/views.py +5 -2
@@ 4,7 4,7 @@ from django.shortcuts import get_object_
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.http import HttpResponse, HttpResponseBadRequest, Http404
-from .models import BitBucketRepo
+from .models import Q, BitBucketRepo
from .utils import process_commits
from . import settings
@@ 35,7 35,10 @@ class BitBucketPostView(View):
except (ValueError, KeyError):
return HttpResponseBadRequest()
- repo = get_object_or_404(BitBucketRepo, slug=repo_slug)
+ query = Q(slug=repo_slug)
+ if 'access_key' in request.REQUEST:
+ query += Q(access_key=request.REQUEST['access_key'])
+ repo = get_object_or_404(BitBucketRepo, query)
trello_distribute(repo, json_data)
return HttpResponse('OK')