move anonymous viewable to identity

This commit is contained in:
Your Name 2023-12-29 02:11:36 -05:00 committed by Henri Dickson
parent 391d82a418
commit 3185cf44f4
11 changed files with 53 additions and 13 deletions

View file

@ -64,7 +64,7 @@ def max_visiblity_to_user(viewing_user: User, owner: APIdentity):
def q_piece_visible_to_user(user: User):
if not user or not user.is_authenticated or not user.identity:
return Q(visibility=0, owner__user__preference__no_anonymous_view=False)
return Q(visibility=0, owner__anonymous_viewable=True)
return (
Q(visibility=0)
| Q(owner_id__in=user.identity.following, visibility=1)

View file

@ -20,7 +20,7 @@
<meta property="og:url" content="{{ request.build_absolute_uri }}">
<meta property="og:image" content="{{ identity.avatar }}">
<meta property="og:site_name" content="{{ site_name }}">
{% if identity.preference.no_anonymous_view %}<meta name="robots" content="noindex">{% endif %}
{% if not identity.anonymous_viewable %}<meta name="robots" content="noindex">{% endif %}
<link rel="alternate"
type="application/rss+xml"
title="{{ site_name }} - {{ identity.handler }}的评论"

View file

@ -21,7 +21,7 @@
<meta property="og:url" content="{{ request.build_absolute_uri }}">
<meta property="og:image" content="{{ review.item.cover|thumb:'normal' }}">
<meta property="og:site_name" content="{{ site_name }}">
{% if identity.preference.no_anonymous_view %}<meta name="robots" content="noindex">{% endif %}
{% if not identity.anonymous_viewable %}<meta name="robots" content="noindex">{% endif %}
<title>{{ site_name }}{% trans '评论' %} - {{ review.title }}</title>
{% include "common_libs.html" with jquery=0 v2=1 %}
</head>
@ -58,7 +58,15 @@
</div>
</div>
</header>
<div class="markdown-content">{{ review.html_content | safe }}</div>
<div class="markdown-content">
{% if request.user.is_authenticated or review.owner.anonymous_viewable %}
{{ review.html_content | safe }}
{% else %}
<p class="empty">
<span>作者已设置为<a href="{% url 'users:login' %}?next={{ request.path }}">登录</a>后可查看</span>
</p>
{% endif %}
</div>
<footer>
{% if request.user.is_authenticated %}
<span class="action">

View file

@ -24,7 +24,7 @@ def profile(request: AuthedHttpRequest, user_name):
target = request.target_identity
# if user.mastodon_acct != user_name and user.username != user_name:
# return redirect(user.url)
if not request.user.is_authenticated and target.preference.no_anonymous_view:
if not request.user.is_authenticated and not target.anonymous_viewable:
return render(request, "users/home_anonymous.html", {"user": target.user})
me = target.user == request.user

View file

@ -120,7 +120,7 @@ class ReviewFeed(Feed):
return "%s的评论合集 - NeoDB" % owner.display_name if owner else "无效链接"
def items(self, user):
if user is None or user.preference.no_anonymous_view:
if user is None or not user.identity.anonymous_viewable:
return []
reviews = Review.objects.filter(owner=user, visibility=0)[:MAX_ITEM_PER_TYPE]
return reviews

View file

@ -111,7 +111,7 @@ class Takahe:
domain=domain,
name=u.username,
local=True,
discoverable=not u.preference.no_anonymous_view,
discoverable=True,
)
identity.generate_keypair()
identity.ensure_uris()
@ -195,6 +195,7 @@ class Takahe:
username=identity.username,
domain_name=identity.domain_id,
deleted=identity.deleted,
anonymous_viewable=False,
)
return apid

View file

@ -15,6 +15,7 @@ from journal.importers.opml import OPMLImporter
from journal.models import reset_journal_visibility_for_user
from mastodon.api import *
from social.models import reset_social_visibility_for_user
from takahe.models import Identity
from .account import *
from .tasks import *
@ -23,12 +24,14 @@ from .tasks import *
@login_required
def preferences(request):
preference = request.user.preference
identity = request.user.identity
if request.method == "POST":
identity.anonymous_viewable = bool(request.POST.get("anonymous_viewable"))
identity.save(update_fields=["anonymous_viewable"])
preference.default_visibility = int(request.POST.get("default_visibility"))
preference.mastodon_default_repost = (
int(request.POST.get("mastodon_default_repost", 0)) == 1
)
preference.no_anonymous_view = bool(request.POST.get("no_anonymous_view"))
preference.classic_homepage = int(request.POST.get("classic_homepage"))
preference.hidden_categories = request.POST.getlist("hidden_categories")
preference.post_public_mode = int(request.POST.get("post_public_mode"))
@ -43,7 +46,6 @@ def preferences(request):
update_fields=[
"default_visibility",
"post_public_mode",
"no_anonymous_view",
"classic_homepage",
"mastodon_append_tag",
"mastodon_repost_mode",

View file

@ -0,0 +1,28 @@
# Generated by Django 4.2.8 on 2023-12-29 07:03
from django.db import migrations, models
def migrate_data(apps, schema_editor):
APIdentity = apps.get_model("users", "APIdentity")
APIdentity.objects.filter(local=False).update(anonymous_viewable=False)
APIdentity.objects.filter(user__isnull=False).update(anonymous_viewable=False)
APIdentity.objects.filter(user__is_active=False).update(anonymous_viewable=False)
APIdentity.objects.filter(user__preference__no_anonymous_view=True).update(
anonymous_viewable=False
)
class Migration(migrations.Migration):
dependencies = [
("users", "0017_mastodon_site_username_bd2db5_idx"),
]
operations = [
migrations.AddField(
model_name="apidentity",
name="anonymous_viewable",
field=models.BooleanField(default=True),
),
migrations.RunPython(migrate_data),
]

View file

@ -24,6 +24,7 @@ class APIdentity(models.Model):
username = models.CharField(max_length=500, blank=True, null=True)
domain_name = models.CharField(max_length=500, blank=True, null=True)
deleted = models.DateTimeField(null=True, blank=True)
anonymous_viewable = models.BooleanField(null=False, default=True)
class Meta:
indexes = [

View file

@ -47,7 +47,7 @@ class Preference(models.Model):
# 0: discover, 1: timeline, 2: my profile
classic_homepage = models.PositiveSmallIntegerField(null=False, default=0)
show_last_edit = models.PositiveSmallIntegerField(null=False, default=1)
no_anonymous_view = models.PositiveSmallIntegerField(default=0)
no_anonymous_view = models.PositiveSmallIntegerField(default=0) # TODO remove
hidden_categories = models.JSONField(default=list)
mastodon_append_tag = models.CharField(max_length=2048, default="")
mastodon_default_repost = models.BooleanField(null=False, default=True)

View file

@ -149,9 +149,9 @@
<fieldset>
<label>
<input type="checkbox"
name="no_anonymous_view"
{% if request.user.preference.no_anonymous_view %}checked{% endif %}>
{% trans '未登录访客不能查看你的个人信息' %}
name="anonymous_viewable"
{% if request.user.identity.anonymous_viewable %}checked{% endif %}>
{% trans '匿名访客和搜索引擎可以查看你的个人主页' %}
<em data-tooltip="此选项仅针对网页访客,如果不希望被联邦网络用户看到请在发表时选择仅关注者或本人"><i class="fa fa-question-circle"></i></em>
</label>
</fieldset>