From 58365469b7e079be01bff2cc72d88e6f9f71260e Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Thu, 7 Jul 2022 12:22:33 +0200 Subject: [PATCH] OAuth: re-sync `RemoteRepository` on login Copy the logic from `readthedocs-corporate` to resync `RemoteRepository` each time the user logs in. We are forcing users to re-login every 30 days minimum. Related: https://github.com/readthedocs/readthedocs.org/pull/9402 --- readthedocs/oauth/apps.py | 4 +++- readthedocs/oauth/signals.py | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 readthedocs/oauth/signals.py diff --git a/readthedocs/oauth/apps.py b/readthedocs/oauth/apps.py index 1486873907b..0724db73179 100644 --- a/readthedocs/oauth/apps.py +++ b/readthedocs/oauth/apps.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """OAuth app config.""" @@ -7,3 +6,6 @@ class OAuthConfig(AppConfig): name = 'readthedocs.oauth' + + def ready(self): + import readthedocs.oauth.signals # noqa diff --git a/readthedocs/oauth/signals.py b/readthedocs/oauth/signals.py new file mode 100644 index 00000000000..10bf42004d4 --- /dev/null +++ b/readthedocs/oauth/signals.py @@ -0,0 +1,24 @@ +import structlog +from allauth.account.signals import user_logged_in +from django.contrib.auth.models import User +from django.dispatch import receiver + +from readthedocs.oauth.tasks import sync_remote_repositories + +log = structlog.get_logger(__name__) + + +@receiver(user_logged_in, sender=User) +def sync_remote_repositories_on_login(sender, request, user, *args, **kwargs): + """ + Sync ``RemoteRepository`` objects when a user logs in via Social Login. + + This function will trigger a background task that will pull down + repositories from all the user's Social Account connected and create/update + their ``RemoteRepository`` in our database. + """ + log.info( + "Triggering sync RemoteRepository in background on login.", + user_username=user.username, + ) + sync_remote_repositories.delay(user.pk)