invenio-app-rdm icon indicating copy to clipboard operation
invenio-app-rdm copied to clipboard

Guest access request: viewing request timeline UI as owner fails

Open max-moser opened this issue 1 year ago • 1 comments

Package version (if known): v12.0.0

Describe the bug

When a guest requests access to a record with restricted files and I (as the record owner) accept the request, the timeline/detail page for the request fails to render for me (as the record owner).

E.g. after accepting the access request, visiting https://localhost:5000/me/requests/c26b945c-b0ab-4246-ae10-88b094c0c862# fails with the following stack trace:

127.0.0.1 - - [06/Aug/2024 22:21:41] "GET /me/requests/c26b945c-b0ab-4246-ae10-88b094c0c862 HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 2552, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/werkzeug/middleware/proxy_fix.py", line 187, in __call__
    return self.app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/werkzeug/middleware/dispatcher.py", line 78, in __call__
    return app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 2532, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask_login/utils.py", line 290, in decorated_view
    return current_app.ensure_sync(func)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mmoser/rdm/modules/invenio-requests/invenio_requests/views/decorators.py", line 30, in view
    return f(**kwargs)
           ^^^^^^^^^^^
  File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/invenio_app_rdm/requests_ui/views/requests.py", line 179, in user_dashboard_request_view
    record = topic["record"]  # None when draft
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'record'

Steps to Reproduce

  1. Create record with restricted files
  2. Visit the record's landing page via another browser or incognito tab
  3. Create a guest access request
  4. Accept the access request as the record owner
  5. See the 500 page

max-moser avatar Aug 06 '24 20:08 max-moser

The values of some relevant variables in the Werkzeug Debugger:

>>> request
<invenio_requests.services.requests.results.RequestItem object at 0x789c861b0140>
>>> request.data
{'id': 'c26b945c-b0ab-4246-ae10-88b094c0c862', 'created': '2024-08-06T17:22:32.944858+00:00', 'updated': '2024-08-06T20:13:04.994666+00:00', 'links': {'actions': {}, 'self': 'https://localhost:5000/api/requests/c26b945c-b0ab-4246-ae10-88b094c0c  , 'self_html': 'https://localhost:5000/me/requests/c26b945c-b0ab-4246-ae10-88b094c0c8, 'comments': 'https://localhost:5000/api/requests/c26b945c-b0ab-4246-ae10-88b094c0c, }, }
>>> request['topic']
{'record': 'f8kp2-xda53'}
>>> request['receiver']
{'user': '2'}
>>> request._obj.topic
<RDMRecordProxy {'record': 'f8kp2-xda53'} (None)>
>>> request._obj.topic.resolve()
invenio_rdm_records.records.api.RDMRecord({'id': 'f8kp2-xda53', 'pid': {'pk': 122588, 'status': 'R', 'obj_type': 'rec', 'pid_type': 'recid'}, 'pids': {'doi': {'client': 'datacite', 'provider': 'datacite', 'identifier': '10.70124/f8kp2-xda53'}, 'oai': {'provider': 'oai', 'identifier': 'oai:test.researchdata.tuwien.ac.at:f8kp2-xda53'}}, 'files': {'enabled': True},   })
>>> topic
{'permissions': {}, 'record_ui': None}

max-moser avatar Aug 06 '24 20:08 max-moser

I can reproduce this as well.

Samk13 avatar Aug 12 '24 21:08 Samk13