Skip to content

Instantly share code, notes, and snippets.

@zhsj
Created December 26, 2019 17:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zhsj/aab4cad8811171e3ef9412f23098e1d7 to your computer and use it in GitHub Desktop.
Save zhsj/aab4cad8811171e3ef9412f23098e1d7 to your computer and use it in GitHub Desktop.
mutt oauth refresh command
#!/usr/bin/python3
import json
import argparse
import urllib.request
import urllib.parse
client_id = "1008555780204-finbc9qn6gss7t099l96t1pbqmidv9hm.apps.googleusercontent.com"
client_secret = ""
accounts_url = "https://accounts.google.com/%s"
redirect_uri = "urn:ietf:wg:oauth:2.0:oob"
scope = "https://mail.google.com/"
def refresh_token(token):
params = {
"client_id": client_id,
"client_secret": client_secret,
"grant_type": "refresh_token",
"refresh_token": token,
}
url = accounts_url % "o/oauth2/token"
response = json.loads(
urllib.request.urlopen(
url, urllib.parse.urlencode(params).encode("utf-8")
).read()
)
print(response["access_token"])
def generate_oauth2_token():
params = {
"client_id": client_id,
"redirect_uri": redirect_uri,
"scope": scope,
"response_type": "code",
}
permission_url = "%s?%s" % (
accounts_url % "o/oauth2/auth",
urllib.parse.urlencode(params),
)
print("To authorize token, visit this url and follow the directions:")
print(permission_url)
authorization_code = input("Enter verification code: ")
params = {
"client_id": client_id,
"client_secret": client_secret,
"grant_type": "authorization_code",
"code": authorization_code,
"redirect_uri": redirect_uri,
}
url = accounts_url % "o/oauth2/token"
response = json.loads(
urllib.request.urlopen(
url, urllib.parse.urlencode(params).encode("utf-8")
).read()
)
print("Refresh Token: %s" % response["refresh_token"])
print("Access Token: %s" % response["access_token"])
print("Access Token Expiration Seconds: %s" % response["expires_in"])
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--generate-oauth2-token", action="store_true")
parser.add_argument("--refresh-token")
args = parser.parse_args()
if args.refresh_token:
refresh_token(args.refresh_token)
elif args.generate_oauth2_token:
generate_oauth2_token()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment