Skip to content
Snippets Groups Projects
Select Git revision
  • 10de10d1de2b02d3729415f9f398398c2ff3f62d
  • main default protected
  • cf2025
  • cf2024
  • cf2023-euro
  • cf2023-offline
6 results

index.js

Blame
  • google.py 2.30 KiB
    """
    Google Authentication
    
    """
    
    from django.http import *
    from django.core.mail import send_mail
    from django.conf import settings
    
    import httplib2,json
    
    import sys, os, cgi, urllib, urllib2, re
    
    from oauth2client.client import OAuth2WebServerFlow
    
    # some parameters to indicate that status updating is not possible
    STATUS_UPDATES = False
    
    # display tweaks
    LOGIN_MESSAGE = "Log in with my Google Account"
    
    def get_flow(redirect_url=None):
      return OAuth2WebServerFlow(client_id=settings.GOOGLE_CLIENT_ID,
                client_secret=settings.GOOGLE_CLIENT_SECRET,
                scope='profile email',
                redirect_uri=redirect_url)
    
    def get_auth_url(request, redirect_url):
      flow = get_flow(redirect_url)
    
      request.session['google-redirect-url'] = redirect_url
      return flow.step1_get_authorize_url()
    
    def get_user_info_after_auth(request):
      flow = get_flow(request.session['google-redirect-url'])
    
      if not request.GET.has_key('code'):
        return None
      
      code = request.GET['code']
      credentials = flow.step2_exchange(code)
    
      # the email address is in the credentials, that's how we make sure it's verified
      id_token = credentials.id_token
      if not id_token['email_verified']:
        raise Exception("email address with Google not verified")
       
      email = id_token['email']
    
      # get the nice name
      http = httplib2.Http(".cache")
      http = credentials.authorize(http)
      (resp_headers, content) = http.request("https://www.googleapis.com/plus/v1/people/me", "GET")
    
      response = json.loads(content)
    
      name = response['displayName']
      
      # watch out, response also contains email addresses, but not sure whether thsoe are verified or not
      # so for email address we will only look at the id_token
      
      return {'type' : 'google', 'user_id': email, 'name': name , 'info': {'email': email}, 'token':{}}
        
    def do_logout(user):
      """
      logout of Google
      """
      return None
      
    def update_status(token, message):
      """
      simple update
      """
      pass
    
    def send_message(user_id, name, user_info, subject, body):
      """
      send email to google users. user_id is the email for google.
      """
      send_mail(subject, body, settings.SERVER_EMAIL, ["%s <%s>" % (name, user_id)], fail_silently=False)
      
    def check_constraint(constraint, user_info):
      """
      for eligibility
      """
      pass
    
    
    #
    # Election Creation
    #
    
    def can_create_election(user_id, user_info):
      return True