From 94b0fc2068829ad9861c96dc4bd652d579e28b93 Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Fri, 31 Jan 2025 12:43:23 +0100 Subject: [PATCH] New field bluesky_handle in both main models --- .../0019_confirmedemail_bluesky_handle.py | 19 ++++++++++++ .../0020_confirmedopenid_bluesky_handle.py | 19 ++++++++++++ ivatar/ivataraccount/models.py | 30 ++++++++++++++++++- 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 ivatar/ivataraccount/migrations/0019_confirmedemail_bluesky_handle.py create mode 100644 ivatar/ivataraccount/migrations/0020_confirmedopenid_bluesky_handle.py diff --git a/ivatar/ivataraccount/migrations/0019_confirmedemail_bluesky_handle.py b/ivatar/ivataraccount/migrations/0019_confirmedemail_bluesky_handle.py new file mode 100644 index 0000000..61a3083 --- /dev/null +++ b/ivatar/ivataraccount/migrations/0019_confirmedemail_bluesky_handle.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 5.1.5 on 2025-01-27 10:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ivataraccount", "0018_alter_photo_format"), + ] + + operations = [ + migrations.AddField( + model_name="confirmedemail", + name="bluesky_handle", + field=models.CharField(blank=True, max_length=256, null=True), + ), + ] diff --git a/ivatar/ivataraccount/migrations/0020_confirmedopenid_bluesky_handle.py b/ivatar/ivataraccount/migrations/0020_confirmedopenid_bluesky_handle.py new file mode 100644 index 0000000..888fcdd --- /dev/null +++ b/ivatar/ivataraccount/migrations/0020_confirmedopenid_bluesky_handle.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 5.1.5 on 2025-01-27 13:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ivataraccount", "0019_confirmedemail_bluesky_handle"), + ] + + operations = [ + migrations.AddField( + model_name="confirmedopenid", + name="bluesky_handle", + field=models.CharField(blank=True, max_length=256, null=True), + ), + ] diff --git a/ivatar/ivataraccount/models.py b/ivatar/ivataraccount/models.py index b5e3472..25453b1 100644 --- a/ivatar/ivataraccount/models.py +++ b/ivatar/ivataraccount/models.py @@ -9,7 +9,7 @@ import time from io import BytesIO from os import urandom from urllib.error import HTTPError, URLError -from ivatar.utils import urlopen +from ivatar.utils import urlopen, Bluesky from urllib.parse import urlsplit, urlunsplit from PIL import Image @@ -322,6 +322,8 @@ class ConfirmedEmail(BaseAccountModel): null=True, on_delete=models.deletion.SET_NULL, ) + # Alternative assignment - use Bluesky handle + bluesky_handle = models.CharField(max_length=256, null=True, blank=True) digest = models.CharField(max_length=32) digest_sha256 = models.CharField(max_length=64) objects = ConfirmedEmailManager() @@ -342,6 +344,18 @@ class ConfirmedEmail(BaseAccountModel): self.photo = photo self.save() + def set_bluesky_handle(self, handle): + """ + Helper method to set Bluesky handle + """ + bs = Bluesky() + avatar = bs.get_profile(handle) + if not avatar: + raise Exception("Invalid Bluesky handle") + return + self.bluesky_handle = handle + self.save() + def save( self, force_insert=False, force_update=False, using=None, update_fields=None ): @@ -463,6 +477,8 @@ class ConfirmedOpenId(BaseAccountModel): alt_digest2 = models.CharField(max_length=64, null=True, blank=True, default=None) # https:// - https w/o trailing slash alt_digest3 = models.CharField(max_length=64, null=True, blank=True, default=None) + # Alternative assignment - use Bluesky handle + bluesky_handle = models.CharField(max_length=256, null=True, blank=True) access_count = models.BigIntegerField(default=0, editable=False) @@ -481,6 +497,18 @@ class ConfirmedOpenId(BaseAccountModel): self.photo = photo self.save() + def set_bluesky_handle(self, handle): + """ + Helper method to set Bluesky handle + """ + bs = Bluesky() + avatar = bs.get_profile(handle) + if not avatar: + raise Exception("Invalid Bluesky handle") + return + self.bluesky_handle = handle + self.save() + def save( self, force_insert=False, force_update=False, using=None, update_fields=None ):