2011-02-11 12:37:53 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
2013-06-25 16:19:22 +00:00
from openerp . osv import osv
2013-06-25 10:58:19 +00:00
from openerp import SUPERUSER_ID
2013-06-27 14:37:13 +00:00
from openerp . tools . translate import _
2013-06-25 10:58:19 +00:00
import urllib
2013-06-27 14:37:13 +00:00
import urllib2
2013-06-25 10:58:19 +00:00
import simplejson
2013-07-22 14:30:34 +00:00
class google_service ( osv . osv_memory ) :
2013-06-27 14:37:13 +00:00
_name = ' google.service '
2013-06-25 10:58:19 +00:00
2013-06-27 14:37:13 +00:00
def generate_refresh_token ( self , cr , uid , service , authorization_code , context = None ) :
2013-06-25 10:58:19 +00:00
if authorization_code :
ir_config = self . pool [ ' ir.config_parameter ' ]
client_id = ir_config . get_param ( cr , SUPERUSER_ID , ' google_ %s _client_id ' % service )
client_secret = ir_config . get_param ( cr , SUPERUSER_ID , ' google_ %s _client_secret ' % service )
redirect_uri = ir_config . get_param ( cr , SUPERUSER_ID , ' google_redirect_uri ' )
#Get the Refresh Token From Google And store it in ir.config_parameter
2013-06-26 17:00:35 +00:00
headers = { " Content-type " : " application/x-www-form-urlencoded " }
data = dict ( code = authorization_code , client_id = client_id , client_secret = client_secret , redirect_uri = redirect_uri , grant_type = " authorization_code " )
data = urllib . urlencode ( data )
2013-06-27 14:37:13 +00:00
try :
req = urllib2 . Request ( " https://accounts.google.com/o/oauth2/token " , data , headers )
content = urllib2 . urlopen ( req ) . read ( )
except urllib2 . HTTPError :
raise self . pool . get ( ' res.config.settings ' ) . get_config_warning ( cr , _ ( " Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired " ) , context = context )
2013-06-25 10:58:19 +00:00
content = simplejson . loads ( content )
2013-06-27 14:37:13 +00:00
return content . get ( ' refresh_token ' )
2013-06-25 10:58:19 +00:00
2013-07-22 14:30:34 +00:00
def _get_google_token_uri ( self , cr , uid , service , scope , context = None ) :
2013-06-25 16:19:22 +00:00
ir_config = self . pool [ ' ir.config_parameter ' ]
params = {
2013-07-22 14:30:34 +00:00
' scope ' : scope ,
2013-06-25 16:19:22 +00:00
' redirect_uri ' : ir_config . get_param ( cr , SUPERUSER_ID , ' google_redirect_uri ' ) ,
' client_id ' : ir_config . get_param ( cr , SUPERUSER_ID , ' google_ %s _client_id ' % service ) ,
' response_type ' : ' code ' ,
' client_id ' : ir_config . get_param ( cr , SUPERUSER_ID , ' google_ %s _client_id ' % service ) ,
}
uri = ' https://accounts.google.com/o/oauth2/auth? %s ' % urllib . urlencode ( params )
return uri
2013-06-25 10:58:19 +00:00
# vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4: