Beispiel #1
0
def get_spa_html(spa_url):
    if spa_url.startswith("/") or spa_url.startswith("../"):
        print("~~~ SPA: file", spa_url)
        with open(spa_url) as f:
            return f.read()
    print("~~~ SPA: url", spa_url)
    response = requests.get(join_url(spa_url, "index.html"), verify=False)
    response.raise_for_status()
    content = response.text
    return content
Beispiel #2
0
def get_default_head_tags(path):
    _config = Config.query.first()
    if not _config:
        return []

    instance_name = _config.app_name
    short_description = _config.app_description
    app_name = "reel2bits"

    parts = [instance_name, app_name]

    return [
        {
            "tag": "meta",
            "property": "og:type",
            "content": "website"
        },
        {
            "tag": "meta",
            "property": "og:site_name",
            "content": " - ".join([p for p in parts if p])
        },
        {
            "tag": "meta",
            "property": "og:description",
            "content": short_description
        },
        {
            "tag":
            "meta",
            "property":
            "og:image",
            "content":
            join_url(current_app.config["REEL2BITS_URL"],
                     "/static/favicon.png"),
        },
        {
            "tag": "meta",
            "property": "og:url",
            "content": join_url(current_app.config["REEL2BITS_URL"], path)
        },
    ]
Beispiel #3
0
def provider():
    """
    OEmbed provider.
    ---
    tags:
        - OEmbed
    responses:
        200:
            description: Returns the OEmbed thing
    """
    format = request.args.get("format", "json")
    url = request.args.get("url", None)
    if not url:
        # yep it's awful, should get fixed in app.py:page_not_found()/app.py:render_tags() I guess
        url = request.args.get("amp;url", None)
        if not url:
            return jsonify("no url given"), 400
    if format not in ["json"]:
        return jsonify("unsupported format"), 400

    _config = Config.query.first()
    if not _config:
        return jsonify("application error: no config"), 500

    url = urllib.parse.urlparse(url)

    view_info = get_view_info(url.path)
    if not view_info:
        return jsonify([]), 400

    view_name, view_arguments = view_info

    data = {
        "version": "1.0",
        "type": "rich",
        "provider_name": _config.app_name,
        "provider_url": current_app.config["REEL2BITS_URL"],
        "height": 400,
        "width": 600,
    }

    embed_id = None
    embed_type = None

    def get_user():
        return User.query.filter(User.name == view_arguments["username"], User.local.is_(True)).first()

    if view_name == "bp_spa.user_track":
        user = get_user()
        if not user:
            return jsonify("user not found"), 404
        track = Sound.query.filter(
            Sound.slug == view_arguments["trackslug"],
            Sound.user_id == user.id,
            Sound.private.is_(False),
            Sound.transcode_state == Sound.TRANSCODE_DONE,
        ).first()
        if not track:
            return jsonify("track not found"), 404

        embed_id = track.id
        embed_type = "track"

        data["title"] = f"{track.title} by {track.user.name}"
        if track.artwork_filename:
            url_artwork = url_for(
                "get_uploads_stuff", thing="artwork_sounds", stuff=track.path_artwork(), _external=True
            )
        else:
            url_artwork = join_url(current_app.config["REEL2BITS_URL"], "/static/artwork_placeholder.png")
        data["thumbnail_url"] = url_artwork
        data["thumbnail_width"] = 112
        data["thumbnail_height"] = 112
        data["description"] = track.description
        data["author_name"] = track.user.name
        data["height"] = 150
        data["author_url"] = url_for("bp_spa.user_profile", username=user.name, _external=True)
    elif view_name == "bp_spa.user_album":
        user = get_user()
        if not user:
            return jsonify("user not found"), 404
        album = Album.query.filter(
            Album.slug == view_arguments["albumslug"], Album.private.is_(False), Album.user_id == user.id
        ).first()
        if not album:
            return jsonify("album not found"), 404

        embed_id = album.id
        embed_type = "album"

        if album.artwork_filename:
            url_artwork = url_for(
                "get_uploads_stuff", thing="artwork_albums", stuff=album.path_artwork(), _external=True
            )
        else:
            url_artwork = join_url(current_app.config["REEL2BITS_URL"], "/static/artwork_placeholder.png")

        data["thumbnail_url"] = url_artwork
        data["thumbnail_width"] = 112
        data["thumbnail_height"] = 112
        data["title"] = f"{album.title} by {album.user.name}"
        data["description"] = album.description
        data["author_name"] = album.user.name
        data["height"] = 400
        data["author_url"] = url_for("bp_spa.user_profile", username=user.name, _external=True)
    elif view_name == "bp_spa.user_profile":
        user = get_user()
        if not user:
            return jsonify("user not found"), 404

        embed_id = user.id
        embed_type = "user"

        if user.avatar_filename:
            url_avatar = url_for("get_uploads_stuff", thing="avatars", stuff=user.path_avatar(), _external=True)
        else:
            url_avatar = join_url(current_app.config["REEL2BITS_URL"], "/static/userpic_placeholder.png")
        data["thumbnail_url"] = url_avatar
        data["thumbnail_width"] = 112
        data["thumbnail_height"] = 112
        data["title"] = user.name
        data["description"] = user.actor[0].summary
        data["author_name"] = user.name
        data["height"] = 400
        data["author_url"] = url_for("bp_spa.user_profile", username=user.name, _external=True)
    else:
        return jsonify("page not found"), 404

    embed_url = url_for("bp_api_embed.iframe", kind=embed_type, id=embed_id, _external=True)
    data[
        "html"
    ] = f'<iframe width="{data["width"]}" height="{data["height"]}" scrolling="no" frameborder="no" src="{embed_url}"></iframe>'

    return jsonify(data)
