|
|
11 hours ago | |
|---|---|---|
| locale | 11 hours ago | |
| management | 3 weeks ago | |
| migrations | 3 weeks ago | |
| registries | 3 weeks ago | |
| services | 3 weeks ago | |
| templates | 3 weeks ago | |
| tests | 3 weeks ago | |
| tools | 3 weeks ago | |
| .gitignore | 3 weeks ago | |
| CODING_POLICY.md | 11 hours ago | |
| LICENSE | 3 weeks ago | |
| README.md | 11 hours ago | |
| RELEASE_POLICY.md | 3 weeks ago | |
| __init__.py | 3 weeks ago | |
| admin.py | 3 weeks ago | |
| apps.py | 3 weeks ago | |
| forms.py | 3 weeks ago | |
| models.py | 11 hours ago | |
| page_help.py | 11 hours ago | |
| public_urls.py | 3 weeks ago | |
| requirements.txt | 3 weeks ago | |
| sharix_access.py | 3 weeks ago | |
| sharix_health.py | 3 weeks ago | |
| sharix_pages.py | 3 weeks ago | |
| urls.py | 3 weeks ago | |
| views.py | 11 hours ago |
Shared GPLv3 short URL, local QR and privacy-safe aggregate visit analytics for ShariX Open and Platform.
The module owns short-code generation, HTTP(S) redirect validation, local QR rendering and aggregate traffic counters. It deliberately does not own projects, GTM/campaign planning, Services or user profiles. Consumers may associate links through neutral scope_type/scope_key and related_type/related_key references and register a scope access provider.
Redirects do not store IP addresses, raw User-Agent values, fingerprints or inferred identity. The module stores only total/day counters and bounded aggregates for referrer domain, UTM labels, coarse device/browser class and language. No external geolocation/enrichment service is called.
SHORTLINK_PUBLIC_BASE_URL is the installation-owned public origin/base, for example https://example.org. It is never hard-coded in the module. SHORTLINK_MANAGER_GROUPS may contain comma-separated group names allowed to manage installation-wide links. SHORTLINK_DAILY_RETENTION_DAYS defaults to 400 and SHORTLINK_DIMENSION_CARDINALITY_LIMIT to 200.
The management form accepts only the destination URL, optional material URL and operator comment. The caller owns scope/related-object references and permissions; those identifiers are not editable through extra POST fields. The two reference pairs remain valid only when both parts are set or both are empty.
ShortLink.clean() reports an incomplete scope or related-object pair as a non-field ValidationError (incomplete_scope_reference / incomplete_related_reference). Both errors are returned when both pairs are incomplete. Partial model forms therefore return a normal invalid result instead of raising ValueError for an absent form field. Django admin still validates the same pairs; HTTP(S) URL validation and service authorization are unchanged.
An empty POST remains bound and shows required-field errors. GET displays an unbound form; invalid submissions keep their input. These changes do not alter stored fields or 0001_initial, create links in diagnostics, change redirects/QR/analytics, or repair historical records.
Publish this shared repository from Open and consume the published commit on Platform through repositories.sh pull --shared --repo sharix_shortlinks; do not apply a second copy of the patch on Platform. Recompile only this module's RU/EN catalogs. No new migration, static collection or environment change is required. Run the owning tools/check_shortlinks_contracts.py and the assembly bin/checks/ui_reliability.py without weakening either audit. Focused form validation may use unsaved instances with database connections prohibited; persistence and live browser behavior are separate checks.