def home(request):
- return HttpResponse(Template(
- """
- <html>
- <head>
- <title>Social access</title>
- </head>
- <body>
- <h1>Login using any of the following methods:</h1>
- <div style="padding-left: 30px;">
- <div>
- <h2>Login using <a href="http://oauth.net/">OAuth</a> from:</h2>
- <ul>
- <li><a href="/login/twitter/">Twitter</a></li>
- <li><a href="/login/facebook/">Facebook</a></li>
- <li><a href="/login/orkut/">Orkut</a></li>
- </ul>
- </div>
- <div>
- <h2>Login using <a href="http://openid.net/">OpenId</a> from:</h2>
- <ul>
- <li><a href="/login/google/">Google</a></li>
- <li><a href="/login/yahoo/">Yahoo</a></li>
- <li>
+ """Home view, displays login mechanism"""
+ if request.user.is_authenticated():
+ return HttpResponseRedirect('done')
+ else:
+ return render_to_response('home.html', None, RequestContext(request))
+ <form action="/login/lj/" method="post">{% csrf_token %}
+ <label for="openid_lj_user">LiveJournal user:</label>
+ <input id="openid_lj_user" type="text" value="" name="openid_lj_user" />
+ <input type="submit" />
+ </form>
+ </li>
+ <li>
- <form action="/login/openid/" method="post">{% csrf_token %}
- <label for="openid_identifier">Other provider:</label>
- <input id="openid_identifier" type="text" value="" name="openid_identifier" />
- <input type="submit" />
- </form>
- </li>
- </ul>
- </div>
- </div>
- </body>
- </html>
- """).render(Context(RequestContext(request))),
- content_type='text/html;charset=UTF-8')
@login_required
def done(request):
from .store import DjangoOpenIDStore
from .backends import TwitterBackend, OrkutBackend, FacebookBackend, \
- OpenIDBackend
+ OpenIDBackend, GoogleBackend, YahooBackend
from .conf import AX_ATTRS, SREG_ATTR, OPENID_ID_FIELD, SESSION_NAME, \
OPENID_GOOGLE_URL, OPENID_YAHOO_URL, TWITTER_SERVER, \
+ OPENID_LJ_URL, OPENID_LJ_USER_FIELD, \
TWITTER_REQUEST_TOKEN_URL, TWITTER_ACCESS_TOKEN_URL, \
TWITTER_AUTHORIZATION_URL, TWITTER_CHECK_AUTH, \
FACEBOOK_CHECK_AUTH, FACEBOOK_AUTHORIZATION_URL, \
"""Return default blank user extra data"""
return ''
- def update_user_details(self, user, response, details):
- """Update user details with new (maybe) data"""
+ def update_user_details(self, user, response, details, new_user=False):
+ """Update user details with (maybe) new data. Username is not
+ changed if associating a new credential."""
changed = False
- for name, value in details.iteritems():
+
+ if not getattr(settings, 'SOCIAL_AUTH_CHANGE_SIGNAL_ONLY', False):
+ for name, value in details.iteritems():
+ # not update username if user already exists
+ if not new_user and name == USERNAME:
+ continue
- if value and value != getattr(user, name, value):
- setattr(user, name, value)
- changed = True
-
+ if value and value != getattr(user, name, value):
+ setattr(user, name, value)
+ changed = True
+
# Fire a pre-update signal sending current backend instance,
# user instance (created or retrieved from database), service
# response and processed details, signal handlers must return
# True or False to signal that something has changed
- updated = filter(bool, pre_update.send(sender=self, user=user,
+ updated = filter(None, pre_update.send(sender=self, user=user,
response=response,
details=details))
- if changed or len(updated) > 0:
+ # Looking for at least one update
+ has_update = False
+ for result in updated:
+ if result[1]:
+ has_update = True
+ break
+
+ if changed or has_update:
user.save()
def get_user_id(self, details, response):
('http://axschema.org/namePerson/last', 'last_name'),
('http://axschema.org/namePerson/friendly', 'nickname'),
]
- AX_ATTRS = AX_SCHEMA_ATTRS + OLD_AX_ATTRS
- SREG_ATTR = ['email', 'fullname', 'nickname']
- OPENID_ID_FIELD = 'openid_identifier'
- SESSION_NAME = 'openid'
+ AX_ATTRS = AX_SCHEMA_ATTRS + OLD_AX_ATTRS
+ SREG_ATTR = ['email', 'fullname', 'nickname']
+ OPENID_ID_FIELD = 'openid_identifier'
+ SESSION_NAME = 'openid'
-OPENID_GOOGLE_URL = 'https://www.google.com/accounts/o8/id'
+OPENID_GOOGLE_URL = 'https://www.google.com/accounts/o8/id'
- OPENID_YAHOO_URL = 'http://yahoo.com'
+ OPENID_YAHOO_URL = 'http://yahoo.com'
+OPENID_LJ_URL = 'http://%s.livejournal.com'
+OPENID_LJ_USER_FIELD = 'openid_lj_user'