Beispiel #4
0
def get_user_profile_tags(view_name, view_arguments):
    user = get_user(view_arguments)
    if not user:
        return []

    feed_url = url_for("bp_feeds.tracks", user_id=user.id, _external=True)
    musician_url = url_for("bp_spa.user_profile",
                           username=user.name,
                           _external=True)

    metas = [
        {
            "tag": "link",
            "rel": "alternate",
            "type": "application/atom+xml",
            "href": feed_url
        },
        {
            "tag": "meta",
            "property": "og:url",
            "content": musician_url
        },
        {
            "tag": "meta",
            "property": "og:title",
            "content": user.name
        },
        {
            "tag": "meta",
            "property": "og:type",
            "content": "profile"
        },
    ]

    if user.avatar_filename:
        url_avatar = url_for("get_uploads_stuff",
                             thing="avatars",
                             stuff=user.path_avatar(),
                             _external=True)
    else:
        url_avatar = join_url(current_app.config["REEL2BITS_URL"],
                              "/static/userpic_placeholder.png")
    metas.append({
        "tag": "meta",
        "property": "og:image",
        "content": url_avatar
    })

    oembed_url = join_url(
        current_app.config["REEL2BITS_URL"],
        f"/api/oembed?format=json&url={urllib.parse.quote_plus(musician_url)}")

    metas.append({
        "tag": "link",
        "rel": "alternate",
        "type": "application/json+oembed",
        "href": oembed_url
    })

    metas += get_twitter_card_metas(type="user", id=user.id)

    return metas
