2021-03-08 11:49:10 -05:00
|
|
|
""" url routing for the app and api """
|
2020-01-28 14:45:27 -05:00
|
|
|
from django.conf.urls.static import static
|
2020-09-21 13:25:26 -04:00
|
|
|
from django.contrib import admin
|
2020-01-29 14:45:19 -05:00
|
|
|
from django.urls import path, re_path
|
2021-03-29 17:12:15 -04:00
|
|
|
from django.views.generic.base import TemplateView
|
2021-01-20 17:15:15 -05:00
|
|
|
|
2021-03-13 13:58:54 -05:00
|
|
|
from bookwyrm import settings, views
|
2020-12-30 20:36:35 -05:00
|
|
|
from bookwyrm.utils import regex
|
2020-01-28 14:45:27 -05:00
|
|
|
|
2021-09-18 00:39:18 -04:00
|
|
|
USER_PATH = rf"^user/(?P<username>{regex.USERNAME})"
|
|
|
|
LOCAL_USER_PATH = rf"^user/(?P<username>{regex.LOCALNAME})"
|
2020-09-17 16:02:52 -04:00
|
|
|
|
2020-10-16 22:13:18 -04:00
|
|
|
status_types = [
|
2021-03-08 12:48:25 -05:00
|
|
|
"status",
|
|
|
|
"review",
|
|
|
|
"reviewrating",
|
|
|
|
"comment",
|
|
|
|
"quotation",
|
|
|
|
"boost",
|
|
|
|
"generatednote",
|
2020-10-16 22:13:18 -04:00
|
|
|
]
|
2021-09-18 00:39:18 -04:00
|
|
|
|
2021-09-20 19:44:59 -04:00
|
|
|
STATUS_TYPES_STRING = "|".join(status_types)
|
|
|
|
STATUS_PATH = rf"{USER_PATH}/({STATUS_TYPES_STRING})/(?P<status_id>\d+)"
|
2020-09-17 16:02:52 -04:00
|
|
|
|
2021-06-18 17:12:56 -04:00
|
|
|
BOOK_PATH = r"^book/(?P<book_id>\d+)"
|
2020-01-25 01:32:41 -05:00
|
|
|
|
2021-08-04 20:53:44 -04:00
|
|
|
STREAMS = "|".join(s["key"] for s in settings.STREAMS)
|
2021-08-04 20:25:31 -04:00
|
|
|
|
2020-01-25 01:32:41 -05:00
|
|
|
urlpatterns = [
|
2021-03-08 11:49:10 -05:00
|
|
|
path("admin/", admin.site.urls),
|
2021-03-29 17:12:15 -04:00
|
|
|
path(
|
|
|
|
"robots.txt",
|
|
|
|
TemplateView.as_view(template_name="robots.txt", content_type="text/plain"),
|
|
|
|
),
|
2020-01-28 03:44:51 -05:00
|
|
|
# federation endpoints
|
2022-01-30 09:43:50 -05:00
|
|
|
re_path(r"^inbox/?$", views.Inbox.as_view(), name="inbox"),
|
|
|
|
re_path(rf"{LOCAL_USER_PATH}/inbox/?$", views.Inbox.as_view(), name="user_inbox"),
|
|
|
|
re_path(
|
|
|
|
rf"{LOCAL_USER_PATH}/outbox/?$", views.Outbox.as_view(), name="user_outbox"
|
|
|
|
),
|
2021-03-29 17:36:24 -04:00
|
|
|
re_path(r"^\.well-known/webfinger/?$", views.webfinger),
|
|
|
|
re_path(r"^\.well-known/nodeinfo/?$", views.nodeinfo_pointer),
|
|
|
|
re_path(r"^\.well-known/host-meta/?$", views.host_meta),
|
2021-03-13 13:58:54 -05:00
|
|
|
re_path(r"^nodeinfo/2\.0/?$", views.nodeinfo),
|
|
|
|
re_path(r"^api/v1/instance/?$", views.instance_info),
|
|
|
|
re_path(r"^api/v1/instance/peers/?$", views.peers),
|
2021-09-10 19:47:59 -04:00
|
|
|
re_path(r"^opensearch.xml$", views.opensearch, name="opensearch"),
|
2021-11-28 00:56:21 -05:00
|
|
|
re_path(r"^ostatus_subscribe/?$", views.ostatus_follow_request),
|
2021-01-18 19:32:02 -05:00
|
|
|
# polling updates
|
2022-01-22 22:01:42 -05:00
|
|
|
re_path(
|
2022-01-30 09:43:50 -05:00
|
|
|
"^api/updates/notifications/?$",
|
|
|
|
views.get_notification_count,
|
|
|
|
name="notification-updates",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
"^api/updates/stream/(?P<stream>[a-z]+)/?$",
|
|
|
|
views.get_unread_status_string,
|
|
|
|
name="stream-updates",
|
2022-01-22 22:01:42 -05:00
|
|
|
),
|
2022-02-17 13:02:42 -05:00
|
|
|
# instance setup
|
2022-02-17 16:01:36 -05:00
|
|
|
re_path(r"^setup/?$", views.InstanceConfig.as_view(), name="setup"),
|
2022-02-17 16:27:44 -05:00
|
|
|
re_path(r"^setup/admin/?$", views.CreateAdmin.as_view(), name="setup-admin"),
|
2021-01-12 11:19:08 -05:00
|
|
|
# authentication
|
2021-04-29 16:21:35 -04:00
|
|
|
re_path(r"^login/?$", views.Login.as_view(), name="login"),
|
2021-12-28 17:41:45 -05:00
|
|
|
re_path(r"^login/(?P<confirmed>confirmed)/?$", views.Login.as_view(), name="login"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^register/?$", views.Register.as_view()),
|
2021-08-06 19:24:57 -04:00
|
|
|
re_path(r"confirm-email/?$", views.ConfirmEmail.as_view(), name="confirm-email"),
|
|
|
|
re_path(
|
|
|
|
r"confirm-email/(?P<code>[A-Za-z0-9]+)/?$",
|
|
|
|
views.ConfirmEmailCode.as_view(),
|
|
|
|
name="confirm-email-code",
|
|
|
|
),
|
2022-03-19 15:00:16 -04:00
|
|
|
re_path(r"^resend-link/?$", views.ResendConfirmEmail.as_view(), name="resend-link"),
|
2021-05-04 12:34:16 -04:00
|
|
|
re_path(r"^logout/?$", views.Logout.as_view(), name="logout"),
|
|
|
|
re_path(
|
|
|
|
r"^password-reset/?$",
|
|
|
|
views.PasswordResetRequest.as_view(),
|
|
|
|
name="password-reset",
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
|
|
|
r"^password-reset/(?P<code>[A-Za-z0-9]+)/?$", views.PasswordReset.as_view()
|
|
|
|
),
|
2021-01-29 18:38:42 -05:00
|
|
|
# admin
|
2021-09-11 10:20:40 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/dashboard/?$", views.Dashboard.as_view(), name="settings-dashboard"
|
|
|
|
),
|
2021-04-19 18:40:51 -04:00
|
|
|
re_path(r"^settings/site-settings/?$", views.Site.as_view(), name="settings-site"),
|
2022-02-27 13:00:50 -05:00
|
|
|
re_path(r"^settings/themes/?$", views.Themes.as_view(), name="settings-themes"),
|
2022-02-28 12:54:07 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/themes/(?P<theme_id>\d+)/delete/?$",
|
|
|
|
views.delete_theme,
|
|
|
|
name="settings-themes-delete",
|
|
|
|
),
|
2021-05-19 17:55:01 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/announcements/?$",
|
|
|
|
views.Announcements.as_view(),
|
|
|
|
name="settings-announcements",
|
|
|
|
),
|
|
|
|
re_path(
|
2021-05-20 15:08:12 -04:00
|
|
|
r"^settings/announcements/(?P<announcement_id>\d+)/?$",
|
2021-05-20 11:09:35 -04:00
|
|
|
views.Announcement.as_view(),
|
2021-05-19 17:55:01 -04:00
|
|
|
name="settings-announcements",
|
|
|
|
),
|
2022-02-11 14:38:13 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/announcements/create/?$",
|
|
|
|
views.EditAnnouncement.as_view(),
|
|
|
|
name="settings-announcements-edit",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^settings/announcements/(?P<announcement_id>\d+)/edit/?$",
|
|
|
|
views.EditAnnouncement.as_view(),
|
|
|
|
name="settings-announcements-edit",
|
|
|
|
),
|
2021-05-20 15:08:12 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/announcements/(?P<announcement_id>\d+)/delete/?$",
|
|
|
|
views.delete_announcement,
|
|
|
|
name="settings-announcements-delete",
|
|
|
|
),
|
2021-03-21 14:43:14 -04:00
|
|
|
re_path(
|
2021-04-19 18:40:51 -04:00
|
|
|
r"^settings/email-preview/?$",
|
2021-09-10 21:50:31 -04:00
|
|
|
views.admin.site.email_preview,
|
2021-03-21 14:43:14 -04:00
|
|
|
name="settings-email-preview",
|
|
|
|
),
|
2021-04-19 18:40:51 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/users/?$", views.UserAdminList.as_view(), name="settings-users"
|
|
|
|
),
|
2022-03-14 12:27:18 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/users/(?P<status>(local|federated))\/?$",
|
|
|
|
views.UserAdminList.as_view(),
|
|
|
|
name="settings-users",
|
|
|
|
),
|
2022-01-10 15:21:36 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/users/(?P<user>\d+)/?$",
|
|
|
|
views.UserAdmin.as_view(),
|
|
|
|
name="settings-user",
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
2021-09-11 17:41:52 -04:00
|
|
|
r"^settings/federation/(?P<status>(federated|blocked))?/?$",
|
2021-03-28 15:34:55 -04:00
|
|
|
views.Federation.as_view(),
|
|
|
|
name="settings-federation",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^settings/federation/(?P<server>\d+)/?$",
|
|
|
|
views.FederatedServer.as_view(),
|
|
|
|
name="settings-federated-server",
|
2021-03-08 11:49:10 -05:00
|
|
|
),
|
2021-04-11 13:36:40 -04:00
|
|
|
re_path(
|
2021-12-28 17:41:45 -05:00
|
|
|
r"^settings/federation/(?P<server>\d+)/block/?$",
|
2021-09-10 21:50:31 -04:00
|
|
|
views.block_server,
|
2021-04-11 13:36:40 -04:00
|
|
|
name="settings-federated-server-block",
|
|
|
|
),
|
2021-04-10 14:06:28 -04:00
|
|
|
re_path(
|
2021-12-28 17:41:45 -05:00
|
|
|
r"^settings/federation/(?P<server>\d+)/unblock/?$",
|
2021-09-10 21:50:31 -04:00
|
|
|
views.unblock_server,
|
2021-04-10 14:06:28 -04:00
|
|
|
name="settings-federated-server-unblock",
|
|
|
|
),
|
2022-02-28 16:09:43 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/federation/(?P<server>\d+)/refresh/?$",
|
|
|
|
views.refresh_server,
|
|
|
|
name="settings-federated-server-refresh",
|
|
|
|
),
|
2021-04-07 16:06:29 -04:00
|
|
|
re_path(
|
2021-04-10 13:09:36 -04:00
|
|
|
r"^settings/federation/add/?$",
|
|
|
|
views.AddFederatedServer.as_view(),
|
|
|
|
name="settings-add-federated-server",
|
2021-04-07 16:17:51 -04:00
|
|
|
),
|
2021-04-12 17:23:51 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/federation/import/?$",
|
|
|
|
views.ImportServerBlocklist.as_view(),
|
|
|
|
name="settings-import-blocklist",
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/invites/?$", views.ManageInvites.as_view(), name="settings-invites"
|
|
|
|
),
|
2021-03-20 22:39:08 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/requests/?$",
|
|
|
|
views.ManageInviteRequests.as_view(),
|
|
|
|
name="settings-invite-requests",
|
|
|
|
),
|
2021-03-20 23:15:50 -04:00
|
|
|
re_path(
|
2021-12-28 17:41:45 -05:00
|
|
|
r"^settings/requests/ignore/?$",
|
2021-03-20 23:15:50 -04:00
|
|
|
views.ignore_invite_request,
|
|
|
|
name="settings-invite-requests-ignore",
|
|
|
|
),
|
2021-03-20 22:14:41 -04:00
|
|
|
re_path(
|
|
|
|
r"^invite-request/?$", views.InviteRequest.as_view(), name="invite-request"
|
|
|
|
),
|
2022-01-30 09:43:50 -05:00
|
|
|
re_path(
|
|
|
|
r"^invite/(?P<code>[A-Za-z0-9]+)/?$", views.Invite.as_view(), name="invite"
|
|
|
|
),
|
2021-09-08 17:39:43 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/email-blocklist/?$",
|
|
|
|
views.EmailBlocklist.as_view(),
|
|
|
|
name="settings-email-blocks",
|
|
|
|
),
|
2021-09-08 19:24:13 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/email-blocks/(?P<domain_id>\d+)/delete/?$",
|
|
|
|
views.EmailBlocklist.as_view(),
|
|
|
|
name="settings-email-blocks-delete",
|
|
|
|
),
|
2022-01-10 18:27:33 -05:00
|
|
|
re_path(
|
|
|
|
r"^setting/link-domains/?$",
|
|
|
|
views.LinkDomain.as_view(),
|
|
|
|
name="settings-link-domain",
|
|
|
|
),
|
2022-01-10 13:11:00 -05:00
|
|
|
re_path(
|
2022-01-10 13:48:27 -05:00
|
|
|
r"^setting/link-domains/(?P<status>(pending|approved|blocked))/?$",
|
2022-01-10 13:38:05 -05:00
|
|
|
views.LinkDomain.as_view(),
|
|
|
|
name="settings-link-domain",
|
|
|
|
),
|
2022-01-12 12:16:24 -05:00
|
|
|
# pylint: disable=line-too-long
|
2022-01-10 13:38:05 -05:00
|
|
|
re_path(
|
2022-01-10 13:48:27 -05:00
|
|
|
r"^setting/link-domains/(?P<status>(pending|approved|blocked))/(?P<domain_id>\d+)/?$",
|
2022-01-10 13:11:00 -05:00
|
|
|
views.LinkDomain.as_view(),
|
|
|
|
name="settings-link-domain",
|
|
|
|
),
|
2022-01-10 14:19:20 -05:00
|
|
|
re_path(
|
|
|
|
r"^setting/link-domains/(?P<domain_id>\d+)/(?P<status>(pending|approved|blocked))/?$",
|
|
|
|
views.update_domain_status,
|
|
|
|
name="settings-link-domain-status",
|
|
|
|
),
|
2021-09-17 15:59:16 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/ip-blocklist/?$",
|
|
|
|
views.IPBlocklist.as_view(),
|
|
|
|
name="settings-ip-blocks",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^settings/ip-blocks/(?P<block_id>\d+)/delete/?$",
|
|
|
|
views.IPBlocklist.as_view(),
|
|
|
|
name="settings-ip-blocks-delete",
|
|
|
|
),
|
2022-02-24 14:18:43 -05:00
|
|
|
# auto-moderation rules
|
|
|
|
re_path(r"^settings/automod/?$", views.AutoMod.as_view(), name="settings-automod"),
|
2022-02-24 15:15:31 -05:00
|
|
|
re_path(
|
2022-02-26 13:13:44 -05:00
|
|
|
r"^settings/automod/(?P<rule_id>\d+)/delete/?$",
|
2022-02-24 15:15:31 -05:00
|
|
|
views.automod_delete,
|
|
|
|
name="settings-automod-delete",
|
|
|
|
),
|
2022-02-26 13:13:44 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/automod/schedule/?$",
|
|
|
|
views.schedule_automod_task,
|
|
|
|
name="settings-automod-schedule",
|
|
|
|
),
|
2022-02-26 13:24:23 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/automod/unschedule/(?P<task_id>\d+)/?$",
|
|
|
|
views.unschedule_automod_task,
|
|
|
|
name="settings-automod-unschedule",
|
|
|
|
),
|
2022-02-26 13:13:44 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/automod/run/?$", views.run_automod, name="settings-automod-run"
|
|
|
|
),
|
2021-03-08 18:49:44 -05:00
|
|
|
# moderation
|
2022-01-10 17:55:10 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/reports/?$", views.ReportsAdmin.as_view(), name="settings-reports"
|
|
|
|
),
|
2021-03-08 18:49:44 -05:00
|
|
|
re_path(
|
2021-03-08 21:36:34 -05:00
|
|
|
r"^settings/reports/(?P<report_id>\d+)/?$",
|
2022-01-10 17:55:10 -05:00
|
|
|
views.ReportAdmin.as_view(),
|
2021-03-08 18:49:44 -05:00
|
|
|
name="settings-report",
|
|
|
|
),
|
2021-03-12 14:13:53 -05:00
|
|
|
re_path(
|
2021-04-19 18:51:39 -04:00
|
|
|
r"^settings/reports/(?P<user_id>\d+)/suspend/?$",
|
|
|
|
views.suspend_user,
|
|
|
|
name="settings-report-suspend",
|
2021-03-12 14:13:53 -05:00
|
|
|
),
|
2021-09-08 19:47:12 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/reports/(?P<user_id>\d+)/unsuspend/?$",
|
|
|
|
views.unsuspend_user,
|
|
|
|
name="settings-report-unsuspend",
|
|
|
|
),
|
2021-09-08 20:21:45 -04:00
|
|
|
re_path(
|
|
|
|
r"^settings/reports/(?P<user_id>\d+)/delete/?$",
|
|
|
|
views.moderator_delete_user,
|
|
|
|
name="settings-delete-user",
|
|
|
|
),
|
2021-03-12 13:22:03 -05:00
|
|
|
re_path(
|
|
|
|
r"^settings/reports/(?P<report_id>\d+)/resolve/?$",
|
|
|
|
views.resolve_report,
|
|
|
|
name="settings-report-resolve",
|
|
|
|
),
|
2022-01-10 17:55:10 -05:00
|
|
|
re_path(r"^report/?$", views.Report.as_view(), name="report"),
|
|
|
|
re_path(r"^report/(?P<user_id>\d+)/?$", views.Report.as_view(), name="report"),
|
|
|
|
re_path(
|
|
|
|
r"^report/(?P<user_id>\d+)/status/(?P<status_id>\d+)?$",
|
|
|
|
views.Report.as_view(),
|
|
|
|
name="report-status",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^report/(?P<user_id>\d+)/link/(?P<link_id>\d+)?$",
|
|
|
|
views.Report.as_view(),
|
|
|
|
name="report-link",
|
|
|
|
),
|
2021-01-13 15:03:27 -05:00
|
|
|
# landing pages
|
2022-01-06 00:42:41 -05:00
|
|
|
re_path(r"^about/?$", views.about, name="about"),
|
|
|
|
re_path(r"^privacy/?$", views.privacy, name="privacy"),
|
|
|
|
re_path(r"^conduct/?$", views.conduct, name="conduct"),
|
2021-03-21 14:43:14 -04:00
|
|
|
path("", views.Home.as_view(), name="landing"),
|
2021-08-08 11:07:20 -04:00
|
|
|
re_path(r"^discover/?$", views.Discover.as_view(), name="discover"),
|
2021-05-04 12:34:16 -04:00
|
|
|
re_path(r"^notifications/?$", views.Notifications.as_view(), name="notifications"),
|
2021-05-07 16:55:41 -04:00
|
|
|
re_path(
|
|
|
|
r"^notifications/(?P<notification_type>mentions)/?$",
|
|
|
|
views.Notifications.as_view(),
|
|
|
|
name="notifications",
|
|
|
|
),
|
2021-03-21 19:37:52 -04:00
|
|
|
re_path(r"^directory/?", views.Directory.as_view(), name="directory"),
|
2021-03-31 16:56:26 -04:00
|
|
|
# Get started
|
2021-03-31 17:53:00 -04:00
|
|
|
re_path(
|
2021-04-01 12:22:43 -04:00
|
|
|
r"^get-started/profile/?$",
|
2021-03-31 17:53:00 -04:00
|
|
|
views.GetStartedProfile.as_view(),
|
|
|
|
name="get-started-profile",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^get-started/books/?$",
|
|
|
|
views.GetStartedBooks.as_view(),
|
|
|
|
name="get-started-books",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^get-started/users/?$",
|
|
|
|
views.GetStartedUsers.as_view(),
|
|
|
|
name="get-started-users",
|
|
|
|
),
|
2021-01-29 13:25:31 -05:00
|
|
|
# feeds
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"^(?P<tab>{STREAMS})/?$", views.Feed.as_view()),
|
2021-03-12 13:37:52 -05:00
|
|
|
re_path(
|
|
|
|
r"^direct-messages/?$", views.DirectMessage.as_view(), name="direct-messages"
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
2021-12-28 17:41:45 -05:00
|
|
|
rf"^direct-messages/(?P<username>{regex.USERNAME})/?$",
|
2021-03-08 11:49:10 -05:00
|
|
|
views.DirectMessage.as_view(),
|
2021-03-12 13:37:52 -05:00
|
|
|
name="direct-messages-user",
|
2021-03-08 11:49:10 -05:00
|
|
|
),
|
2021-01-13 15:03:27 -05:00
|
|
|
# search
|
2021-09-16 13:44:33 -04:00
|
|
|
re_path(r"^search.json/?$", views.Search.as_view(), name="search"),
|
2021-04-30 21:35:09 -04:00
|
|
|
re_path(r"^search/?$", views.Search.as_view(), name="search"),
|
2021-01-12 14:28:03 -05:00
|
|
|
# imports
|
2021-05-04 12:34:16 -04:00
|
|
|
re_path(r"^import/?$", views.Import.as_view(), name="import"),
|
2021-11-12 18:06:23 -05:00
|
|
|
re_path(
|
2021-11-12 20:10:47 -05:00
|
|
|
r"^import/(?P<job_id>\d+)/?$",
|
|
|
|
views.ImportStatus.as_view(),
|
|
|
|
name="import-status",
|
|
|
|
),
|
2021-11-14 13:20:14 -05:00
|
|
|
re_path(
|
|
|
|
r"^import/(?P<job_id>\d+)/retry/(?P<item_id>\d+)/?$",
|
2021-11-14 13:58:46 -05:00
|
|
|
views.retry_item,
|
2021-11-14 13:20:14 -05:00
|
|
|
name="import-item-retry",
|
|
|
|
),
|
2021-11-12 20:10:47 -05:00
|
|
|
re_path(
|
|
|
|
r"^import/(?P<job_id>\d+)/failed/?$",
|
2021-11-12 18:06:23 -05:00
|
|
|
views.ImportTroubleshoot.as_view(),
|
|
|
|
name="import-troubleshoot",
|
|
|
|
),
|
2021-11-12 19:23:56 -05:00
|
|
|
re_path(
|
2021-11-12 20:10:47 -05:00
|
|
|
r"^import/(?P<job_id>\d+)/review/?$",
|
|
|
|
views.ImportManualReview.as_view(),
|
|
|
|
name="import-review",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^import/(?P<job_id>\d+)/review/?$",
|
2021-11-12 19:23:56 -05:00
|
|
|
views.ImportManualReview.as_view(),
|
|
|
|
name="import-review",
|
|
|
|
),
|
2021-11-12 20:10:47 -05:00
|
|
|
re_path(
|
|
|
|
r"^import/(?P<job_id>\d+)/review/(?P<item_id>\d+)/approve/?$",
|
|
|
|
views.approve_import_item,
|
|
|
|
name="import-approve",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^import/(?P<job_id>\d+)/review/(?P<item_id>\d+)/delete/?$",
|
|
|
|
views.delete_import_item,
|
|
|
|
name="import-delete",
|
|
|
|
),
|
2020-03-13 20:57:36 -04:00
|
|
|
# users
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{USER_PATH}\.json$", views.User.as_view()),
|
|
|
|
re_path(rf"{USER_PATH}/?$", views.User.as_view(), name="user-feed"),
|
2021-12-28 15:49:52 -05:00
|
|
|
re_path(rf"^@(?P<username>{regex.USERNAME})$", views.user_redirect),
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{USER_PATH}/rss/?$", views.rss_feed.RssFeed(), name="user-rss"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
2021-09-18 00:39:18 -04:00
|
|
|
rf"{USER_PATH}/followers(.json)?/?$",
|
2021-03-08 11:49:10 -05:00
|
|
|
views.Followers.as_view(),
|
|
|
|
name="user-followers",
|
|
|
|
),
|
|
|
|
re_path(
|
2021-09-18 00:39:18 -04:00
|
|
|
rf"{USER_PATH}/following(.json)?/?$",
|
2021-03-08 11:49:10 -05:00
|
|
|
views.Following.as_view(),
|
|
|
|
name="user-following",
|
|
|
|
),
|
2021-09-08 13:02:06 -04:00
|
|
|
re_path(r"^hide-suggestions/?$", views.hide_suggestions, name="hide-suggestions"),
|
2021-09-24 21:14:04 -04:00
|
|
|
# groups
|
2021-09-23 17:52:40 -04:00
|
|
|
re_path(rf"{USER_PATH}/groups/?$", views.UserGroups.as_view(), name="user-groups"),
|
2021-10-04 06:31:28 -04:00
|
|
|
re_path(
|
|
|
|
r"^group/(?P<group_id>\d+)(.json)?/?$", views.Group.as_view(), name="group"
|
|
|
|
),
|
2021-10-16 02:45:39 -04:00
|
|
|
re_path(
|
|
|
|
r"^group/delete/(?P<group_id>\d+)/?$", views.delete_group, name="delete-group"
|
|
|
|
),
|
2021-10-04 06:31:28 -04:00
|
|
|
re_path(
|
|
|
|
r"^group/(?P<group_id>\d+)/add-users/?$",
|
|
|
|
views.FindUsers.as_view(),
|
|
|
|
name="group-find-users",
|
|
|
|
),
|
2021-10-01 20:10:37 -04:00
|
|
|
re_path(r"^add-group-member/?$", views.invite_member, name="invite-group-member"),
|
2021-10-04 06:31:28 -04:00
|
|
|
re_path(
|
|
|
|
r"^remove-group-member/?$", views.remove_member, name="remove-group-member"
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^accept-group-invitation/?$",
|
|
|
|
views.accept_membership,
|
|
|
|
name="accept-group-invitation",
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^reject-group-invitation/?$",
|
|
|
|
views.reject_membership,
|
|
|
|
name="reject-group-invitation",
|
|
|
|
),
|
2021-09-24 21:14:04 -04:00
|
|
|
# lists
|
|
|
|
re_path(rf"{USER_PATH}/lists/?$", views.UserLists.as_view(), name="user-lists"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^list/?$", views.Lists.as_view(), name="lists"),
|
2021-08-23 18:07:38 -04:00
|
|
|
re_path(r"^list/saved/?$", views.SavedLists.as_view(), name="saved-lists"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^list/(?P<list_id>\d+)(.json)?/?$", views.List.as_view(), name="list"),
|
2022-01-25 11:45:08 -05:00
|
|
|
re_path(
|
|
|
|
r"^list/(?P<list_id>\d+)/item/(?P<list_item>\d+)/?$",
|
|
|
|
views.ListItem.as_view(),
|
|
|
|
name="list-item",
|
|
|
|
),
|
2021-09-06 13:38:37 -04:00
|
|
|
re_path(r"^list/delete/(?P<list_id>\d+)/?$", views.delete_list, name="delete-list"),
|
2022-01-24 20:41:21 -05:00
|
|
|
re_path(r"^list/add-book/?$", views.add_book, name="list-add-book"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
|
|
|
r"^list/(?P<list_id>\d+)/remove/?$",
|
2022-01-24 20:41:21 -05:00
|
|
|
views.remove_book,
|
2021-03-08 11:49:10 -05:00
|
|
|
name="list-remove-book",
|
|
|
|
),
|
2021-04-08 12:05:21 -04:00
|
|
|
re_path(
|
|
|
|
r"^list-item/(?P<list_item_id>\d+)/set-position$",
|
2022-01-24 20:41:21 -05:00
|
|
|
views.set_book_position,
|
2021-04-08 12:05:21 -04:00
|
|
|
name="list-set-book-position",
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(
|
|
|
|
r"^list/(?P<list_id>\d+)/curate/?$", views.Curate.as_view(), name="list-curate"
|
|
|
|
),
|
2021-08-23 18:33:49 -04:00
|
|
|
re_path(r"^save-list/(?P<list_id>\d+)/?$", views.save_list, name="list-save"),
|
|
|
|
re_path(r"^unsave-list/(?P<list_id>\d+)/?$", views.unsave_list, name="list-unsave"),
|
2021-12-04 10:07:38 -05:00
|
|
|
re_path(
|
2021-12-28 17:40:11 -05:00
|
|
|
r"^list/(?P<list_id>\d+)/embed/(?P<list_key>[0-9a-f]+)/?$",
|
2021-12-04 10:07:38 -05:00
|
|
|
views.unsafe_embed_list,
|
|
|
|
name="embed-list",
|
|
|
|
),
|
2021-06-08 14:23:53 -04:00
|
|
|
# User books
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{USER_PATH}/books/?$", views.Shelf.as_view(), name="user-shelves"),
|
2021-03-31 12:34:16 -04:00
|
|
|
re_path(
|
2021-09-27 18:57:22 -04:00
|
|
|
rf"^{USER_PATH}/(shelf|books)/(?P<shelf_identifier>[\w-]+)(.json)?/?$",
|
2021-03-31 12:34:16 -04:00
|
|
|
views.Shelf.as_view(),
|
|
|
|
name="shelf",
|
|
|
|
),
|
|
|
|
re_path(
|
2021-09-18 00:39:18 -04:00
|
|
|
rf"^{LOCAL_USER_PATH}/(books|shelf)/(?P<shelf_identifier>[\w-]+)(.json)?/?$",
|
2021-03-31 12:34:16 -04:00
|
|
|
views.Shelf.as_view(),
|
2021-03-31 12:54:52 -04:00
|
|
|
name="shelf",
|
2021-03-31 12:34:16 -04:00
|
|
|
),
|
|
|
|
re_path(r"^create-shelf/?$", views.create_shelf, name="shelf-create"),
|
2021-12-28 17:41:45 -05:00
|
|
|
re_path(r"^delete-shelf/(?P<shelf_id>\d+)/?$", views.delete_shelf),
|
2021-03-31 12:34:16 -04:00
|
|
|
re_path(r"^shelve/?$", views.shelve),
|
|
|
|
re_path(r"^unshelve/?$", views.unshelve),
|
|
|
|
# goals
|
|
|
|
re_path(
|
2021-09-22 15:16:51 -04:00
|
|
|
rf"{LOCAL_USER_PATH}/goal/(?P<year>\d+)/?$",
|
2021-03-31 12:34:16 -04:00
|
|
|
views.Goal.as_view(),
|
|
|
|
name="user-goal",
|
|
|
|
),
|
|
|
|
re_path(r"^hide-goal/?$", views.hide_goal, name="hide-goal"),
|
2021-01-29 12:28:00 -05:00
|
|
|
# preferences
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^preferences/profile/?$", views.EditUser.as_view(), name="prefs-profile"),
|
2021-04-30 09:43:43 -04:00
|
|
|
re_path(
|
|
|
|
r"^preferences/password/?$",
|
|
|
|
views.ChangePassword.as_view(),
|
|
|
|
name="prefs-password",
|
|
|
|
),
|
2022-03-26 16:04:59 -04:00
|
|
|
re_path(r"^preferences/export/?$", views.Export.as_view(), name="prefs-export"),
|
|
|
|
re_path(
|
|
|
|
r"^preferences/export/file/?$",
|
|
|
|
views.export_user_book_data,
|
|
|
|
name="prefs-export-file",
|
|
|
|
),
|
2021-06-14 13:44:25 -04:00
|
|
|
re_path(r"^preferences/delete/?$", views.DeleteUser.as_view(), name="prefs-delete"),
|
2021-05-04 12:34:16 -04:00
|
|
|
re_path(r"^preferences/block/?$", views.Block.as_view(), name="prefs-block"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^block/(?P<user_id>\d+)/?$", views.Block.as_view()),
|
|
|
|
re_path(r"^unblock/(?P<user_id>\d+)/?$", views.unblock),
|
2020-03-13 20:57:36 -04:00
|
|
|
# statuses
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{STATUS_PATH}(.json)?/?$", views.Status.as_view(), name="status"),
|
|
|
|
re_path(rf"{STATUS_PATH}/activity/?$", views.Status.as_view(), name="status"),
|
2021-04-03 15:38:12 -04:00
|
|
|
re_path(
|
2021-09-18 00:39:18 -04:00
|
|
|
rf"{STATUS_PATH}/replies(.json)?/?$", views.Replies.as_view(), name="replies"
|
2021-04-03 15:38:12 -04:00
|
|
|
),
|
2021-10-14 19:57:58 -04:00
|
|
|
re_path(
|
|
|
|
r"^edit/(?P<status_id>\d+)/?$", views.EditStatus.as_view(), name="edit-status"
|
|
|
|
),
|
2021-04-03 17:32:34 -04:00
|
|
|
re_path(
|
|
|
|
r"^post/?$",
|
|
|
|
views.CreateStatus.as_view(),
|
|
|
|
name="create-status",
|
|
|
|
),
|
2021-04-03 15:38:12 -04:00
|
|
|
re_path(
|
|
|
|
r"^post/(?P<status_type>\w+)/?$",
|
|
|
|
views.CreateStatus.as_view(),
|
|
|
|
name="create-status",
|
|
|
|
),
|
2021-10-14 20:13:54 -04:00
|
|
|
re_path(
|
|
|
|
r"^post/(?P<status_type>\w+)/(?P<existing_status_id>\d+)/?$",
|
|
|
|
views.CreateStatus.as_view(),
|
|
|
|
name="create-status",
|
|
|
|
),
|
2021-04-03 15:38:12 -04:00
|
|
|
re_path(
|
|
|
|
r"^delete-status/(?P<status_id>\d+)/?$",
|
|
|
|
views.DeleteStatus.as_view(),
|
|
|
|
name="delete-status",
|
|
|
|
),
|
2021-01-12 16:47:00 -05:00
|
|
|
# interact
|
2021-08-23 16:15:35 -04:00
|
|
|
re_path(r"^favorite/(?P<status_id>\d+)/?$", views.Favorite.as_view(), name="fav"),
|
|
|
|
re_path(
|
|
|
|
r"^unfavorite/(?P<status_id>\d+)/?$", views.Unfavorite.as_view(), name="unfav"
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^boost/(?P<status_id>\d+)/?$", views.Boost.as_view()),
|
|
|
|
re_path(r"^unboost/(?P<status_id>\d+)/?$", views.Unboost.as_view()),
|
2020-03-13 20:57:36 -04:00
|
|
|
# books
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{BOOK_PATH}(.json)?/?$", views.Book.as_view(), name="book"),
|
2021-04-23 16:46:22 -04:00
|
|
|
re_path(
|
2021-09-18 00:39:18 -04:00
|
|
|
rf"{BOOK_PATH}/(?P<user_statuses>review|comment|quote)/?$",
|
2021-04-23 16:46:22 -04:00
|
|
|
views.Book.as_view(),
|
|
|
|
name="book-user-statuses",
|
|
|
|
),
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{BOOK_PATH}/edit/?$", views.EditBook.as_view(), name="edit-book"),
|
|
|
|
re_path(rf"{BOOK_PATH}/confirm/?$", views.ConfirmEditBook.as_view()),
|
2022-02-25 20:23:13 -05:00
|
|
|
re_path(
|
|
|
|
r"^create-book/data/?$", views.create_book_from_data, name="create-book-data"
|
|
|
|
),
|
2022-02-25 19:40:34 -05:00
|
|
|
re_path(r"^create-book/?$", views.CreateBook.as_view(), name="create-book"),
|
2021-12-28 17:41:45 -05:00
|
|
|
re_path(r"^create-book/confirm/?$", views.ConfirmEditBook.as_view()),
|
2021-09-18 00:39:18 -04:00
|
|
|
re_path(rf"{BOOK_PATH}/editions(.json)?/?$", views.Editions.as_view()),
|
2021-03-18 13:03:53 -04:00
|
|
|
re_path(
|
|
|
|
r"^upload-cover/(?P<book_id>\d+)/?$", views.upload_cover, name="upload-cover"
|
|
|
|
),
|
2021-12-15 15:40:31 -05:00
|
|
|
re_path(
|
|
|
|
r"^add-description/(?P<book_id>\d+)/?$",
|
|
|
|
views.add_description,
|
|
|
|
name="add-description",
|
|
|
|
),
|
2022-01-12 13:07:49 -05:00
|
|
|
re_path(
|
|
|
|
rf"{BOOK_PATH}/filelink/?$", views.BookFileLinks.as_view(), name="file-link"
|
|
|
|
),
|
|
|
|
re_path(
|
2022-01-17 12:57:47 -05:00
|
|
|
rf"{BOOK_PATH}/filelink/(?P<link_id>\d+)/?$",
|
2022-01-12 13:07:49 -05:00
|
|
|
views.BookFileLinks.as_view(),
|
|
|
|
name="file-link",
|
|
|
|
),
|
2022-01-17 12:57:47 -05:00
|
|
|
re_path(
|
|
|
|
rf"{BOOK_PATH}/filelink/(?P<link_id>\d+)/delete/?$",
|
|
|
|
views.delete_link,
|
|
|
|
name="file-link-delete",
|
|
|
|
),
|
2022-01-12 13:07:49 -05:00
|
|
|
re_path(
|
|
|
|
rf"{BOOK_PATH}/filelink/add/?$",
|
|
|
|
views.AddFileLink.as_view(),
|
|
|
|
name="file-link-add",
|
|
|
|
),
|
2021-12-05 16:02:42 -05:00
|
|
|
re_path(r"^resolve-book/?$", views.resolve_book, name="resolve-book"),
|
|
|
|
re_path(r"^switch-edition/?$", views.switch_edition, name="switch-edition"),
|
|
|
|
re_path(
|
2021-12-05 16:46:13 -05:00
|
|
|
rf"{BOOK_PATH}/update/(?P<connector_identifier>[\w\.]+)/?$",
|
2021-12-05 16:02:42 -05:00
|
|
|
views.update_book_from_remote,
|
2021-12-05 16:24:40 -05:00
|
|
|
name="book-update-remote",
|
|
|
|
),
|
|
|
|
re_path(
|
2021-12-05 16:46:13 -05:00
|
|
|
r"^author/(?P<author_id>\d+)/update/(?P<connector_identifier>[\w\.]+)/?$",
|
2021-12-05 16:24:40 -05:00
|
|
|
views.update_author_from_remote,
|
|
|
|
name="author-update-remote",
|
2021-12-05 16:02:42 -05:00
|
|
|
),
|
2021-03-01 15:09:21 -05:00
|
|
|
# isbn
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^isbn/(?P<isbn>\d+)(.json)?/?$", views.Isbn.as_view()),
|
2021-01-13 12:54:35 -05:00
|
|
|
# author
|
2021-12-05 16:24:40 -05:00
|
|
|
re_path(
|
|
|
|
r"^author/(?P<author_id>\d+)(.json)?/?$", views.Author.as_view(), name="author"
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
r"^author/(?P<author_id>\d+)/edit/?$",
|
|
|
|
views.EditAuthor.as_view(),
|
|
|
|
name="edit-author",
|
|
|
|
),
|
2021-01-13 15:33:48 -05:00
|
|
|
# reading progress
|
2021-03-20 20:18:18 -04:00
|
|
|
re_path(r"^edit-readthrough/?$", views.edit_readthrough, name="edit-readthrough"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^delete-readthrough/?$", views.delete_readthrough),
|
2022-01-11 13:41:33 -05:00
|
|
|
re_path(
|
|
|
|
r"^create-readthrough/?$",
|
|
|
|
views.ReadThrough.as_view(),
|
|
|
|
name="create-readthrough",
|
|
|
|
),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^delete-progressupdate/?$", views.delete_progressupdate),
|
2021-06-08 14:23:53 -04:00
|
|
|
# shelve actions
|
2021-09-29 13:59:36 -04:00
|
|
|
re_path(
|
|
|
|
r"^reading-status/update/(?P<book_id>\d+)/?$",
|
|
|
|
views.update_progress,
|
|
|
|
name="reading-status-update",
|
|
|
|
),
|
2021-06-08 14:43:30 -04:00
|
|
|
re_path(
|
2021-06-09 13:36:52 -04:00
|
|
|
r"^reading-status/(?P<status>want|start|finish)/(?P<book_id>\d+)/?$",
|
|
|
|
views.ReadingStatus.as_view(),
|
|
|
|
name="reading-status",
|
2021-06-08 14:43:30 -04:00
|
|
|
),
|
2021-01-13 15:33:48 -05:00
|
|
|
# following
|
2021-03-13 17:48:15 -05:00
|
|
|
re_path(r"^follow/?$", views.follow, name="follow"),
|
|
|
|
re_path(r"^unfollow/?$", views.unfollow, name="unfollow"),
|
2021-03-08 11:49:10 -05:00
|
|
|
re_path(r"^accept-follow-request/?$", views.accept_follow_request),
|
|
|
|
re_path(r"^delete-follow-request/?$", views.delete_follow_request),
|
2021-11-28 04:09:29 -05:00
|
|
|
re_path(r"^ostatus_follow/?$", views.remote_follow, name="remote-follow"),
|
|
|
|
re_path(r"^remote_follow/?$", views.remote_follow_page, name="remote-follow-page"),
|
2021-11-28 05:38:28 -05:00
|
|
|
re_path(
|
|
|
|
r"^ostatus_success/?$", views.ostatus_follow_success, name="ostatus-success"
|
|
|
|
),
|
2021-12-20 17:37:45 -05:00
|
|
|
# annual summary
|
2021-12-21 05:58:46 -05:00
|
|
|
re_path(
|
2021-12-22 09:11:05 -05:00
|
|
|
r"^my-year-in-the-books/(?P<year>\d+)/?$",
|
|
|
|
views.personal_annual_summary,
|
|
|
|
),
|
|
|
|
re_path(
|
|
|
|
rf"{LOCAL_USER_PATH}/(?P<year>\d+)-in-the-books/?$",
|
2021-12-21 05:58:46 -05:00
|
|
|
views.AnnualSummary.as_view(),
|
|
|
|
name="annual-summary",
|
|
|
|
),
|
2021-12-22 09:12:56 -05:00
|
|
|
re_path(r"^summary_add_key/?$", views.summary_add_key, name="summary-add-key"),
|
|
|
|
re_path(
|
|
|
|
r"^summary_revoke_key/?$", views.summary_revoke_key, name="summary-revoke-key"
|
|
|
|
),
|
2020-01-28 01:49:56 -05:00
|
|
|
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|