Beispiel #1
0
def post_register_name():
    snap_name = flask.request.form.get("snap-name")

    if not snap_name:
        return flask.redirect(flask.url_for(".get_register_name"))

    is_private = flask.request.form.get("is_private") == "private"
    store = flask.request.form.get("store")
    registrant_comment = flask.request.form.get("registrant_comment")

    try:
        api.post_register_name(
            session=flask.session,
            snap_name=snap_name,
            is_private=is_private,
            store=store,
            registrant_comment=registrant_comment,
        )
    except ApiResponseErrorList as api_response_error_list:
        if api_response_error_list.status_code == 409:
            for error in api_response_error_list.errors:
                if error["code"] == "already_claimed":
                    return flask.redirect(
                        flask.url_for("account.get_account_details"))
                elif error["code"] == "already_registered":
                    return flask.redirect(
                        flask.url_for(
                            ".get_register_name",
                            snap_name=snap_name,
                            is_private=is_private,
                            conflict=True,
                        ))
                elif error["code"] == "already_owned":
                    return flask.redirect(
                        flask.url_for(
                            ".get_register_name",
                            snap_name=snap_name,
                            is_private=is_private,
                            already_owned=True,
                        ))

        context = {
            "snap_name": snap_name,
            "is_private": is_private,
            "errors": api_response_error_list.errors,
        }

        return flask.render_template("publisher/register-snap.html", **context)
    except ApiError as api_error:
        return _handle_errors(api_error)

    flask.flash("".join([
        snap_name,
        " registered.",
        ' <a href="https://docs.snapcraft.io/build-snaps/upload"',
        ' class="p-link--external"',
        ' target="blank">How to upload a Snap</a>',
    ]))

    return flask.redirect(flask.url_for("account.get_account"))
Beispiel #2
0
def post_register_name():
    snap_name = flask.request.form.get('snap-name')

    if not snap_name:
        return flask.redirect(flask.url_for('.get_register_name'))

    is_private = flask.request.form.get('is_private') == 'private'
    store = flask.request.form.get('store')
    registrant_comment = flask.request.form.get('registrant_comment')

    try:
        api.post_register_name(session=flask.session,
                               snap_name=snap_name,
                               is_private=is_private,
                               store=store,
                               registrant_comment=registrant_comment)
    except ApiResponseErrorList as api_response_error_list:
        if api_response_error_list.status_code == 409:
            for error in api_response_error_list.errors:
                if error['code'] == 'already_claimed':
                    return flask.redirect(flask.url_for('.get_account'))
                elif error['code'] == 'already_registered':
                    return flask.redirect(
                        flask.url_for('account.get_register_name',
                                      snap_name=snap_name,
                                      is_private=is_private,
                                      conflict=True))
                elif error['code'] == 'already_owned':
                    return flask.redirect(
                        flask.url_for('account.get_register_name',
                                      snap_name=snap_name,
                                      is_private=is_private,
                                      already_owned=True))

        context = {
            'snap_name': snap_name,
            'is_private': is_private,
            'errors': api_response_error_list.errors,
        }

        return flask.render_template('publisher/register-snap.html', **context)
    except ApiError as api_error:
        return _handle_errors(api_error)

    flask.flash(''.join([
        snap_name, ' registered.',
        ' <a href="https://docs.snapcraft.io/build-snaps/upload"',
        ' class="p-link--external"', ' target="blank">How to upload a Snap</a>'
    ]))

    return flask.redirect(flask.url_for('.get_account'))
Beispiel #3
0
def post_register_name_json():
    snap_name = flask.request.form.get("snap-name")

    if not snap_name:
        return (
            flask.jsonify({"errors": [{
                "message": "Snap name is required"
            }]}),
            400,
        )

    try:
        response = api.post_register_name(session=flask.session,
                                          snap_name=snap_name)
    except ApiResponseErrorList as api_response_error_list:
        for error in api_response_error_list.errors:
            # if snap name is already owned treat it as success
            if error["code"] == "already_owned":
                return flask.jsonify({
                    "code": error["code"],
                    "snap_name": snap_name
                })
        return (
            flask.jsonify({"errors": api_response_error_list.errors}),
            api_response_error_list.status_code,
        )
    except ApiError as api_error:
        return _handle_error(api_error)

    response["code"] = "created"

    return flask.jsonify(response)
Beispiel #4
0
def post_register_name():
    snap_name = flask.request.form.get('snap-name')

    if not snap_name:
        return flask.redirect(flask.url_for('.get_register_name'))

    is_private = flask.request.form.get('is_private') == 'private'
    store = flask.request.form.get('store')
    registrant_comment = flask.request.form.get('registrant_comment')

    try:
        api.post_register_name(session=flask.session,
                               snap_name=snap_name,
                               is_private=is_private,
                               store=store,
                               registrant_comment=registrant_comment)
    except ApiResponseErrorList as api_response_error_list:
        if api_response_error_list.status_code == 409:
            for error in api_response_error_list.errors:
                if error['code'] == 'already_claimed':
                    # TODO add flash message for next page with notification
                    return flask.redirect(flask.url_for('.get_account'))
                elif error['code'] == 'already_registered':
                    return flask.redirect(
                        flask.url_for('account.get_register_name',
                                      snap_name=snap_name,
                                      is_private=is_private,
                                      conflict=True))

        context = {
            'snap_name': snap_name,
            'is_private': is_private,
            'errors': api_response_error_list.errors,
        }

        return flask.render_template('publisher/register-name.html', **context)
    except ApiError as api_error:
        return _handle_errors(api_error)

    return flask.redirect(flask.url_for('.get_account'))
Beispiel #5
0
def post_register_name():
    snap_name = flask.request.form.get("snap-name")

    if not snap_name:
        return flask.redirect(flask.url_for(".get_register_name"))

    is_private = flask.request.form.get("is_private") == "private"
    store = flask.request.form.get("store")
    registrant_comment = flask.request.form.get("registrant_comment")

    try:
        api.post_register_name(
            session=flask.session,
            snap_name=snap_name,
            is_private=is_private,
            store=store,
            registrant_comment=registrant_comment,
        )
    except ApiResponseErrorList as api_response_error_list:
        try:
            user = api.get_account(flask.session)
        except ApiError as api_error:
            return _handle_errors(api_error)

        available_stores = logic.filter_available_stores(user["stores"])

        if api_response_error_list.status_code == 409:
            for error in api_response_error_list.errors:
                if error["code"] == "already_claimed":
                    return flask.redirect(
                        flask.url_for("account.get_account_details")
                    )
                elif error["code"] == "already_registered":
                    return flask.redirect(
                        flask.url_for(
                            ".get_register_name",
                            snap_name=snap_name,
                            is_private=is_private,
                            conflict=True,
                        )
                    )
                elif error["code"] == "already_owned":
                    return flask.redirect(
                        flask.url_for(
                            ".get_register_name",
                            snap_name=snap_name,
                            is_private=is_private,
                            already_owned=True,
                        )
                    )

        context = {
            "snap_name": snap_name,
            "is_private": is_private,
            "available_stores": available_stores,
            "errors": api_response_error_list.errors,
        }

        return flask.render_template("publisher/register-snap.html", **context)
    except ApiError as api_error:
        return _handle_errors(api_error)

    flask.flash(
        "".join(
            [
                snap_name,
                " registered.",
                ' <a href="https://docs.snapcraft.io/build-snaps/upload"',
                ' class="p-link--external"',
                ' target="blank">How to upload a Snap</a>',
            ]
        )
    )

    return flask.redirect(flask.url_for("account.get_account"))