dsoprea / GDriveFS

An innovative FUSE wrapper for Google Drive.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

AuthorizationFailureError with SSL: CERTIFICATE_VERIFY_FAILED

Masterxilo opened this issue · comments

I ran gdfstool auth --url, visited the URL, got the auth code, then I did this:

$ gdfstool auth --auth ~/gdfs.credentials2 4/AAC_Cy8Q-wboFTYzpV---REST-OMITTED---      
Traceback (most recent call last):
  File "/usr/local/bin/gdfstool", line 125, in <module>
    main()
  File "/usr/local/bin/gdfstool", line 118, in main
    _handle_auth(args)
  File "/usr/local/bin/gdfstool", line 56, in _handle_auth
    _handle_auth_store(*args.auth)
  File "/usr/local/bin/gdfstool", line 50, in _handle_auth_store
    authorize.step2_doexchange(authcode)
  File "/usr/local/lib/python2.7/dist-packages/gdrivefs/gdtool/oauth_authorize.py", line 143, in step2_doexchange
    raise AuthorizationFailureError(message)
gdrivefs.errors.AuthorizationFailureError: Could not do auth-exchange (this was either a legitimate error, or the auth-exchange was attempted when not necessary): [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

What am I doing wrong?

I have also encountered this error.

Hey @Masterxilo,

I figured out the issue. Maybe you already have too.

TL;DR: Update your google-api-python-client package to use the latest version

Google moved their code to github have changed some things (as per #149). You need to use their updated google-api-python-client available here: https://github.com/google/google-api-python-client It appears that the older version which was hosted in code.google.com is no longer compatible with whatever changes google made to their API.

To get things working again, all I did, roughly speaking, was:

mkdir mount_gdrive
cd mount_gdrive
pip install -U oauth2client
pip install -U google-api-python-client
git clone https://github.com/dsoprea/GDriveFS
cd GDriveFS
pip install .
cd ..
mkdir -p mnt/googledrive
gdfstool auth_get_url
gdfstool auth_write "<INSERT KEY FROM GOOGLE>"
gdfs default mnt/googledrive/

If you just pip install GDriveFS, you will get a different version than what is currently in master. This version doens't have the new gdfstool syntax that I'm using here.

You'll should also see that you need to pip install oauth2client.

@asreimer I followed your instructions but when running auth_get_url i'm getting an error saying gdfstool command is not found. Tried executing from a few different directories down to the resources/scripts one from GdriveFS but still no luck. Same message for gdfs default mnt/googledrive/

I have followed you instructions on getting the gdfstools installed. This is what I get now.
pi@raspberrypi:~ $ gdfstool auth_get_url
Traceback (most recent call last):
File "/usr/local/bin/gdfstool", line 15, in
import gdrivefs.gdfs.gdfuse
ImportError: No module named gdfs.gdfuse
For some reason the import is not picking up all the items in the module. From the python command line I imported the gdrivefs module and ran a dir() on the object to find out what attributes are on that module This is what is reported back.

import gdrivefs.gdfs
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named gdfs
dir(gdrivefs)
['builtins', 'doc', 'file', 'name', 'package', 'path', 'version']

There is diffidently some link missing somewhere in the new scripts.
python
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Well i got the system to work, kinda. This is what I am getting now.
pi@raspberrypi:~ $ sudo gdfstool auth -a /home/pi/gdfs.creds "{MY code}"
Traceback (most recent call last):
File "/usr/local/bin/gdfstool", line 125, in
main()
File "/usr/local/bin/gdfstool", line 118, in main
_handle_auth(args)
File "/usr/local/bin/gdfstool", line 56, in _handle_auth
_handle_auth_store(*args.auth)
File "/usr/local/bin/gdfstool", line 50, in _handle_auth_store
authorize.step2_doexchange(authcode)
File "/usr/local/lib/python2.7/dist-packages/gdrivefs/gdtool/oauth_authorize.py", line 143, in step2_doexchange
raise AuthorizationFailureError(message)
gdrivefs.errors.AuthorizationFailureError: Could not do auth-exchange (this was either a legitimate error, or the auth-exchange was attempted when not necessary): invalid_grantBad Request

Any thoughts

Looks like you have a local issue with your installed libraries. I also just adjusted some dependency versions the other day. You might want to try it again, but it might be better, at least for experimentation, to use virtualenv, which is a sandbox that gives you the ability to ignore anything else that might already be installed on your system.

Try testing with this if/when you have virtualenv installed:

$ git clone git@github.com:dsoprea/GDriveFS.git gdrivefs.test
...

$ cd gdrivefs.test/
$ virtualenv -ppython3.6 .
...

$ source bin/activate
(gdrivefs.test) $ pip install .
...

(gdrivefs.test) $ gdfstool auth_get_url
To authorize FUSE to use your Google Drive account, visit the following URL to produce an authorization code:

https://accounts.google.com/o/oauth2/auth?client_id=1056816309698.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file&access_type=offline&response_type=code

(gdrivefs.test) $ gdfstool auth_write 4/4ABu4tyBNg9..........................q1RlSKq7sbmvINMtYM
Authorization code recorded.

(gdrivefs.test) $ gdfs default /tmp/gd

The example above uses Python 3.6 but any Python should work.

I'm gonna close this issue for now since the project is fine.