def get_redirect_url(self, **kwargs): """ Generate the github profile and redirect to login """ if "code" not in self.request.GET: raise Exception("Invalid GitHub callback: %s", self.request.GET) token = github.get_github_access_token( code=self.request.GET["code"]) user_profile = github.get_github_user_profile(token=token) username = user_profile["user"]["login"] github_results = GitHub.objects.filter(username=username) if not github_results: # Assuming this is a new user profile = GitHub.populate_from_user_profile(user_profile) user = User.create_from_profile(profile) user.save() profile.user = user profile.save() else: profile = github_results[0] user = profile.user # MAN, this is a dirty, dirty hack. Seriously Django? user.backend = 'django.contrib.auth.backends.ModelBackend' user.save() login(self.request, user) return "/login"
def test_new_user(self): """ Test creating a new user from a profile. """ profile = Testing(name="Testing Roger", email="*****@*****.**", is_default=True) user = User.create_from_profile(profile) user.set_password("foobar") user.save() profile.user = user profile.save() self.assertEqual(user.email, "*****@*****.**") self.assertEqual(user.first_name, "Testing") self.assertEqual(user.last_name, "Roger") self.assertEqual(user.profile.id, profile.id)
def save(self, force_insert=False, force_update=False, commit=True): """ Create a new user and new default profile. """ new_profile = super(RegistrationForm, self).save(commit=False) if not new_profile.id: new_user = User.create_from_profile(new_profile) new_user.set_password(self.data.get("password")) new_user.save() new_profile.user = new_user new_profile.is_default = True if commit: new_profile.save() return new_profile