move anonymous viewable to identity
This commit is contained in:
parent
391d82a418
commit
3185cf44f4
11 changed files with 53 additions and 13 deletions
|
@ -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)
|
||||
|
|
|
@ -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 }}的评论"
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
28
users/migrations/0018_apidentity_anonymous_viewable.py
Normal file
28
users/migrations/0018_apidentity_anonymous_viewable.py
Normal 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),
|
||||
]
|
|
@ -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 = [
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue