57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""Revoke a guest grant that never did anything, before it locks the role.
|
|
|
|
tools.secrets was declared guest-grantable, so the role grid offered it and
|
|
stored it - and the secure-send route never consulted the guest ROLE at all. It
|
|
decides on the securesend_allow_guests setting, which fails closed and carries
|
|
the rate limit. A site that ticked the box got no change in behaviour, in either
|
|
direction.
|
|
|
|
The plugin no longer declares it grantable. That alone would repeat the deadlock
|
|
fixed in 723a4ff: update_role refuses the WHOLE request when a submitted
|
|
permission is not grantable, and the role grid resubmits what the role already
|
|
holds - so a site whose guest role holds tools.secrets could no longer save the
|
|
guest role at all, including to change something else entirely.
|
|
|
|
So the grant is removed here, from the one role that could hold it. Nothing is
|
|
lost: it granted nothing. Guest secret-link creation stays exactly where it was,
|
|
under securesend_allow_guests.
|
|
|
|
Only the GUEST role is touched. A signed-in role holding tools.secrets is
|
|
unaffected - that permission works normally for an account.
|
|
|
|
Revision ID: 7d41_drop_guest_tools_secrets
|
|
Revises: 7d40_machine_maintenance_dates
|
|
"""
|
|
from alembic import op
|
|
|
|
import sqlalchemy as sa
|
|
|
|
|
|
revision = '7d41_drop_guest_tools_secrets'
|
|
down_revision = '7d40_machine_maintenance_dates'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
bind = op.get_bind()
|
|
inspector = sa.inspect(bind)
|
|
tables = set(inspector.get_table_names())
|
|
if not {'roles', 'permissions', 'rolepermissions'} <= tables:
|
|
return
|
|
|
|
bind.execute(sa.text(
|
|
'DELETE FROM rolepermissions WHERE roleid IN '
|
|
'(SELECT roleid FROM roles WHERE rolename = :guest) '
|
|
'AND permissionid IN '
|
|
'(SELECT permissionid FROM permissions WHERE name = :permission)'),
|
|
{'guest': 'guest', 'permission': 'tools.secrets'})
|
|
|
|
|
|
def downgrade():
|
|
"""Deliberately a no-op.
|
|
|
|
Re-granting a permission that nothing reads would restore the confusion
|
|
rather than any capability.
|
|
"""
|