authentik.admin.files.backends.passthrough
1from collections.abc import Generator 2 3from django.http.request import HttpRequest 4 5from authentik.admin.files.backends.base import Backend 6from authentik.admin.files.usage import FileUsage 7 8EXTERNAL_URL_SCHEMES = ["http:", "https://"] 9FONT_AWESOME_SCHEME = "fa://" 10 11 12class PassthroughBackend(Backend): 13 """Passthrough backend for external URLs and special schemes. 14 15 Handles external resources that aren't stored in authentik: 16 - Font Awesome icons (fa://...) 17 - HTTP/HTTPS URLs (http://..., https://...) 18 19 Files that are "managed" by this backend are just passed through as-is. 20 No upload, delete, or listing operations are supported. 21 Only accessible through resolve_file_url when an external URL is detected. 22 """ 23 24 allowed_usages = [FileUsage.MEDIA] 25 26 def supports_file(self, name: str) -> bool: 27 """Check if file path is an external URL or Font Awesome icon.""" 28 if name.startswith(FONT_AWESOME_SCHEME): 29 return True 30 31 for scheme in EXTERNAL_URL_SCHEMES: 32 if name.startswith(scheme): 33 return True 34 35 return False 36 37 def list_files(self) -> Generator[str]: 38 """External files cannot be listed.""" 39 yield from [] 40 41 def file_url( 42 self, 43 name: str, 44 request: HttpRequest | None = None, 45 use_cache: bool = True, 46 ) -> str: 47 """Return the URL as-is for passthrough files.""" 48 return name 49 50 def themed_urls( 51 self, 52 name: str, 53 request: HttpRequest | None = None, 54 ) -> dict[str, str] | None: 55 """Support themed URLs for external URLs with %(theme)s placeholder. 56 57 If the external URL contains %(theme)s, substitute it for each theme. 58 We can't verify that themed variants exist at the external location, 59 but we trust the user to provide valid URLs. 60 """ 61 from authentik.admin.files.backends.base import ( 62 get_valid_themes, 63 has_theme_variable, 64 substitute_theme, 65 ) 66 67 if not has_theme_variable(name): 68 return None 69 70 return {theme: substitute_theme(name, theme) for theme in get_valid_themes()}
EXTERNAL_URL_SCHEMES =
['http:', 'https://']
FONT_AWESOME_SCHEME =
'fa://'
13class PassthroughBackend(Backend): 14 """Passthrough backend for external URLs and special schemes. 15 16 Handles external resources that aren't stored in authentik: 17 - Font Awesome icons (fa://...) 18 - HTTP/HTTPS URLs (http://..., https://...) 19 20 Files that are "managed" by this backend are just passed through as-is. 21 No upload, delete, or listing operations are supported. 22 Only accessible through resolve_file_url when an external URL is detected. 23 """ 24 25 allowed_usages = [FileUsage.MEDIA] 26 27 def supports_file(self, name: str) -> bool: 28 """Check if file path is an external URL or Font Awesome icon.""" 29 if name.startswith(FONT_AWESOME_SCHEME): 30 return True 31 32 for scheme in EXTERNAL_URL_SCHEMES: 33 if name.startswith(scheme): 34 return True 35 36 return False 37 38 def list_files(self) -> Generator[str]: 39 """External files cannot be listed.""" 40 yield from [] 41 42 def file_url( 43 self, 44 name: str, 45 request: HttpRequest | None = None, 46 use_cache: bool = True, 47 ) -> str: 48 """Return the URL as-is for passthrough files.""" 49 return name 50 51 def themed_urls( 52 self, 53 name: str, 54 request: HttpRequest | None = None, 55 ) -> dict[str, str] | None: 56 """Support themed URLs for external URLs with %(theme)s placeholder. 57 58 If the external URL contains %(theme)s, substitute it for each theme. 59 We can't verify that themed variants exist at the external location, 60 but we trust the user to provide valid URLs. 61 """ 62 from authentik.admin.files.backends.base import ( 63 get_valid_themes, 64 has_theme_variable, 65 substitute_theme, 66 ) 67 68 if not has_theme_variable(name): 69 return None 70 71 return {theme: substitute_theme(name, theme) for theme in get_valid_themes()}
Passthrough backend for external URLs and special schemes.
Handles external resources that aren't stored in authentik:
- Font Awesome icons (fa://...)
- HTTP/HTTPS URLs (http://..., https://...)
Files that are "managed" by this backend are just passed through as-is. No upload, delete, or listing operations are supported. Only accessible through resolve_file_url when an external URL is detected.
def
supports_file(self, name: str) -> bool:
27 def supports_file(self, name: str) -> bool: 28 """Check if file path is an external URL or Font Awesome icon.""" 29 if name.startswith(FONT_AWESOME_SCHEME): 30 return True 31 32 for scheme in EXTERNAL_URL_SCHEMES: 33 if name.startswith(scheme): 34 return True 35 36 return False
Check if file path is an external URL or Font Awesome icon.
def
list_files(self) -> Generator[str]:
38 def list_files(self) -> Generator[str]: 39 """External files cannot be listed.""" 40 yield from []
External files cannot be listed.
def
file_url( self, name: str, request: django.http.request.HttpRequest | None = None, use_cache: bool = True) -> str:
42 def file_url( 43 self, 44 name: str, 45 request: HttpRequest | None = None, 46 use_cache: bool = True, 47 ) -> str: 48 """Return the URL as-is for passthrough files.""" 49 return name
Return the URL as-is for passthrough files.
def
themed_urls( self, name: str, request: django.http.request.HttpRequest | None = None) -> dict[str, str] | None:
51 def themed_urls( 52 self, 53 name: str, 54 request: HttpRequest | None = None, 55 ) -> dict[str, str] | None: 56 """Support themed URLs for external URLs with %(theme)s placeholder. 57 58 If the external URL contains %(theme)s, substitute it for each theme. 59 We can't verify that themed variants exist at the external location, 60 but we trust the user to provide valid URLs. 61 """ 62 from authentik.admin.files.backends.base import ( 63 get_valid_themes, 64 has_theme_variable, 65 substitute_theme, 66 ) 67 68 if not has_theme_variable(name): 69 return None 70 71 return {theme: substitute_theme(name, theme) for theme in get_valid_themes()}
Support themed URLs for external URLs with %(theme)s placeholder.
If the external URL contains %(theme)s, substitute it for each theme. We can't verify that themed variants exist at the external location, but we trust the user to provide valid URLs.