瀏覽代碼

github login complete

mk200789 10 年之前
父節點
當前提交
1d3190674f

+ 2 - 1
hackathon_starter/hackathon/admin.py

@@ -1,5 +1,5 @@
 from django.contrib import admin
-from hackathon.models import UserProfile, Profile, InstagramProfile, TwitterProfile, MeetupToken
+from hackathon.models import UserProfile, Profile, InstagramProfile, TwitterProfile, MeetupToken, GithubProfile
 
 # Register your models here.
 class TwitterProfileAdmin(admin.ModelAdmin):
@@ -9,5 +9,6 @@ admin.site.register(UserProfile)
 admin.site.register(Profile)
 admin.site.register(InstagramProfile)
 admin.site.register(TwitterProfile, TwitterProfileAdmin)
+admin.site.register(GithubProfile)
 admin.site.register(MeetupToken)
 

+ 16 - 4
hackathon_starter/hackathon/scripts/github.py

@@ -39,7 +39,8 @@ class GithubOauthClient(object):
         settings = {'client_id': self.client_id,
                     'client_secret': self.client_secret,
                     'code': code,
-                    'redirect_uri': 'http://127.0.0.1:8000/hackathon/'}
+                    'redirect_uri': 'http://127.0.0.1:8000/hackathon/',
+                    'accept': 'json'}
         
         params = urllib.urlencode(settings)
         access_link = ACCESS_TOKEN_URL + '?' + params
@@ -48,13 +49,24 @@ class GithubOauthClient(object):
         if int(req.status_code) != 200:
             raise Exception('Invalid response %s' %req.status_code)
 
-
+        print req.content
         content = urlparse.parse_qs(req.content)
         print content
         self.access_token = content['access_token'][0]
         self.token_type = content['token_type'][0]
-        self.scope = content['scope']
-        #print self.scope
+        self.scopes = content['scope'][0]
+
+    def getUserInfo(self):
+        link = 'https://api.github.com/user?access_token=' + self.access_token
+        req = requests.get(link)
+
+        if int(req.status_code) != 200:
+            raise Exception('Invalid response %s' %req.status_code)
+
+        content = json.loads(req.content)
+        self.username = content['login']
+
+
 
 
 def getUserData(clientID, clientSecret):

+ 26 - 3
hackathon_starter/hackathon/views.py

@@ -32,7 +32,7 @@ from rest_framework.renderers import JSONRenderer
 from rest_framework.parsers import JSONParser
 
 # Models
-from hackathon.models import Snippet, Profile, InstagramProfile, TwitterProfile, MeetupToken
+from hackathon.models import Snippet, Profile, InstagramProfile, TwitterProfile, MeetupToken, GithubProfile
 from hackathon.serializers import SnippetSerializer
 from hackathon.forms import UserForm
 
@@ -50,9 +50,21 @@ def index(request):
     if not request.user.is_active:
         if request.GET.items():
             if profile_track == 'github':
+                print "GITHUB"
                 code = request.GET['code']
                 getGithub.get_access_token(code)
-                print getGithub.access_token
+                getGithub.getUserInfo()
+
+                try:
+                    user = User.objects.get(username = getGithub.username + '_github')
+                except User.DoesNotExist:
+                    username = getGithub.username + '_github'
+                    new_user = User.objects.create_user(username, username+'@madewithgithub.com', 'password')
+                    new_user.save()
+                    profile = GithubProfile(user=new_user, access_token=getGithub.access_token, scopes=getGithub.scopes ,github_user=getGithub.username)
+                    profile.save()
+                user = authenticate(username=getGithub.username+'_github', password='password')
+                login(request, user)
             elif profile_track == 'twitter':
                 oauth_verifier = request.GET['oauth_verifier']
                 getTwitter.get_access_token_url(oauth_verifier) 
@@ -83,7 +95,18 @@ def index(request):
                 login(request, user)
     else:
         if request.GET.items():
-            if profile_track == 'twitter':
+            if profile_track == 'github':
+                code = request.GET['code']
+                getGithub.get_access_token(code)
+                getGithub.getUserInfo()
+                user = User.objects.get(username = request.user.username)
+
+                try:
+                    githubUser = GithubProfile.objects.get(user=user.id)
+                except GithubProfile.DoesNotExist:
+                    profile = GithubProfile(user=new_user, access_token=getGithub.access_token, scopes=getGithub.scopes ,github_user=getGithub.username)
+                    profile.save()
+            elif profile_track == 'twitter':
                 oauth_verifier = request.GET['oauth_verifier']
                 getTwitter.get_access_token_url(oauth_verifier)
                 user = User.objects.get(username = request.user.username)