Beispiel #5
0
def get_user_album_tags(view_name, view_arguments):
    user = get_user(view_arguments)
    if not user:
        return []

    album = Album.query.filter(
        Album.user_id == user.id, Album.private.is_(False),
        Album.slug == view_arguments["albumslug"]).first()
    if not album:
        return []

    album_url = url_for("bp_spa.user_album",
                        username=user.name,
                        albumslug=album.slug,
                        _external=True)
    musician_url = url_for("bp_spa.user_profile",
                           username=user.name,
                           _external=True)
    feed_url = url_for("bp_feeds.album",
                       user_id=album.user.id,
                       album_id=album.id,
                       _external=True)

    metas = [
        {
            "tag": "meta",
            "property": "og:url",
            "content": album_url
        },
        {
            "tag": "meta",
            "property": "og:title",
            "content": album.title
        },
        {
            "tag": "meta",
            "property": "og:type",
            "content": "music.album"
        },
        {
            "tag": "meta",
            "property": "music:musician",
            "content": musician_url
        },
        {
            "tag": "link",
            "rel": "alternate",
            "type": "application/atom+xml",
            "href": feed_url
        },
    ]

    if album.artwork_filename:
        url_artwork = url_for("get_uploads_stuff",
                              thing="artwork_albums",
                              stuff=album.path_artwork(),
                              _external=True)
    else:
        url_artwork = join_url(current_app.config["REEL2BITS_URL"],
                               "/static/artwork_placeholder.png")
    metas.append({
        "tag": "meta",
        "property": "og:image",
        "content": url_artwork
    })

    oembed_url = join_url(
        current_app.config["REEL2BITS_URL"],
        f"/api/oembed?format=json&url={urllib.parse.quote_plus(album_url)}")

    metas.append({
        "tag": "link",
        "rel": "alternate",
        "type": "application/json+oembed",
        "href": oembed_url
    })

    metas += get_twitter_card_metas(type="album", id=album.id)

    return metas
Beispiel #6
0
def get_user_track_tags(view_name, view_arguments):
    user = get_user(view_arguments)
    if not user:
        return []
    track = Sound.query.filter(
        Sound.slug == view_arguments["trackslug"],
        Sound.user_id == user.id,
        Sound.private.is_(False),
        Sound.transcode_state == Sound.TRANSCODE_DONE,
    ).first()
    if not track:
        return []

    track_url = url_for("bp_spa.user_track",
                        username=user.name,
                        trackslug=user.name,
                        _external=True)
    musician_url = url_for("bp_spa.user_profile",
                           username=user.name,
                           _external=True)
    transcode_url = url_for("get_uploads_stuff",
                            thing="sounds",
                            stuff=track.path_sound(orig=False),
                            _external=True)

    metas = [
        {
            "tag": "meta",
            "property": "og:url",
            "content": track_url
        },
        {
            "tag": "meta",
            "property": "og:title",
            "content": track.title
        },
        {
            "tag": "meta",
            "property": "og:type",
            "content": "music.song"
        },
        {
            "tag": "meta",
            "property": "music:musician",
            "content": musician_url
        },
    ]

    if track.album:
        album_url = url_for("bp_spa.user_album",
                            username=user.name,
                            albumslug=track.album.slug,
                            _external=True)
        metas.append({
            "tag": "meta",
            "property": "music:album:disc",
            "content": 1
        })
        metas.append({
            "tag": "meta",
            "property": "music:album:track",
            "content": track.album_order
        })
        metas.append({
            "tag": "meta",
            "property": "music:album",
            "content": album_url
        })
    if track.artwork_filename:
        url_artwork = url_for("get_uploads_stuff",
                              thing="artwork_sounds",
                              stuff=track.path_artwork(),
                              _external=True)
    else:
        url_artwork = join_url(current_app.config["REEL2BITS_URL"],
                               "/static/artwork_placeholder.png")
    metas.append({
        "tag": "meta",
        "property": "og:image",
        "content": url_artwork
    })
    metas.append({
        "tag": "meta",
        "property": "og:audio",
        "content": transcode_url
    })

    oembed_url = join_url(
        current_app.config["REEL2BITS_URL"],
        f"/api/oembed?format=json&url={urllib.parse.quote_plus(track_url)}")

    metas.append({
        "tag": "link",
        "rel": "alternate",
        "type": "application/json+oembed",
        "href": oembed_url
    })

    metas += get_twitter_card_metas(type="track", id=track.id)

    return metas