Files
script.service.ultimate/lib/streaming_providers/base/auth/credentials.py
T
2025-11-13 16:36:39 +01:00

84 lines
2.1 KiB
Python

# streaming_providers/base/auth/credentials.py
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Dict, Any, Optional
@dataclass
class BaseCredentials(ABC):
"""
Base class for authentication credentials
"""
@abstractmethod
def validate(self) -> bool:
"""Validate credentials"""
pass
@abstractmethod
def to_auth_payload(self) -> Dict[str, Any]:
"""Convert credentials to authentication payload"""
pass
@property
@abstractmethod
def credential_type(self) -> str:
"""Return the type of credentials for storage identification"""
pass
@dataclass
class UserPasswordCredentials(BaseCredentials):
"""
Username/password based credentials
"""
username: str
password: str
client_id: Optional[str] = None
grant_type: str = 'password'
def validate(self) -> bool:
"""Validate username/password credentials"""
return bool(self.username and self.password)
def to_auth_payload(self) -> Dict[str, Any]:
"""Convert to authentication payload"""
payload = {
'grant_type': self.grant_type,
'username': self.username,
'password': self.password
}
if self.client_id:
payload['client_id'] = self.client_id
return payload
@property
def credential_type(self) -> str:
return "user_password"
@dataclass
class ClientCredentials(BaseCredentials):
"""
Client credentials (client_id/client_secret) based authentication
"""
client_id: str
client_secret: Optional[str] = ""
grant_type: str = 'client_credentials'
def validate(self) -> bool:
"""Validate client credentials"""
return bool(self.client_id and self.client_secret)
def to_auth_payload(self) -> Dict[str, Any]:
"""Convert to authentication payload"""
return {
'grant_type': self.grant_type,
'client_id': self.client_id,
'client_secret': self.client_secret
}
@property
def credential_type(self) -> str:
return "client_credentials"