roundabout,
created on Monday, 11 December 2023, 19:25:45 (1702322745),
received on Wednesday, 31 July 2024, 06:54:39 (1722408879)
Author identity: vlad <vlad.muntoiu@gmail.com>
e14841424e18b6b8aaa11087febcc168f21bc0a5
app.py
@@ -94,6 +94,9 @@ with app.app_context():
repositories = db.relationship("Repo", back_populates="owner") repoAccess = db.relationship("RepoAccess", back_populates="user") commits = db.relationship("Commit", back_populates="owner") posts = db.relationship("Post", back_populates="owner") def __init__(self, username, password, email=None, displayName=None): self.username = username self.passwordHashed = bcrypt.generate_password_hash(password, config.HASHING_ROUNDS).decode("utf-8")
@@ -130,8 +133,11 @@ with app.app_context():
defaultBranch = db.Column(db.String(64), nullable=True, default="") commits = db.relationship("Commit", back_populates="repo") posts = db.relationship("Post", back_populates="repo")repoAccess = db.relationship("RepoAccess", back_populates="repo") lastPostID = db.Column(db.Integer, nullable=False, default=0) def __init__(self, owner, name, visibility): self.route = f"/{owner.username}/{name}" self.name = name
@@ -147,13 +153,14 @@ with app.app_context():
class Commit(db.Model): identifier = db.Column(db.String(227), unique=True, nullable=False, primary_key=True) sha = db.Column(db.String(128), nullable=False) repoName = db.Column(db.String(97), db.ForeignKey("repo.route"), nullable=False)repoName = db.Column(db.String(98), db.ForeignKey("repo.route"), nullable=False)ownerName = db.Column(db.String(32), db.ForeignKey("user.username"), nullable=False) ownerIdentity = db.Column(db.String(321)) receiveDate = db.Column(db.DateTime, default=datetime.now) authorDate = db.Column(db.DateTime) message = db.Column(db.UnicodeText) repo = db.relationship("Repo", back_populates="commits") owner = db.relationship("User", back_populates="commits")def __init__(self, sha, owner, repo, date, message, ownerIdentity): self.identifier = f"/{owner.username}/{repo.name}/{sha}"
@@ -167,6 +174,33 @@ with app.app_context():
self.ownerIdentity = ownerIdentity class Post(db.Model): identifier = db.Column(db.String(109), unique=True, nullable=False, primary_key=True) repoName = db.Column(db.String(98), db.ForeignKey("repo.route"), nullable=False) ownerName = db.Column(db.String(32), db.ForeignKey("user.username"), nullable=False) parentID = db.Column(db.String(109), db.ForeignKey("post.identifier"), nullable=True) date = db.Column(db.DateTime, default=datetime.now) subject = db.Column(db.Unicode(384)) message = db.Column(db.UnicodeText) repo = db.relationship("Repo", back_populates="posts") owner = db.relationship("User", back_populates="posts") parent = db.relationship("Post", back_populates="children", remote_side="Post.identifier") children = db.relationship("Post", back_populates="parent", remote_side="Post.parentID") def __init__(self, owner, repo, parent, subject, message): self.identifier = f"/{owner.username}/{repo.name}/{repo.lastPostID}" self.repoName = repo.route self.repo = repo self.ownerName = owner.username self.owner = owner self.subject = subject self.message = message self.parent = parent repo.lastPostID += 1 def getPermissionLevel(loggedIn, username, repository): user = User.query.filter_by(username=loggedIn).first() repo = Repo.query.filter_by(route=f"/{username}/{repository}").first()
@@ -582,7 +616,21 @@ def repositoryForum(username, repository):
repository) is not None): flask.abort(403) return flask.render_template("repo-forum.html", username=username, repository=repository)serverRepoLocation = os.path.join(config.REPOS_PATH, os.path.join(username, repository)) app.logger.info(f"Loading {serverRepoLocation}") if not os.path.exists(serverRepoLocation): app.logger.error(f"Cannot load {serverRepoLocation}") return flask.render_template("not-found.html"), 404 repo = git.Repo(serverRepoLocation) repoData = Repo.query.filter_by(route=f"/{username}/{repository}").first() user = User.query.filter_by(username=username).first() relationships = RepoAccess.query.filter_by(repo=repoData) userRelationship = RepoAccess.query.filter_by(repo=repoData, user=user).first() return flask.render_template("repo-forum.html", username=username, repository=repository, repoData=repoData, relationships=relationships, repo=repo, userRelationship=userRelationship, Post=Post)@app.route("/<username>/<repository>/users/", methods=["GET", "POST"])
templates/repo-forum.html
@@ -0,0 +1,12 @@
{% extends "repo.html" %} {% block title %} Forum of {{ username }}/{{ repository }} {% endblock %} {% block content %} <x-vbox> <x-frame style="--width: 896px;" class="flexible-space"> {% for post in Post.query.filter_by(repo=repoData) %} {% endfor %} </x-frame> </x-vbox> {% endblock %}
templates/repo.html
@@ -19,6 +19,7 @@
<!-- <li><a href="/{{ username }}/{{ repository }}/activity">Activity</a></li>--> <!-- <li><a href="/{{ username }}/{{ repository }}/people">People</a></li>--> <!-- <li><a href="/{{ username }}/{{ repository }}/ci">CI</a></li>--> <li><a href="/{{ username }}/{{ repository }}/forum">Forum</a></li><li><a href="/{{ username }}/{{ repository }}/users">Users</a></li> <li><a href="/{{ username }}/{{ repository }}/settings">Settings</a></li> </ul>