Exemple #1
0
def attach_bitbucket_build_trigger(trigger_uuid):
    trigger = model.build.get_build_trigger(trigger_uuid)
    if not trigger or trigger.service.name != BitbucketBuildTrigger.service_name(
    ):
        abort(404)

    if trigger.connected_user != current_user.db_user():
        abort(404)

    verifier = request.args.get('oauth_verifier')
    handler = BuildTriggerHandler.get_handler(trigger)
    result = handler.exchange_verifier(verifier)
    if not result:
        trigger.delete_instance()
        return 'Token has expired'

    namespace = trigger.repository.namespace_user.username
    repository = trigger.repository.name

    repo_path = '%s/%s' % (namespace, repository)
    full_url = url_for('web.buildtrigger',
                       path=repo_path,
                       trigger=trigger.uuid)

    logger.debug('Redirecting to full url: %s', full_url)
    return redirect(full_url)
Exemple #2
0
def attach_bitbucket_trigger(namespace_name, repo_name):
    permission = AdministerRepositoryPermission(namespace_name, repo_name)
    if permission.can():
        repo = model.repository.get_repository(namespace_name, repo_name)
        if not repo:
            msg = "Invalid repository: %s/%s" % (namespace_name, repo_name)
            abort(404, message=msg)
        elif repo.kind.name != "image":
            abort(501)

        trigger = model.build.create_build_trigger(
            repo, BitbucketBuildTrigger.service_name(), None,
            current_user.db_user())

        try:
            oauth_info = BuildTriggerHandler.get_handler(
                trigger).get_oauth_url()
        except TriggerProviderException:
            trigger.delete_instance()
            logger.debug("Could not retrieve Bitbucket OAuth URL")
            abort(500)

        config = {"access_token": oauth_info["access_token"]}

        access_token_secret = oauth_info["access_token_secret"]
        model.build.update_build_trigger(trigger,
                                         config,
                                         auth_token=access_token_secret)

        return redirect(oauth_info["url"])

    abort(403)