Files
Subscribarr/accounts/models.py
2025-08-15 13:02:19 +02:00

58 lines
2.0 KiB
Python

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import gettext_lazy as _
class User(AbstractUser):
"""
Custom User Model with additional fields and permissions.
Regular users can only edit their own data.
Admin users can edit everything.
"""
email = models.EmailField(_("email address"), unique=True)
bio = models.TextField(max_length=500, blank=True)
is_admin = models.BooleanField(default=False)
# Jellyfin fields
jellyfin_user_id = models.CharField(max_length=100, blank=True, null=True)
jellyfin_token = models.CharField(max_length=500, blank=True, null=True)
jellyfin_server = models.CharField(max_length=200, blank=True, null=True)
# Notifications
NOTIFY_EMAIL = 'email'
NOTIFY_NTFY = 'ntfy'
NOTIFY_APPRISE = 'apprise'
NOTIFY_CHOICES = [
(NOTIFY_EMAIL, 'Email'),
(NOTIFY_NTFY, 'ntfy'),
(NOTIFY_APPRISE, 'Apprise'),
]
notification_channel = models.CharField(
max_length=10,
choices=NOTIFY_CHOICES,
default=NOTIFY_EMAIL,
)
# Optional per-user targets/overrides
ntfy_topic = models.CharField(max_length=200, blank=True, null=True)
apprise_url = models.TextField(blank=True, null=True)
def check_jellyfin_admin(self):
"""Check if user is Jellyfin admin on the server"""
from accounts.utils import JellyfinClient
if not self.jellyfin_user_id or not self.jellyfin_token:
return False
try:
client = JellyfinClient()
return client.is_admin(self.jellyfin_user_id, self.jellyfin_token)
except:
# On error, fall back to local status
return self.is_admin
@property
def is_jellyfin_admin(self):
"""Check if user is admin either locally or on Jellyfin server"""
return self.is_admin or self.check_jellyfin_admin()
class Meta:
verbose_name = _("user")
verbose_name_plural = _("users")