roundabout,
created on Wednesday, 24 April 2024, 13:47:04 (1713966424),
received on Wednesday, 31 July 2024, 06:54:46 (1722408886)
Author identity: vlad <vlad.muntoiu@gmail.com>
514142621a78300c551c235634f71cb735513a4f
app.py
@@ -460,12 +460,30 @@ def repository_index(username, repository):
@app.route("/info/<username>/avatar") def user_avatar(username): serverUserdataLocation = os.path.join(config.USERDATA_PATH, username)if not os.path.exists(serverUserdataLocation):server_userdata_location = os.path.join(config.USERDATA_PATH, username) if not os.path.exists(server_userdata_location):return flask.render_template("not-found.html"), 404 return flask.send_from_directory(serverUserdataLocation, "avatar.png")return flask.send_from_directory(server_userdata_location, "avatar.png") @app.route("/info/<username>/avatar", methods=["POST"]) def user_avatar_upload(username): server_userdata_location = os.path.join(config.USERDATA_PATH, username) if not os.path.exists(server_userdata_location): flask.abort(404) if not flask.session.get("username") == username: flask.abort(403) # Convert image to PNG try: image = Image.open(flask.request.files["avatar"]) except: flask.abort(400) image.save(os.path.join(server_userdata_location, "avatar.png")) return flask.redirect(f"/{username}", code=303)@app.route("/<username>/<repository>/raw/<branch>/<path:subpath>")
static/style.css
@@ -534,3 +534,24 @@ strong, em {
display: inline-flex; margin: 0; } #change-avatar-label { cursor: pointer; position: relative; width: max(25%, 128px); aspect-ratio: 1/1; border-radius: 50%; overflow: hidden; } #change-avatar-label:hover::before { position: absolute; content: attr(data-change-label); background: #00000080; color: #ffffff; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; }
templates/user-settings.html
@@ -17,6 +17,20 @@
</x-buttonbox> </section> </article> <article class="card"> <section class="card-main"> <h2>{% trans %}Avatar{% endtrans %}</h2> <x-vbox> <label for="change-avatar" id="change-avatar-label" data-change-label="{% trans %}Change{% endtrans %}"> <img src="/info/{{ user.username }}/avatar" alt="{{ user.username }}" class="avatar" style="width: 100%;"> </label> <form method="post" enctype="multipart/form-data" action="/info/{{ user.username }}/avatar"> <input type="file" name="avatar" accept="image/*" style="display: none;" id="change-avatar"> <button type="submit">{% trans %}Update{% endtrans %}</button> </form> </x-vbox> </section> </article><article class="card"> <section class="card-main"> <form method="post">