roundabout,
created on Thursday, 11 July 2024, 10:17:26 (1720693046),
received on Wednesday, 31 July 2024, 06:54:50 (1722408890)
Author identity: vlad <vlad.muntoiu@gmail.com>
89dc89e84ecc9e72467890c998227bc3e7d06bb6
app.py
@@ -1716,6 +1716,33 @@ def repository_settings_post(username, repository):
return flask.redirect(f"/{username}/{repository}/settings", 303) @repositories.route("/<username>/<repository>/settings/delete", methods=["POST"]) def repository_settings_delete(username, repository): if username != flask.session.get("username"): flask.abort(401) repo = db.session.get(Repo, f"/{username}/{repository}") if not repo: flask.abort(404) user = db.session.get(User, flask.session.get("username")) if not bcrypt.check_password_hash(user.password_hashed, flask.request.form.get("password")): flask.flash(_("Incorrect password"), category="error") flask.abort(401) if repo.has_site: celery_tasks.delete_site.delay(repo.route) db.session.delete(repo) db.session.commit() shutil.rmtree(os.path.join(config.REPOS_PATH, username, repository)) return flask.redirect(f"/{username}", 303) @app.errorhandler(404) def e404(error): return flask.render_template("errors/not-found.html"), 404
models.py
@@ -100,7 +100,7 @@ with (app.app_context()):
default_page_length = db.Column(db.SmallInteger, nullable=False, default=32, server_default="32") max_post_nesting = db.Column(db.SmallInteger, nullable=False, default=3, server_default="3") repositories = db.relationship("Repo", back_populates="owner")repositories = db.relationship("Repo", back_populates="owner", cascade="all, delete-orphan")followers = db.relationship("UserFollow", back_populates="followed", foreign_keys="[UserFollow.followed_username]") follows = db.relationship("UserFollow", back_populates="follower", foreign_keys="[UserFollow.follower_username]") email_change_requests = db.relationship("EmailChangeRequest", back_populates="user")
@@ -165,13 +165,20 @@ with (app.app_context()):
default_branch = db.Column(db.String(64), nullable=True, default="") commits = db.relationship("Commit", back_populates="repo")posts = db.relationship("Post", back_populates="repo")comments = db.relationship("Comment", back_populates="repo")repo_access = db.relationship("RepoAccess", back_populates="repo")favourites = db.relationship("RepoFavourite", back_populates="repo")heads = db.relationship("PullRequest", back_populates="head", foreign_keys="[PullRequest.head_route]")bases = db.relationship("PullRequest", back_populates="base", foreign_keys="[PullRequest.base_route]")commits = db.relationship("Commit", back_populates="repo", cascade="all, delete-orphan") posts = db.relationship("Post", back_populates="repo", cascade="all, delete-orphan") comments = db.relationship("Comment", back_populates="repo", cascade="all, delete-orphan") repo_access = db.relationship("RepoAccess", back_populates="repo", cascade="all, delete-orphan") favourites = db.relationship("RepoFavourite", back_populates="repo", cascade="all, delete-orphan") heads = db.relationship("PullRequest", back_populates="head", foreign_keys="[PullRequest.head_route]", cascade="all, delete-orphan") bases = db.relationship("PullRequest", back_populates="base", foreign_keys="[PullRequest.base_route]", cascade="all, delete-orphan")has_site = db.Column(db.SmallInteger, nullable=False, default=0, # 0 means no site, 1 means it's got a site, 2 means it's the user's primary site server_default="0") # (the one accessible at username.localhost)
templates/repo.html
@@ -86,7 +86,7 @@
{% if logged_in_user %} <a title="{% trans %}Mark as favourite{% endtrans %}" class="button" href="/{{ username }}/{{ repository }}/favourite"> {% if not is_favourite %} {% trans %}Favourite{% endtrans %}{% trans %}Add favourite{% endtrans %}{% else %} {% trans %}Remove favourite{% endtrans %} {% endif %}
templates/repository/repo-settings.html
@@ -9,67 +9,78 @@
<x-frame style="--width: 896px;" class="flexible-space"> <x-vbox> <article class="card"> <section class="card-main"><form method="post"><x-vbox><x-hbox><label>{% trans %}Visibility:{% endtrans %}</label><label><input type="radio" name="visibility" value="2" {% if repo_data.visibility == 2 %}checked{% endif %}>{% trans %}Public{% endtrans %}</label><label><input type="radio" name="visibility" value="1" {% if repo_data.visibility == 1 %}checked{% endif %}>{% trans %}Unlisted{% endtrans %}</label><label><input type="radio" name="visibility" value="0" {% if repo_data.visibility == 0 %}checked{% endif %}>{% trans %}Private{% endtrans %}</label></x-hbox><label for="description">{% trans %}Description{% endtrans %}<textarea id="description" name="description" rows="4">{% if repo_data.info %}{{ repo_data.info }}{% endif %}</textarea></label><label for="url">{% trans %}Homepage{% endtrans %}<input id="url" name="url" type="url" value="{% if repo_data.url %}{{ repo_data.url }}{% endif %}"></label><label for="default-branch">{% trans %}Default branch{% endtrans %}<select id="default-branch" name="default_branch">{% for branch in branches %}<option value="{{ branch }}" {% if branch == repo_data.default_branch %}selected{% endif %}>{{ branch }}</option>{% endfor %}</select>{% trans %}This is the branch the application will redirect to automatically if one is not specified.Note that only branch names are supported, not other references like tags or commit hashes.{% endtrans %}<section class="card-main vbox"> <form method="post" class="vbox"> <x-hbox> <label>{% trans %}Visibility:{% endtrans %}</label> <label> <input type="radio" name="visibility" value="2" {% if repo_data.visibility == 2 %}checked{% endif %}> {% trans %}Public{% endtrans %}</label> <label for="site-branch">{% trans %}Site branch{% endtrans %}<select id="site-branch" name="site_branch"><option value="">{% trans %}No sites{% endtrans %}</option>{% for branch in branches %}<option value="{{ branch }}" {% if branch == repo_data.site_branch %}selected{% endif %}>{{ branch }}</option>{% endfor %}</select><label> <input type="radio" name="visibility" value="1" {% if repo_data.visibility == 1 %}checked{% endif %}> {% trans %}Unlisted{% endtrans %}</label> <label> <input type="checkbox" name="primary_site" {% if repo_data.has_site == 2 %}checked{% endif %}>{% trans %}Make this the primary site{% endtrans %}<input type="radio" name="visibility" value="0" {% if repo_data.visibility == 0 %}checked{% endif %}> {% trans %}Private{% endtrans %}</label> </x-hbox> <label for="description"> {% trans %}Description{% endtrans %} <textarea id="description" name="description" rows="4">{% if repo_data.info %}{{ repo_data.info }}{% endif %}</textarea> </label> <label for="url"> {% trans %}Homepage{% endtrans %} <input id="url" name="url" type="url" value="{% if repo_data.url %}{{ repo_data.url }}{% endif %}"> </label> <label for="default-branch"> {% trans %}Default branch{% endtrans %} <select id="default-branch" name="default_branch"> {% for branch in branches %} <option value="{{ branch }}" {% if branch == repo_data.default_branch %}selected{% endif %}>{{ branch }}</option> {% endfor %} </select> {% trans %}This is the branch the application will redirect to automatically if one is not specified. Note that only branch names are supported, not other references like tags or commit hashes.{% endtrans %} </label> <label for="site-branch"> {% trans %}Site branch{% endtrans %} <select id="site-branch" name="site_branch"> <option value="">{% trans %}No sites{% endtrans %}</option> {% for branch in branches %} <option value="{{ branch }}" {% if branch == repo_data.site_branch %}selected{% endif %}>{{ branch }}</option> {% endfor %} </select> </label> <label> <input type="checkbox" name="primary_site" {% if repo_data.has_site == 2 %}checked{% endif %}> {% trans %}Make this the primary site{% endtrans %} </label> <p> {% trans link=site_link, primary_link=primary_site_link %} Host static sites for your projects, for free. The files in your site branch will be served at {{ site_link }} or {{ primary_site_link }} if you make this the primary site. {% endtrans %} </p> <p> {% trans %}Even if this repository is private, the site will not have access control.{% endtrans %} </p> <button type="submit">{% trans %}Update{% endtrans %}</button> </form> {% if logged_in_user == username %} <form action="/{{ username }}/{{ repository }}/settings/delete" method="post" class="vbox"> <h2>{% trans %}Delete repository{% endtrans %}</h2><p> {% trans link=site_link, primary_link=primary_site_link %}Host static sites for your projects, for free. The files in your site branch will be served at{{ site_link }} or {{ primary_site_link }} if you make this the primary site.{% endtrans %}</p><p>{% trans %}Even if this repository is private, the site will not have access control.{% endtrans %}{% trans %}Deleting a repository will permanently remove its git database, forum, settings and other associated data. THIS CANNOT BE UNDONE IN ANY WAY!{% endtrans %}</p> <button type="submit">Update</button></x-vbox></form><label> {% trans %}Account password{% endtrans %} <input type="password" name="password" placeholder="{% trans %}Write your password to confirm deletion{% endtrans %}" required> </label> <button type="submit">{% trans %}Delete repository{% endtrans %}</button> </form> {% endif %}</section> </article> </x-vbox>