Compare commits
1 Commits
23931cf91f
...
4ecb3b9cb9
Author | SHA1 | Date |
---|---|---|
shekhar-cis | 4ecb3b9cb9 |
|
@ -7,17 +7,10 @@ import os
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from subprocess import call
|
|
||||||
from base64 import b64encode
|
|
||||||
|
|
||||||
from buildbot.process.properties import Properties
|
from buildbot.process.properties import Properties
|
||||||
from buildbot.util import bytes2unicode, unicode2bytes
|
from buildbot.util import bytes2unicode, unicode2bytes
|
||||||
from buildbot.www.hooks.base import BaseHookHandler
|
from buildbot.www.hooks.base import BaseHookHandler
|
||||||
|
|
||||||
from dateutil.parser import parse as dateparse
|
|
||||||
|
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
from twisted.python import log
|
from twisted.python import log
|
||||||
|
|
||||||
|
@ -27,7 +20,7 @@ _HEADER_SIGNATURE = 'X-TX-Signature'
|
||||||
_HEADER_URL_PATH = 'X-TX-Url'
|
_HEADER_URL_PATH = 'X-TX-Url'
|
||||||
_HTTP_DATE = 'date'
|
_HTTP_DATE = 'date'
|
||||||
_EVENT_KEY = 'event'
|
_EVENT_KEY = 'event'
|
||||||
|
author = 'buildbot-transifex'
|
||||||
|
|
||||||
|
|
||||||
class TransifexHandler(BaseHookHandler):
|
class TransifexHandler(BaseHookHandler):
|
||||||
|
@ -63,27 +56,25 @@ class TransifexHandler(BaseHookHandler):
|
||||||
).digest()
|
).digest()
|
||||||
)
|
)
|
||||||
if tx_signature != header_signature:
|
if tx_signature != header_signature:
|
||||||
return False
|
raise ValueError("Tx Signature mismatch")
|
||||||
|
|
||||||
if signature != request.getHeader(_HEADER_SIGNATURE):
|
if signature != request.getHeader(_HEADER_SIGNATURE):
|
||||||
return False
|
raise ValueError("Signature mismatch")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def process_translation_completed(self, payload, codebase):
|
def process_translation_completed(self, payload, codebase):
|
||||||
changes = []
|
changes = []
|
||||||
transifex_response = self._transform_variables(payload['project'], payload['resource'])
|
translated_request = self._transform_variables(payload['project'], payload['resource'])
|
||||||
# if 'pybitmessage-test' in transifex_response['project'] and 'messagespot' in transifex_response['resource']:
|
|
||||||
# if 'translation_completed' in transifex_response['event']:
|
|
||||||
change = {
|
change = {
|
||||||
'author': "buildbot-transifex",
|
'author': "buildbot-transifex",
|
||||||
'resource': transifex_response[resource],
|
'branch': translated_request["branch"],
|
||||||
'branch': transifex_response["branch"],
|
'project': translated_request["project"],
|
||||||
'project': transifex_response["project"],
|
|
||||||
'properties': {
|
'properties': {
|
||||||
"transifex_language": payload.get("language", "None"),
|
"transifex_language": payload.get("language", "None"),
|
||||||
"transifex_event": payload.get("event", "None"),
|
"transifex_event": payload.get("event", "None"),
|
||||||
"transifex_project": payload.get("project", "None"),
|
"transifex_project": payload.get("project", "None"),
|
||||||
"transifex_resource": payload.get("resource", "None")
|
"transifex_resource": payload.get("resource", "None"),
|
||||||
|
"transifex_branch": "v0.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if codebase is not None:
|
if codebase is not None:
|
||||||
|
@ -92,15 +83,18 @@ class TransifexHandler(BaseHookHandler):
|
||||||
return changes
|
return changes
|
||||||
|
|
||||||
def _transform_variables(self, transifex_project, transifex_resource):
|
def _transform_variables(self, transifex_project, transifex_resource):
|
||||||
key = "{}/{}".format(transifex_project, transifex_resource)
|
if transifex_project is None:
|
||||||
_map = self.map[key]
|
raise ValueError("Unknown project %s from transifex".format(transifex_project))
|
||||||
repository = _map["repository"]
|
else:
|
||||||
project = transifex_project
|
key = "{}/{}".format(transifex_project, transifex_resource)
|
||||||
return {
|
_map = self.map[key]
|
||||||
'project': project,
|
repository = _map["repository"]
|
||||||
'repository': repository,
|
project = transifex_project
|
||||||
'branch': _map["branch"],
|
return{
|
||||||
}
|
'project': project,
|
||||||
|
'repository': repository,
|
||||||
|
'branch': _map["branch"],
|
||||||
|
}
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def getChanges(self, request):
|
def getChanges(self, request):
|
||||||
|
@ -119,34 +113,23 @@ class TransifexHandler(BaseHookHandler):
|
||||||
p = Properties()
|
p = Properties()
|
||||||
p.master = self.master
|
p.master = self.master
|
||||||
option = self.options
|
option = self.options
|
||||||
self.rendered_secret = yield p.render(self.secret)
|
rendered_secret = yield p.render(self.secret)
|
||||||
signature = hmac.new(
|
signature = hmac.new(
|
||||||
unicode2bytes(self.rendered_secret),
|
unicode2bytes(rendered_secret),
|
||||||
unicode2bytes(content_text.strip()),
|
unicode2bytes(content_text.strip()),
|
||||||
digestmod=hashlib.sha256)
|
digestmod=hashlib.sha256)
|
||||||
header_signature = bytes2unicode(
|
header_signature = bytes2unicode(
|
||||||
request.getHeader(_HEADER_SIGNATURE))
|
request.getHeader(_HEADER_SIGNATURE))
|
||||||
if not self._verifyTransifexSignature(request, content, self.rendered_secret, signature, header_signature):
|
self._verifyTransifexSignature(request, content, rendered_secret, signature, header_signature)
|
||||||
logging.warning("Verify Transifex Signature fail.")
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
logging.warning("Verify Transifex Signature ok")
|
|
||||||
|
|
||||||
event_type = payload.get("event", "None")
|
event_type = payload.get("event", "None")
|
||||||
|
|
||||||
change["properties"] = {
|
mapped_request = self._transform_variables(payload['project'], payload['resource'])
|
||||||
"transifex_language": payload.get("language", "None"),
|
|
||||||
"transifex_event": payload.get("event", "None"),
|
|
||||||
"transifex_project": payload.get("project", "None"),
|
|
||||||
"transifex_resource": payload.get("resource", "None")
|
|
||||||
}
|
|
||||||
transiform_map = self._transform_variables(payload['project'], payload['resource'])
|
|
||||||
|
|
||||||
change["changes"] = {
|
change["changes"] = {
|
||||||
"author": "buildbot-transifex",
|
"author": author,
|
||||||
"repository": transiform_map['repository'],
|
"repository": mapped_request["repository"],
|
||||||
"project": transiform_map['project'],
|
"project": mapped_request["project"],
|
||||||
"branch": transiform_map["branch"]
|
"branch": mapped_request["branch"]
|
||||||
}
|
}
|
||||||
|
|
||||||
log.msg("Received event '{}' from transifex".format(event_type))
|
log.msg("Received event '{}' from transifex".format(event_type))
|
||||||
|
@ -162,5 +145,4 @@ class TransifexHandler(BaseHookHandler):
|
||||||
|
|
||||||
return (changes, 'transifex')
|
return (changes, 'transifex')
|
||||||
|
|
||||||
|
transifex = TransifexHandler
|
||||||
transifex = TransifexHandler(transifex_to_github_map)
|
|
||||||
|
|
Loading…
Reference in New Issue