import os
from google.appengine.api import users
import gdata.service
import gdata.auth

import gdata.spreadsheets
import gdata.spreadsheets.data
import gdata.spreadsheets.client
import gdata.spreadsheet.service

from google.appengine.ext.webapp import WSGIApplication
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import webapp
from google.appengine.api import users

port = os.environ['SERVER_PORT']
if port and port != '80':
  HOST_NAME = '%s:%s' % (os.environ['SERVER_NAME'], port)
else:
  HOST_NAME = os.environ['SERVER_NAME']

class TestToken(webapp.RequestHandler):  
    def get(self):
      aVerifier = VerifyTokenAuth()
      token = aVerifier.VerifyTokenAuth(self.request)
      if token == None :
        self.redirect('/RedirectTokenPage')
      else:
        self.redirect('/')


class RedirectTokenPage(webapp.RequestHandler):
    def get(self):
        userName =  users.get_current_user().email()  
        splittarray = userName.split('@')        
        domainToUse = splittarray[1]
        hosted_domain = domainToUse
        next = 'http://%s/TestToken?AuthSubRequest=https://spreadsheets.google.com/feeds' %HOST_NAME
        #AuthSubRequest?scope=http%3A%2F%2Fspreadsheets.google.com%2Ffeeds%2F
        secure = False  
        session = True
        auth_sub_url = gdata.auth.GenerateAuthSubUrl(next, 'https://spreadsheets.google.com/feeds/ ', secure=secure, session=session, domain=domainToUse)
        self.redirect(auth_sub_url)
            
            
            
class VerifyTokenAuth():
    def VerifyTokenAuth(self, request):
        current_user = users.get_current_user()
        
        token_string, token_scopes = gdata.gauth.auth_sub_string_from_url(request.uri,scopes_param_prefix="AuthSubRequest")
        if token_string is None:
            token = gdata.gauth.ae_load(current_user.user_id())
            return token
        else:
            single_use_token = gdata.auth.extract_auth_sub_token_from_url(request.uri,scopes_param_prefix="AuthSubRequest")
            #token = gdata.gauth.AuthSubToken(token_string) 
            
            #raise NonAuthSubToken
            token = gdata.gauth.AuthorizeRequestToken(single_use_token, request.uri)
            #spread_service = gdata.spreadsheet.service.SpreadsheetsService()
            
            #spread_service.UpgradeToSessionToken(single_use_token)
            
            #single_use_tokenSave = gdata.gauth.AuthSubToken(token_string)  
            #token_info = spread_service.AuthSubTokenInfo()
            
            gdata.gauth.ae_save(token, current_user.user_id())
            
            #gdata.gauth.ae_save(token_string, current_user.user_id())
            
