Esempio n. 1
0
 def test_verify_invalid(self):
     with assert_raises(HookError):
         utils.verify_hook_signature(
             self.node_settings,
             HOOK_PAYLOAD,
             {'X-Hub-Signature': 'invalid'}
         )
Esempio n. 2
0
 def test_verify_valid(self):
     try:
         utils.verify_hook_signature(
             self.node_settings,
             HOOK_PAYLOAD,
             {
                 'X-Hub-Signature': make_signature(
                     self.node_settings.hook_secret,
                     HOOK_PAYLOAD,
                 )
             }
         )
     except HookError:
         assert 0
Esempio n. 3
0
def github_hook_callback(node_addon, **kwargs):
    """Add logs for commits from outside OSF.

    """
    if request.json is None:
        return {}

    # Fail if hook signature is invalid
    verify_hook_signature(
        node_addon,
        request.data,
        request.headers,
    )

    node = kwargs['node'] or kwargs['project']

    payload = request.json

    for commit in payload.get('commits', []):

        # TODO: Look up OSF user by commit

        # Skip if pushed by OSF
        if commit['message'] and commit['message'] in MESSAGES.values():
            continue

        _id = commit['id']
        date = dateparse(commit['timestamp'])
        committer = commit['committer']['name']

        # Add logs
        for path in commit.get('added', []):
            add_hook_log(
                node, node_addon, 'github_' + NodeLog.FILE_ADDED,
                path, date, committer, include_urls=True, sha=_id,
            )
        for path in commit.get('modified', []):
            add_hook_log(
                node, node_addon, 'github_' + NodeLog.FILE_UPDATED,
                path, date, committer, include_urls=True, sha=_id,
            )
        for path in commit.get('removed', []):
            add_hook_log(
                node, node_addon, 'github_' + NodeLog.FILE_REMOVED,
                path, date, committer,
            )

    node.save()
Esempio n. 4
0
 def test_verify_no_secret(self):
     self.node_settings.hook_secret = None
     with assert_raises(HookError):
         utils.verify_hook_signature(self.node_settings, {}, {})