from django.conf import settings as djsettings from django.contrib import admin as djadmin from django.urls import include, path, re_path from activities.views import compose, debug, posts, timelines from api.views import oauth from core import views as core from mediaproxy import views as mediaproxy from stator import views as stator from users.views import activitypub, admin, announcements, auth, identity, settings urlpatterns = [ path("", core.homepage), path("robots.txt", core.RobotsTxt.as_view()), # Activity views path("tags//", timelines.Tag.as_view(), name="tag"), # Settings views path( "settings/", settings.SettingsRoot.as_view(), name="settings", ), path( "settings/security/", settings.SecurityPage.as_view(), name="settings_security", ), path( "settings/interface/", settings.InterfacePage.as_view(), name="settings_interface", ), path( "@/settings/", settings.SettingsRoot.as_view(), name="settings", ), path( "@/settings/profile/", settings.ProfilePage.as_view(), name="settings_profile", ), path( "@/settings/posting/", settings.PostingPage.as_view(), name="settings_posting", ), path( "@/settings/follows/", settings.FollowsPage.as_view(), name="settings_follows", ), path( "@/settings/import_export/", settings.ImportExportPage.as_view(), name="settings_import_export", ), path( "@/settings/import_export/following.csv", settings.CsvFollowing.as_view(), name="settings_export_following_csv", ), path( "@/settings/import_export/followers.csv", settings.CsvFollowers.as_view(), name="settings_export_followers_csv", ), path( "@/settings/migrate_in/", settings.MigrateInPage.as_view(), name="settings_migrate_in", ), path( "@/settings/tokens/", settings.TokensRoot.as_view(), name="settings_tokens", ), path( "@/settings/tokens/create/", settings.TokenCreate.as_view(), name="settings_token_create", ), path( "@/settings/tokens//", settings.TokenEdit.as_view(), name="settings_token_edit", ), path( "@/settings/delete/", settings.DeleteIdentity.as_view(), name="settings_delete", ), path( "admin/", admin.AdminRoot.as_view(), name="admin", ), path( "admin/basic/", admin.BasicSettings.as_view(), name="admin_basic", ), path( "admin/tuning/", admin.TuningSettings.as_view(), name="admin_tuning", ), path( "admin/policies/", admin.PoliciesSettings.as_view(), name="admin_policies", ), path( "admin/domains/", admin.Domains.as_view(), name="admin_domains", ), path( "admin/domains/create/", admin.DomainCreate.as_view(), name="admin_domains_create", ), path( "admin/domains//", admin.DomainEdit.as_view(), ), path( "admin/domains//delete/", admin.DomainDelete.as_view(), ), path( "admin/federation/", admin.FederationRoot.as_view(), name="admin_federation", ), path( "admin/federation/blocklist/", admin.FederationBlocklist.as_view(), name="admin_federation_blocklist", ), path( "admin/federation//", admin.FederationEdit.as_view(), name="admin_federation_edit", ), path( "admin/users/", admin.UsersRoot.as_view(), name="admin_users", ), path( "admin/users//", admin.UserEdit.as_view(), name="admin_user_edit", ), path( "admin/identities/", admin.IdentitiesRoot.as_view(), name="admin_identities", ), path( "admin/identities//", admin.IdentityEdit.as_view(), name="admin_identity_edit", ), path( "admin/reports/", admin.ReportsRoot.as_view(), name="admin_reports", ), path( "admin/reports//", admin.ReportView.as_view(), name="admin_report_view", ), path( "admin/invites/", admin.InvitesRoot.as_view(), name="admin_invites", ), path( "admin/invites/create/", admin.InviteCreate.as_view(), name="admin_invite_create", ), path( "admin/invites//", admin.InviteView.as_view(), name="admin_invite_view", ), path( "admin/hashtags/", admin.Hashtags.as_view(), name="admin_hashtags", ), path( "admin/hashtags//", admin.HashtagEdit.as_view(), ), path("admin/hashtags//enable/", admin.HashtagEnable.as_view()), path( "admin/hashtags//disable/", admin.HashtagEnable.as_view(enable=False) ), path( "admin/emoji/", admin.EmojiRoot.as_view(), name="admin_emoji", ), path( "admin/emoji/create/", admin.EmojiCreate.as_view(), name="admin_emoji_create", ), path("admin/emoji//enable/", admin.EmojiEnable.as_view()), path("admin/emoji//disable/", admin.EmojiEnable.as_view(enable=False)), path("admin/emoji//delete/", admin.EmojiDelete.as_view()), path("admin/emoji//copy/", admin.EmojiCopyLocal.as_view()), path( "admin/announcements/", admin.AnnouncementsRoot.as_view(), name="admin_announcements", ), path( "admin/announcements/create/", admin.AnnouncementCreate.as_view(), name="admin_announcement_create", ), path( "admin/announcements//", admin.AnnouncementEdit.as_view(), ), path( "admin/announcements//delete/", admin.AnnouncementDelete.as_view(), ), path( "admin/announcements//publish/", admin.AnnouncementPublish.as_view(), ), path( "admin/announcements//unpublish/", admin.AnnouncementUnpublish.as_view(), ), path( "admin/stator/", admin.Stator.as_view(), name="admin_stator", ), # Identity views path("@/", identity.ViewIdentity.as_view()), path("@/replies/", identity.ViewIdentity.as_view(with_replies=True)), path("@/inbox/", activitypub.Inbox.as_view()), path("@/outbox/", activitypub.Outbox.as_view()), path("@/collections/featured/", activitypub.FeaturedCollection.as_view()), path("@/rss/", identity.IdentityFeed()), path("@/following/", identity.IdentityFollows.as_view(inbound=False)), path("@/followers/", identity.IdentityFollows.as_view(inbound=True)), path("@/search/", identity.IdentitySearch.as_view()), path( "@/notifications/", timelines.Notifications.as_view(), name="notifications", ), # Posts path("@/compose/", compose.Compose.as_view(), name="compose"), path("@/posts//", posts.Individual.as_view()), # Authentication path("auth/login/", auth.Login.as_view(), name="login"), path("auth/logout/", auth.Logout.as_view(), name="logout"), path("auth/signup/", auth.Signup.as_view(), name="signup"), path("auth/signup//", auth.Signup.as_view(), name="signup"), path("auth/reset/", auth.TriggerReset.as_view(), name="trigger_reset"), path("auth/reset//", auth.PerformReset.as_view(), name="password_reset"), # Identity handling path("identity/create/", identity.CreateIdentity.as_view(), name="identity_create"), # Flat pages path("about/", core.About.as_view(), name="about"), path( "pages/privacy/", core.FlatPage.as_view(title="Privacy Policy", config_option="policy_privacy"), name="policy_privacy", ), path( "pages/terms/", core.FlatPage.as_view(title="Terms of Service", config_option="policy_terms"), name="policy_terms", ), path( "pages/rules/", core.FlatPage.as_view(title="Server Rules", config_option="policy_rules"), name="policy_rules", ), path( "pages/issues/", core.FlatPage.as_view(title="Report a Problem", config_option="policy_issues"), name="policy_issues", ), # Annoucements path("announcements//dismiss/", announcements.AnnouncementDismiss.as_view()), # Debug aids path("debug/json/", debug.JsonViewer.as_view()), path("debug/404/", debug.NotFound.as_view()), path("debug/500/", debug.ServerError.as_view()), path("debug/oauth_authorize/", debug.OauthAuthorize.as_view()), # Media/image proxy re_path( "^proxy/identity_icon/(?P[^/]+)/((?P[^/]+))?$", mediaproxy.IdentityIconCacheView.as_view(), name="proxy_identity_icon", ), re_path( "^proxy/identity_image/(?P[^/]+)/((?P[^/]+))?$", mediaproxy.IdentityImageCacheView.as_view(), name="proxy_identity_image", ), re_path( "^proxy/post_attachment/(?P[^/]+)/((?P[^/]+))?$", mediaproxy.PostAttachmentCacheView.as_view(), name="proxy_post_attachment", ), re_path( "^proxy/emoji/(?P[^/]+)/((?P[^/]+))?$", mediaproxy.EmojiCacheView.as_view(), name="proxy_emoji", ), # Well-known endpoints and system actor path(".well-known/webfinger", activitypub.Webfinger.as_view()), path(".well-known/host-meta", activitypub.HostMeta.as_view()), path(".well-known/nodeinfo", activitypub.NodeInfo.as_view()), path("nodeinfo/2.0/", activitypub.NodeInfo2.as_view()), path("actor/", activitypub.SystemActorView.as_view()), path("actor/inbox/", activitypub.Inbox.as_view()), path("actor/outbox/", activitypub.EmptyOutbox.as_view()), path("inbox/", activitypub.Inbox.as_view(), name="shared_inbox"), # API/Oauth path("api/", include("api.urls")), path("oauth/authorize", oauth.AuthorizationView.as_view()), path("oauth/token", oauth.TokenView.as_view()), path("oauth/revoke", oauth.RevokeTokenView.as_view()), # Stator path(".stator/", stator.RequestRunner.as_view()), # Django admin path("djadmin/", djadmin.site.urls), # Media files re_path( r"^media/(?P.*)$", core.custom_static_serve, kwargs={"document_root": djsettings.MEDIA_ROOT}, ), ] # Debug toolbar if djsettings.DEBUG: urlpatterns.append(path("__debug__/", include("debug_toolbar.urls")))