diff --git a/client/html/comment.tpl b/client/html/comment.tpl index 6bea7045..df7b3664 100644 --- a/client/html/comment.tpl +++ b/client/html/comment.tpl @@ -26,7 +26,7 @@ %>'><% %><% } %><% - %><%- ctx.user ? ctx.user.name : 'Deleted user' %><% + %><%- ctx.user ? ctx.user.name : 'Anonymous' %><% %><% if (ctx.user && ctx.user.name && ctx.canViewUsers) { %><% %><% diff --git a/server/szurubooru/api/comment_api.py b/server/szurubooru/api/comment_api.py index d60d23ed..0dbc93de 100644 --- a/server/szurubooru/api/comment_api.py +++ b/server/szurubooru/api/comment_api.py @@ -48,7 +48,7 @@ def create_comment( text = ctx.get_param_as_string("text") post_id = ctx.get_param_as_int("postId") post = posts.get_post_by_id(post_id) - comment = comments.create_comment(ctx.user, post, text) + comment = comments.create_comment(ctx.user if ctx.user.name else None, post, text) ctx.session.add(comment) ctx.session.commit() return _serialize(ctx, comment) diff --git a/server/szurubooru/func/posts.py b/server/szurubooru/func/posts.py index be2259cf..fdaf9a91 100644 --- a/server/szurubooru/func/posts.py +++ b/server/szurubooru/func/posts.py @@ -794,6 +794,8 @@ def update_post_flags(post: model.Post, flags: List[str]) -> None: def feature_post(post: model.Post, user: Optional[model.User]) -> None: assert post + if user and not user.name: + user = None post_feature = model.PostFeature() post_feature.time = datetime.utcnow() post_feature.post = post diff --git a/server/szurubooru/func/snapshots.py b/server/szurubooru/func/snapshots.py index afb26ea5..f5f4c824 100644 --- a/server/szurubooru/func/snapshots.py +++ b/server/szurubooru/func/snapshots.py @@ -107,6 +107,9 @@ def _create( entity ) + if auth_user and not auth_user.name: + auth_user = None + snapshot = model.Snapshot() snapshot.creation_time = datetime.utcnow() snapshot.operation = operation diff --git a/server/szurubooru/func/users.py b/server/szurubooru/func/users.py index 5cbe3cc0..1c9ba116 100644 --- a/server/szurubooru/func/users.py +++ b/server/szurubooru/func/users.py @@ -43,12 +43,14 @@ def get_avatar_path(user_name: str) -> str: def get_avatar_url(user: model.User) -> str: assert user if user.avatar_style == user.AVATAR_GRAVATAR: - assert user.email or user.name + if not user.email and not user.name: + return "" return "https://gravatar.com/avatar/%s?d=retro&s=%d" % ( util.get_md5((user.email or user.name).lower()), config.config["thumbnails"]["avatar_width"], ) - assert user.name + if not user.name: + return "" return "%s/avatars/%s.png" % ( config.config["data_url"].rstrip("/"), user.name.lower(), diff --git a/server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py b/server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py new file mode 100644 index 00000000..2312c7dc --- /dev/null +++ b/server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py @@ -0,0 +1,26 @@ +''' +make featuring users nullable + +Revision ID: 5b5c940b4e78 +Created at: 2025-04-04 08:24:39.000603 +''' + +import sqlalchemy as sa +from alembic import op + +revision = '5b5c940b4e78' +down_revision = 'adcd63ff76a2' +branch_labels = None +depends_on = None + +def upgrade(): + op.alter_column( + "post_feature", "user_id", nullable=True, existing_nullable=False + ) + pass + +def downgrade(): + op.alter_column( + "post_feature", "user_id", nullable=False, existing_nullable=True + ) + pass diff --git a/server/szurubooru/model/comment.py b/server/szurubooru/model/comment.py index e64961e6..d35c5af1 100644 --- a/server/szurubooru/model/comment.py +++ b/server/szurubooru/model/comment.py @@ -46,7 +46,7 @@ class Comment(Base): user_id = sa.Column( "user_id", sa.Integer, - sa.ForeignKey("user.id"), + sa.ForeignKey("user.id", ondelete="SET NULL"), nullable=True, index=True, ) diff --git a/server/szurubooru/model/post.py b/server/szurubooru/model/post.py index 49e748dc..eb394167 100644 --- a/server/szurubooru/model/post.py +++ b/server/szurubooru/model/post.py @@ -24,8 +24,8 @@ class PostFeature(Base): user_id = sa.Column( "user_id", sa.Integer, - sa.ForeignKey("user.id"), - nullable=False, + sa.ForeignKey("user.id", ondelete="SET NULL"), + nullable=True, index=True, ) time = sa.Column("time", sa.DateTime, nullable=False)