forked from mirrors/bookwyrm
Add federated users
This commit is contained in:
parent
a9d938fbb2
commit
f031b46b20
4 changed files with 28 additions and 22 deletions
|
@ -15,13 +15,25 @@ from fedireads.settings import DOMAIN
|
|||
def get_or_create_remote_user(actor):
|
||||
''' look up a remote user or add them '''
|
||||
try:
|
||||
user = models.User.objects.get(actor=actor)
|
||||
return models.User.objects.get(actor=actor)
|
||||
except models.User.DoesNotExist:
|
||||
# TODO: how do you actually correctly learn this?
|
||||
pass
|
||||
|
||||
# get the user's info
|
||||
response = requests.get(
|
||||
actor,
|
||||
headers={'Accept': 'application/activity+json'}
|
||||
)
|
||||
data = response.json()
|
||||
|
||||
username = '%s@%s' % (actor.split('/')[-1], actor.split('/')[2])
|
||||
user = models.User.objects.create_user(
|
||||
username,
|
||||
'', '',
|
||||
username, '', '',
|
||||
name=data.get('name'),
|
||||
summary=data.get('summary'),
|
||||
inbox=data['inbox'],
|
||||
outbox=data['outbox'],
|
||||
shared_inbox=data.get('endpoints').get('sharedInbox'),
|
||||
actor=actor,
|
||||
local=False
|
||||
)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.0.2 on 2020-01-29 18:40
|
||||
# Generated by Django 3.0.2 on 2020-01-29 19:58
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.auth.models
|
||||
|
@ -32,8 +32,8 @@ class Migration(migrations.Migration):
|
|||
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
|
||||
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
|
||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
|
||||
('private_key', models.TextField(blank=True, null=True, unique=True)),
|
||||
('public_key', models.TextField(blank=True, null=True, unique=True)),
|
||||
('private_key', models.TextField(blank=True, null=True)),
|
||||
('public_key', models.TextField(blank=True, null=True)),
|
||||
('api_key', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('actor', models.CharField(max_length=255, unique=True)),
|
||||
('inbox', models.CharField(max_length=255, unique=True)),
|
||||
|
|
|
@ -13,8 +13,8 @@ from fedireads.settings import DOMAIN, OL_URL
|
|||
|
||||
class User(AbstractUser):
|
||||
''' a user who wants to read books '''
|
||||
private_key = models.TextField(blank=True, null=True, unique=True)
|
||||
public_key = models.TextField(blank=True, null=True, unique=True)
|
||||
private_key = models.TextField(blank=True, null=True)
|
||||
public_key = models.TextField(blank=True, null=True)
|
||||
api_key = models.CharField(max_length=255, blank=True, null=True)
|
||||
actor = models.CharField(max_length=255, unique=True)
|
||||
inbox = models.CharField(max_length=255, unique=True)
|
||||
|
@ -44,13 +44,7 @@ class User(AbstractUser):
|
|||
def execute_before_save(sender, instance, *args, **kwargs):
|
||||
''' create shelves for new users '''
|
||||
# this user already exists, no need to poplate fields
|
||||
if instance.id:
|
||||
return
|
||||
|
||||
# TODO: how do I know this properly???
|
||||
if not instance.local:
|
||||
instance.inbox = instance.actor = 'inbox'
|
||||
instance.outbox = instance.actor = 'outbox'
|
||||
if instance.id or not instance.local:
|
||||
return
|
||||
|
||||
# populate fields for local users
|
||||
|
|
|
@ -20,7 +20,7 @@ urlpatterns = [
|
|||
# TODO: re_path(r'^.well-known/host-meta/?$', incoming.host_meta),
|
||||
|
||||
# ui views
|
||||
re_path(r'^/?$', views.home),
|
||||
path(r'', views.home),
|
||||
re_path(r'^register/?$', views.register),
|
||||
re_path(r'^login/?$', views.user_login),
|
||||
re_path(r'^logout/?$', views.user_logout),
|
||||
|
|
Loading…
Reference in a new issue