WIP: public: add error403 view and make publish_page use it (#8122) #234
Draft
yweber
wants to merge 1 commits from
wip/8122-error403-view
into main
pull from: wip/8122-error403-view
merge into: entrouvert:main
entrouvert:main
entrouvert:wip/75908-wcs-trigger
entrouvert:wip/80759-Cellule-Graphe-avoir-des-pourcen
entrouvert:wip/90119-configurer-eslint
entrouvert:wip/89980-remplacer-pylint-par-ruff
entrouvert:wip/map-search
entrouvert:wip/83250-Avoir-un-id-stable-sur-les-cellu
entrouvert:wip/87119-card-custom-id
entrouvert:wip/8122-private-page-custom-message
entrouvert:wip/85720-incoherence-des-onglets-quand-un
entrouvert:wip/83352-template-test-page
entrouvert:wip/83722-manage-error-on-search
entrouvert:wip/47511-lingo-fix-error-display-on-payment-status-page
entrouvert:wip/79857-has-role-uuid
entrouvert:wip/79428-family-activity-marker
entrouvert:wip/76874-lingo-invoice-pdf-filename
entrouvert:wip/76434-utiliser-hobo-multitenant-spoole
entrouvert:wip/74926-migration-ultra-lente-en-recette
entrouvert:wip/74357-lingo-hide-tipi-choice-in-backend-creation
entrouvert:wip/74048-Ajouter-la-classe-cell-title-aux
entrouvert:wip/72667-duration-filter
entrouvert:wip/70837-Poser-des-classes-BEM-sur-les-li
entrouvert:wip/72207-requests-do-not-duplicate-params
entrouvert:wip/70884-snapshot-slug-collision
entrouvert:hotfix/v4.72
entrouvert:wip/70605-enable-cell-condition
entrouvert:wip/70844-cell-visibility-tests
entrouvert:wip/70812-title-migration-h1
entrouvert:wip/70803-text-cell-with-only-title
entrouvert:wip/70804-title-as-additional-label
entrouvert:wip/70802-text-cell-with-only-title
entrouvert:wip/70646-fix-migration
entrouvert:wip/70630-over-long-title-migration
entrouvert:wip/68675-subslug-or-card
entrouvert:hotfix/v4.68
entrouvert:wip/70349-wcs-dont-mix-category-and-form-description
entrouvert:wip/67580-uwsgi-conf
entrouvert:wip/69836-fix-weekly-calendar-current-week
entrouvert:wip/django-upgrade
entrouvert:wip/65846-uniformize-form-links-rendering
entrouvert:wip/69271-wcs-richtext-field
entrouvert:wip/69400-reduce-num-queries
entrouvert:wip/69454-famille-multi-week
entrouvert:wip/69194-fix-import
entrouvert:wip/69371-tables-same-classes
entrouvert:wip/69351-emails-filenames-table-classes
entrouvert:wip/69301-cell-session-required
entrouvert:wip/62137-wcs-hide-link-if-no-url
entrouvert:wip/69019-wcs-card-first-option
entrouvert:wip/68807-wcs-card-custom-fix-new-cell-init
entrouvert:wip/64575-ajax-edit-cell-attribute
entrouvert:wip/68865-fix-condition-attributeerror
entrouvert:wip/68643-wcs-card-related-labels
entrouvert:wip/66897-wcs-card-user-fields
entrouvert:wip/66898-wcs-card-user-fields
entrouvert:wip/68721-wcs-custom-card-table
entrouvert:wip/68606-search-cell-card-engine-target-page
entrouvert:wip/68534-wcs-card-link-to-page-with-subslug
entrouvert:wip/68554-remove-export-old-format-compat
entrouvert:wip/68673-delete-filters-defined-in-publik-django-templatetags
entrouvert:wip/68679-inherit-placeholder-options
entrouvert:wip/68531-wcs-card-cell-options
entrouvert:wip/68598-wcs-missing-varname
entrouvert:wip/68539-do-not-index-cards-with-user-restriction
entrouvert:wip/67719-wcs-fix-card-relations
entrouvert:wip/68517-cards-adjust-select
entrouvert:wip/68140-merge-card-cells
entrouvert:wip/68063-wcs-card-table-display
entrouvert:wip/68037-wcs-car-cell-all-cards-option
entrouvert:wip/68015-wcs-card-cell-get-many-cards
entrouvert:wip/68473-pylint
entrouvert:wip/68372-dataviz-traduction-trompeuse-var
entrouvert:wip/65882-dataviz-les-sous-filtres-ne-sont
entrouvert:wip/68052-no-tryauth-for-bots
entrouvert:wip/signoz
entrouvert:wip/68212-transactionrecentcell
entrouvert:wip/68160-rephrase-redirection-template
entrouvert:wip/68113-pie-legend-width
entrouvert:wip/68049-dataviz-ne-pas-inverser-automati
entrouvert:wip/67937-table-inverted
entrouvert:wip/67902-revert
entrouvert:wip/67724-django-32
entrouvert:wip/tox-django-32
entrouvert:wip/60018-raw-sql
entrouvert:wip/60018-Page-objects-get-by-natural-key-
entrouvert:wip/67470-str-pylint
entrouvert:wip/67254-clean-duplicated-code
entrouvert:wip/63793-fix-cell-duplicate-unknown-cell
entrouvert:wip/66603-fix-cell-form
entrouvert:wip/67260-wcs-related-and-custom-view
entrouvert:wip/67214-wcs-fix-500-with-badly-ordered-card-cells
entrouvert:wip/67137-skeleton-bytes
entrouvert:wip/66299-Cellule-Graphe-erreur-
entrouvert:wip/66953-fix-condition-context
entrouvert:wip/61589-wcs-care-forms-title
entrouvert:wip/64288-drf-version
entrouvert:wip/66632-fix-condition
entrouvert:wip/66737-lingo-retirer-la-reference-a-SIP
entrouvert:wip/65145-placeholder-flex-grid
entrouvert:wip/65834-fix-icon-height
entrouvert:wip/66263-cell-condition
entrouvert:wip/64936-visual-mark-on-tabs-with-settings
entrouvert:wip/66487-less-transactions
entrouvert:wip/66310-categories-cell-general-tab
entrouvert:wip/65878-link-keep-label-in-general-tab
entrouvert:wip/65815-verbatim-url-in-models
entrouvert:wip/65540-remove-get-templatefilter
entrouvert:wip/65746-fix-template-rendering
entrouvert:wip/65801-remove-json_script-temptatetag
entrouvert:wip/65794-dashboard-tile-stats
entrouvert:wip/64451-card-skip-empty-value
entrouvert:wip/65615-dataviz-exception-MissingRequest
entrouvert:wip/65722-remove-statics-hash
entrouvert:wip/65617-reorder-page-post
entrouvert:wip/65348-dataviz-request-GET-ne-fonctionn
entrouvert:wip/64497-notif-to-anonymous
entrouvert:wip/65024-requests-legacy-urls
entrouvert:wip/64803-publik-django-templatetags
entrouvert:wip/64970-asset-api-return-url
entrouvert:wip/62415-placeholder-div
entrouvert:wip/64496-always-consider-menu-visibility
entrouvert:wip/62072-placeholder-grid
entrouvert:wip/64460-is-notifiable-do-not-log
entrouvert:wip/64416-requests-legacy-urls
entrouvert:wip/64298-django32-skeleton
entrouvert:wip/64297-pwa-maskable-icon
entrouvert:wip/63683-remove-six-usage
entrouvert:wip/62172-style-page-messages
entrouvert:wip/62136-bypass-url-validity
entrouvert:wip/63220-fix-wcs-cells-anonymous-user
entrouvert:wip/63935-add-card-info-cell
entrouvert:wip/63390-forms-in-your-care-cache
entrouvert:wip/63807-forms-in-your-care-mark-as-valid
entrouvert:wip/63650-fix-MultiValueDictKeyError
entrouvert:wip/63325-weekly-agenda-cell-slot-color
entrouvert:wip/63476-make-public-url-no-netloc
entrouvert:wip/62965-cell-edit-sidetabs
entrouvert:wip/63221-assets-check-filename
entrouvert:wip/62678-cache-trop-long-sur-la-cellule-D
entrouvert:wip/63233-fix-missing-dashboard-cell
entrouvert:wip/63223-tests-no-migrations
entrouvert:wip/63176-new-pylint
entrouvert:wip/61816-native-404-without-exception
entrouvert:wip/native-404-without-exception
entrouvert:wip/62244-family-calendar-cell-book-link
entrouvert:wip/62460-wcs-requestcontext-for-custom-field-templates
entrouvert:wip/61391-wcs-card-custom-field-escaping
entrouvert:wip/62439-fix-has-role
entrouvert:wip/62417-filters-enable
entrouvert:wip/60916-cell-duplicate-target
entrouvert:wip/59505-manager-django-permissions
entrouvert:wip/60643-many-notifications
entrouvert:wip/62137-wcs-no-A-if-URL-and-label-empty
entrouvert:wip/61040-wcs-card-custom-title-in-additional-label
entrouvert:wip/58878-custom-view-on-card-cell
entrouvert:wip/58851-care-cells-front
entrouvert:wip/56791-remove-collapse-feature
entrouvert:wip/59798-page-params
entrouvert:wip/61022-data-conditionnal-on-group
entrouvert:wip/61240-lingo-ignorer-les-retours-vides
entrouvert:wip/61197-css-link-list
entrouvert:wip/60956-wcs-card-ids-widget
entrouvert:wip/60957-wcs-card-id-from-url
entrouvert:wip/58782-wcs-filter-by-number
entrouvert:wip/61082-strip-pwa-nav
entrouvert:wip/61033-cards-all-div
entrouvert:wip/60891-card-cell-reverse-relation
entrouvert:wip/60885-card-cell-bad-repeat-index
entrouvert:wip/58447-agenda-cell-subscriptions
entrouvert:wip/60707-wcs-card-fix-js
entrouvert:wip/60445-check-url-with-a-real-user-agent
entrouvert:wip/60564-order-by-filter
entrouvert:wip/58833-card-related
entrouvert:wip/60370-wcs-card-cell-link
entrouvert:wip/58802-wcs-card-cell-empty-value
entrouvert:wip/60369-wcs-card-cell-subtitle
entrouvert:wip/58800-cell-custom-schema-split-content-and-display
entrouvert:wip/58326-wcs-card-empty-custom-schema
entrouvert:wip/60446-cov-context
entrouvert:wip/60397-wcs-card-cell-carddef_reference
entrouvert:wip/60323-enhance-tracking-code-presentation-message
entrouvert:wip/60282-search-max-url-length
entrouvert:wip/59803-card-repeat-index-in-context-rebased
entrouvert:wip/58848-add-cancelurl-to-category-forms-links
entrouvert:wip/60114-add-cancelurl-to-form-links
entrouvert:wip/59931-urlize-card-content
entrouvert:wip/59598-html-in-title
entrouvert:wip/59595-fix-undefined-template
entrouvert:wip/58735-card-templates-context
entrouvert:wip/59803-card-repeat-index-in-context
entrouvert:wip/59801-wcs-filter-by-internal-id
entrouvert:wip/58862-card-ids
entrouvert:wip/59643-link-cell-url-max-length
entrouvert:wip/58462-reduce-wcs-cache-duration
entrouvert:wip/58900-gallery-fix-image-delete
entrouvert:wip/59213-data-include-geoloc-button-block
entrouvert:wip/59186-check-access-against-is-superuser
entrouvert:wip/58962-family-agenda-cache
entrouvert:wip/59025-index-list-of-external-links
entrouvert:wip/58903-make-public-url-with-empty-or-random-url
entrouvert:wip/57134-card-cell-template-field
entrouvert:wip/57707-fix-import-with-internal-redirection
entrouvert:wip/57927-agenda-cell-reference-template
entrouvert:wip/58186-duplicate-redirect
entrouvert:wip/58413-card-cell-empty-card-id
entrouvert:wip/57966-user-requests-custom-title
entrouvert:wip/57954-email-field-in-card
entrouvert:wip/51994-card-file-content
entrouvert:wip/58412-card-cell-id-max-length
entrouvert:wip/58415-add-wcs-templatetags-by-default
entrouvert:wip/56015-clean-family
entrouvert:wip/57952-lingo-clarify-message-on-paid-invoice
entrouvert:wip/56650-lingo-no-callback-url-on-backend
entrouvert:wip/56651-lingo-filter-transaction
entrouvert:wip/57626-template-error
entrouvert:wip/57570-searchcell-button-markup
entrouvert:wip/56979-json-cell-url-error
entrouvert:wip/57323-search-cell-title
entrouvert:wip/57238-family-weekly-agenda-past-events
entrouvert:wip/56649-lingo-return-url
entrouvert:wip/56647-lingo-payment-backend-not-found-error
entrouvert:wip/57322-card-list-pagination
entrouvert:wip/56646-lingo-callback-url-no-link
entrouvert:wip/57279-coloured-surfaces
entrouvert:wip/57061-rename-option-include-requests-not-author
entrouvert:wip/57042-pylint-f-string-disable
entrouvert:wip/56974-pwa-double-redirection
entrouvert:wip/56930-export-import-no-maps-no-pwa
entrouvert:wip/56584-card-no-title
entrouvert:wip/56477-wcs-include-forms-user-can-access
entrouvert:wip/56188-edit-roles
entrouvert:wip/56422-wcs-card-text-fields
entrouvert:wip/56730-family-agenda-user-external-template
entrouvert:wip/56720-family-static
entrouvert:wip/56596-card-info-extra-div
entrouvert:wip/56027-agenda-cell
entrouvert:wip/56308-online-url-consider-redirect
entrouvert:wip/56609-cell-card-bad-markup
entrouvert:wip/56288-pylint
entrouvert:wip/56190-fix-empty-message
entrouvert:wip/56200-wcs-site-invalid
entrouvert:wip/56012-wcs-include_forms_user_can_access
entrouvert:wip/56029-fix-css-cards-cell
entrouvert:wip/54195-tracking
entrouvert:wip/56028-cards-empty-message
entrouvert:wip/56014-revert-forms-user-can-access
entrouvert:wip/13688-lingo-invoice-download-popup
entrouvert:wip/55868-pyupgrade
entrouvert:wip/55468-geojson-wrong-url
entrouvert:wip/55843-card-title
entrouvert:wip/55288-page-ordering
entrouvert:wip/55647-config-json-cell-template
entrouvert:wip/52073-card-cell
entrouvert:wip/55041-forms-user-has-access
entrouvert:wip/55792-cell-template-choice
entrouvert:wip/55335-card-title
entrouvert:wip/55776-description-in-form-and-link-contexts
entrouvert:wip/55686-lingo-no-limit-date
entrouvert:wip/55550-filters
entrouvert:wip/55363-redirect-url-validation
entrouvert:wip/55114-snapshot-str
entrouvert:wip/55103-subslug-help
entrouvert:wip/54259-custom-schema
entrouvert:wip/54549-cards-title
entrouvert:wip/lingo-add-pk-table-wrapper
entrouvert:hotfix/v3.54
entrouvert:wip/54882-do-not-preload-tiles
entrouvert:wip/47537-tipi-update-default-url
entrouvert:wip/54763-index-page-of-cells-with-external-links
entrouvert:wip/54592-dashboard-do-not-load
entrouvert:wip/54570-export-no-ascii-escape
entrouvert:wip/54562-Ajout-de-chrono-comme-exposant-d
entrouvert:wip/52912-jsonfield
entrouvert:wip/54236-repeat-cells
entrouvert:wip/53947-card-cell-without_user
entrouvert:wip/53376-wcs-category-slugs
entrouvert:wip/53213-careforms-category
entrouvert:wip/53778-move-compute-max-height
entrouvert:wip/53780-cell-open-close-events
entrouvert:wip/53596-dataviz-empty-values
entrouvert:wip/53541-remove-newsletter-app
entrouvert:wip/53521-geojson-invalid
entrouvert:wip/53221-subslug-display
entrouvert:wip/52498-card-schema
entrouvert:wip/53501-notif-cell-align-btns
entrouvert:wip/53234-user-list-of-forms-cells-markup
entrouvert:wip/52439-user-search-template
entrouvert:wip/52915-jsonb
entrouvert:wip/52797-isort
entrouvert:wip/52418-search-index-invalid-cell
entrouvert:wip/52055-wcs-backoffice-categories
entrouvert:wip/52201-degager-un-job-qui-a-echoue-du-s
entrouvert:wip/51477-in-menu
entrouvert:wip/51476-redirection
entrouvert:wip/51075-cell-duplicate
entrouvert:wip/51475-import-snapshot
entrouvert:wip/51472-page-load-signals
entrouvert:wip/51184-getlist-filter
entrouvert:wip/51282-auto-tile-invalid-key
entrouvert:wip/50971-card-file-display
entrouvert:wip/51251-description
entrouvert:wip/51014-search-pages-description
entrouvert:wip/50398-assets-key-maxlength
entrouvert:wip/50663-cards-cell-invalid
entrouvert:wip/50713-geojson-layer-cache-duration
entrouvert:wip/50874-has-role-fix
entrouvert:wip/49388-card-cell-user
entrouvert:wip/50001-card-cell-info
entrouvert:wip/feedparser
entrouvert:wip/50000-subslug
entrouvert:wip/49863-lingo-remote-exception
entrouvert:wip/49854-cards-full
entrouvert:wip/49876-ajax-404
entrouvert:wip/49406-cards-in-templates
entrouvert:wip/48562-newsletter-errors
entrouvert:wip/48978-map-layer-slots
entrouvert:wip/45183-eopayment-as-app
entrouvert:wip/48876-get-default-form-fields
entrouvert:wip/48393-lingo-update_transactions-err
entrouvert:wip/48394-lingo-err-1
entrouvert:wip/48338-lingo-err-1
entrouvert:wip/48190-cards-cell-current-user
entrouvert:wip/48261-search-cards-user
entrouvert:wip/48262-search-cards-custom-view
entrouvert:wip/48507-fix-split
entrouvert:wip/48644-export-import-no-lingo
entrouvert:wip/48637-template-name-parameter-for-json-cell
entrouvert:wip/48409-cards
entrouvert:wip/48452-card-info-cell
entrouvert:wip/48413-assets-serve-ckeditor-media
entrouvert:wip/46865-cards-custom-view
entrouvert:hotfix/v3.12
entrouvert:wip/47101-card-slug
entrouvert:hotfix/v2.78
entrouvert:hotfix/v2.73
entrouvert:wip/djangorestframework-39
entrouvert:wip/django22
entrouvert:40883-more-items
entrouvert:40244-exceptions-request
entrouvert:wip/theming
entrouvert:wip/39083-pytest-request-finalizer
entrouvert:wip/tests-request-finalizer
entrouvert:hotfix/v2.50
entrouvert:wip/37464-back-to-black
entrouvert:hotfix/v2.39
entrouvert:wip/29187-backoffice-submission-cell-order
entrouvert:hotfix/v2.26
entrouvert:wip/34934-Gestion-de-l-authentification-mu
entrouvert:hotfix/v2.22
entrouvert:hotfix/test-1
entrouvert:wip/pylint-warnings-next
entrouvert:wip/gallery
entrouvert:wip/23717-external-user-demands-retrieval
entrouvert:wip/guichet-toto
entrouvert:wip/guichet
entrouvert:wip/pwapush
entrouvert:wip/python3
entrouvert:wip/jenkinslib
entrouvert:wip/jenkinsfile-fred
entrouvert:wip/notifications-13122
entrouvert:wip/quixote3
entrouvert:wip/performances
entrouvert:wip/concrete-cellbase-17645
entrouvert:wip/assets-management
entrouvert:wip/lingo-merge
entrouvert:wip/teamnet_axel
entrouvert:wip/chat
entrouvert:wip/search
entrouvert:debian
entrouvert:wip/debian
entrouvert:wip/start
No reviewers
Labels
Clear labels
No items
No Label
Milestone
Clear milestone
No items
No Milestone
Assignees
Clear assignees
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/combo#234
Reference in New Issue
No description provided.
Delete Branch "wip/8122-error403-view"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
66a5ea7539
to2f0eea4624
2f0eea4624
to6f10d2b8c7
6f10d2b8c7
to5c0dfef841
Tout ça m'a l'air ok mais j'ai l'impression qu'on pourrait ne pas créer PagePermissionDenied, et seulement adapter ajax_page_cell et skeleton qui sont des vues JSON et devraient renvoyer une 403 avec un contenu JSON de toute façon, sans passer par l'exception PermissionDenied.
ImageAddView et DashboardAddTileView sont biens des vues HTML et donc le comportement générique dans error403 leur conviendrait.
Ok ! Je vais essayer de faire ça :)
C'est quoi ce que tu désigne par le comportement par défaut ?
return permission_denied(request, *args, **kwargs)
?Hmm, je pense avoir mieux compris l'idée (j'ai mis un peu de temps à me réveiller ;) ).
En gros, ce que tu propose :
return HttpResponse('"permission denied"', status=403)
)Ca me va, je peux faire ça :)
Ma seule réserver serait qu'après, un des comportement de PermissionDenied serait de renvoyer une 302.
Est-ce qu'une solution acceptable serait :
permission_denied(request, ...)
par défautDe cette manière on assure que quand on utilise "simplement" PermissionDenied il ne se passe rien de fou : on a juste le comportement par défaut de django.
Tu as raison sur un point, les deux vues ImageAdd et AddTile sont appelés en ajax pour rendu dans des popups/dialogue et le fait de retourner une 302 quand on est pas connecté va éventuellement produire des choses bizarres, mais pas pire que ce que ça doit faire actuellement, pour AddTile ça ne doit rien faire je pense, parce que le JS attend un retour JSON et ne l'aura pas ces deux vues ne devraient juste jamais être appelées sans être connecté, ça n'arrive que si on est déjà connecté et que la session expire.
DashboardAddTileView est aussi une vue JSON maintenant que je re-regarde son code, même traitement. Il ne reste que ImageAddView qui est utilisé dans une popup dans le /manage/, on aura un souci si on est connecté, dans le manager et que la session expire et qu'on clique sur le bouton pour ajouter une image, la popup contiendra vraisemblablement la page de login d'authentic.
Ce qui me gêne c'est que c'est déjà le comportement natif si une vue JSON est implémenté via DRF, tant qu'à faire quelque chose j'aurai utilisé DRF au pire dans son mode fonction avec le décorateur @api_view (https://www.django-rest-framework.org/api-guide/views/#api_view).
Dans tous les cas d'un permission denied qu'on renvoie à un navigateur et qu'on est pas connecté on veut se logger, le souci ici c'est l'implémentation des popups qui ne permet pas ça et le fait de faire des vues JSON à la main.
Mais si tu veux faire simple, le besoin toulouse ne demande ce comportement que dans publish_page et rien d'autre, mais je trouvais bien que ce soit général et qu'on ait plus à y penser.
Ok, ça n'a pas l'air très problématique.
Ok ! J'ai pu utiliser DRF pour les vues DashboardAddTileView & DashboardRemoveTileView :)
Mais du coup en essayant de faire la même pour skeleton & ajax_cell_page je me suis rendu compte que les deux renvoies du HTML (et dans le commentaire de skeleton c'est écrit qu'elle renverra une 403 en cas de problème). Peut être que la solution simple dans ces deux cas est de remplacer les
raise PermissionDenied()
par desreturn permission_denied(request)
?D'accord, il me semble qu'il y a une série de tests a modifier du coup (qui attendent des 403 et qui vont prendre des 302 à la place)
J'essayerai de jeter un oeil voir si j'en trouve d'autres à implémenter avec DRF :)
5c0dfef841
tof81d9652be
f81d9652be
tof489b737de