mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2026-07-31 07:49:07 -04:00
- Introduced the Endurain integration, allowing users to connect their self-hosted Endurain instance for activity browsing and GPX import. - Added `EndurainIntegration` model, serializer, and viewset to manage user connections and activities. - Implemented MFA support for Endurain login, including token handling and validation. - Enhanced activity handling in `ActivityViewSet` to prioritize user-provided elevation data over GPX-derived values. - Updated environment configuration and documentation to include Endurain integration details. - Added tests for Endurain services and integration functionality to ensure reliability and correctness. - Improved throttling for Endurain authentication to enhance security and performance.
67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
from django.db import models
|
|
from django.contrib.auth import get_user_model
|
|
import uuid
|
|
|
|
User = get_user_model()
|
|
|
|
class ImmichIntegration(models.Model):
|
|
server_url = models.CharField(max_length=255)
|
|
api_key = models.CharField(max_length=255)
|
|
user = models.ForeignKey(
|
|
User, on_delete=models.CASCADE)
|
|
copy_locally = models.BooleanField(default=True, help_text="Copy image to local storage, instead of just linking to the remote URL.")
|
|
id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True)
|
|
|
|
def __str__(self):
|
|
return self.user.username + ' - ' + self.server_url
|
|
|
|
class StravaToken(models.Model):
|
|
user = models.ForeignKey(
|
|
User, on_delete=models.CASCADE, related_name='strava_tokens')
|
|
access_token = models.CharField(max_length=255)
|
|
refresh_token = models.CharField(max_length=255)
|
|
expires_at = models.BigIntegerField() # Unix timestamp
|
|
athlete_id = models.BigIntegerField(null=True, blank=True)
|
|
scope = models.CharField(max_length=255, null=True, blank=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
class WandererIntegration(models.Model):
|
|
server_url = models.CharField(max_length=255)
|
|
api_key = models.CharField(max_length=512)
|
|
user = models.ForeignKey(
|
|
User, on_delete=models.CASCADE, related_name='wanderer_integrations')
|
|
id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True)
|
|
|
|
def __str__(self):
|
|
return self.user.username + ' - ' + self.server_url
|
|
|
|
class Meta:
|
|
verbose_name = "Wanderer Integration"
|
|
verbose_name_plural = "Wanderer Integrations"
|
|
|
|
|
|
class EndurainIntegration(models.Model):
|
|
AUTH_PASSWORD = 'password'
|
|
AUTH_METHOD_CHOICES = [
|
|
(AUTH_PASSWORD, 'Password'),
|
|
]
|
|
|
|
server_url = models.CharField(max_length=255)
|
|
access_token = models.CharField(max_length=2048)
|
|
refresh_token = models.CharField(max_length=2048)
|
|
access_token_expires_at = models.BigIntegerField()
|
|
refresh_token_expires_at = models.BigIntegerField(null=True, blank=True)
|
|
endurain_user_id = models.BigIntegerField()
|
|
username = models.CharField(max_length=255, blank=True, default='')
|
|
auth_method = models.CharField(max_length=16, choices=AUTH_METHOD_CHOICES, default=AUTH_PASSWORD)
|
|
user = models.ForeignKey(
|
|
User, on_delete=models.CASCADE, related_name='endurain_integrations')
|
|
id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return f'{self.user.username} - {self.server_url}'
|
|
|
|
class Meta:
|
|
verbose_name = 'Endurain Integration'
|
|
verbose_name_plural = 'Endurain Integrations' |