Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#23481 closed Bug (fixed)

Cannot view Trac tickets when logged in through GitHub

Reported by: Kevin Brown Owned by: nobody
Component: *.djangoproject.com Version:
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

How to Reproduce

  1. Remove the email from your Trac settings.
  2. Log out.
  3. Log in using the GitHub login.
  4. View any ticket.
  5. Trac gives an Internal Server Error.

If you set an email in your settings, this error disappears and tickets can be viewed. If you remove the email from your settings, and do not go through the login cycle again, this error will not appear. This error only occurs when you log into Trac and the email was not previously set.

Python Traceback

Traceback (most recent call last):
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/web/main.py", line 497, in _dispatch_request
    dispatcher.dispatch(req)
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/web/main.py", line 214, in dispatch
    resp = chosen_handler.process_request(req)
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/ticket/web_ui.py", line 179, in process_request
    return self._process_ticket_request(req)
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/ticket/web_ui.py", line 642, in _process_ticket_request
    get_reporter_id(req, 'author'), field_changes)
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/ticket/web_ui.py", line 1558, in _insert_ticket_data
    fields = self._prepare_fields(req, ticket, field_changes)
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/ticket/web_ui.py", line 1478, in _prepare_fields
    cc_action, cc_entry, cc_list = self._toggle_cc(req, cc)
  File "/home/www/trac/venv/local/lib/python2.7/site-packages/trac/ticket/web_ui.py", line 737, in _toggle_cc
    email = req.session.get('email', '').strip()
AttributeError: 'NoneType' object has no attribute 'strip'

Change History (6)

comment:1 by Aymeric Augustin, 10 years ago

The trackback makes me think of https://github.com/aaugustin/trac-github/blob/master/tracext/github.py#L71 but I don't see how 'email' would end up being null there.

comment:2 by Kevin Brown, 10 years ago

The email can be null when the user has not made one public on GitHub.

https://api.github.com/users/kevin-brown

comment:3 by Aymeric Augustin, 10 years ago

Ah, OK, it returned the empty string in my testing.

This patch in trac-github should fix it:

diff --git a/tracext/github.py b/tracext/github.py
index 2033e48..d437ce0 100644
--- a/tracext/github.py
+++ b/tracext/github.py
@@ -69,8 +69,8 @@ class GitHubLoginModule(LoginModule):
         # Small hack to pass the username to _do_login.
         req.environ['REMOTE_USER'] = user['login']
         # Save other available values in the session.
-        req.session.setdefault('name', user.get('name', ''))
-        req.session.setdefault('email', user.get('email', ''))
+        req.session.setdefault('name', user.get('name') or '')
+        req.session.setdefault('email', user.get('email') or '')
 
         return super(GitHubLoginModule, self)._do_login(req)
 
Last edited 10 years ago by Aymeric Augustin (previous) (diff)

comment:4 by Aymeric Augustin, 10 years ago

Kevin, it should be fixed now. Can you confirm?

comment:5 by Kevin Brown, 10 years ago

Resolution: fixed
Status: newclosed

It appears to be working now, after the fix.

comment:6 by Aymeric Augustin, 10 years ago

Thanks and sorry for the inconvenience!

Note: See TracTickets for help on using tickets.
Back to Top