OAUTH2_V2_DISCVOCERY_DOC = {
    "auth": {
        "oauth2": {
            "scopes": {
                "https://www.googleapis.com/auth/plus.login": {
                    "description": "Know the list of people in your circles, your age range, and "
                    "language"
                },
                "https://www.googleapis.com/auth/plus.me": {
                    "description": "Know who you are on Google"
                },
                "https://www.googleapis.com/auth/userinfo.email": {
                    "description": "View your email address"
                },
                "https://www.googleapis.com/auth/userinfo.profile": {
                    "description": "View your basic profile info"
                },
            }
        }
    },
    "basePath": "/",
    "baseUrl": "https://www.googleapis.com/",
    "batchPath": "batch/oauth2/v2",
    "description": "Obtains end-user authorization grants for use with other Google APIs.",
    "discoveryVersion": "v1",
    "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
    "etag": '"J3WqvAcMk4eQjJXvfSI4Yr8VouA/fwW2utFkCnVanfAd4kn3jkF7-Z8"',
    "icons": {
        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png",
    },
    "id": "oauth2:v2",
    "kind": "discovery#restDescription",
    "methods": {
        "getCertForOpenIdConnect": {
            "httpMethod": "GET",
            "id": "oauth2.getCertForOpenIdConnect",
            "path": "oauth2/v2/certs",
            "response": {"$ref": "Jwk"},
        },
        "tokeninfo": {
            "httpMethod": "POST",
            "id": "oauth2.tokeninfo",
            "parameters": {
                "access_token": {"location": "query", "type": "string"},
                "id_token": {"location": "query", "type": "string"},
                "token_handle": {"location": "query", "type": "string"},
            },
            "path": "oauth2/v2/tokeninfo",
            "response": {"$ref": "Tokeninfo"},
        },
    },
    "name": "oauth2",
    "ownerDomain": "google.com",
    "ownerName": "Google",
    "parameters": {
        "alt": {
            "default": "json",
            "description": "Data format for the response.",
            "enum": ["json"],
            "enumDescriptions": ["Responses with Content-Type of application/json"],
            "location": "query",
            "type": "string",
        },
        "fields": {
            "description": "Selector specifying which fields to include in a partial response.",
            "location": "query",
            "type": "string",
        },
        "key": {
            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless "
            "you provide an OAuth 2.0 token.",
            "location": "query",
            "type": "string",
        },
        "oauth_token": {
            "description": "OAuth 2.0 token for the current user.",
            "location": "query",
            "type": "string",
        },
        "prettyPrint": {
            "default": "true",
            "description": "Returns response with indentations and line breaks.",
            "location": "query",
            "type": "boolean",
        },
        "quotaUser": {
            "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
            "location": "query",
            "type": "string",
        },
        "userIp": {
            "description": "Deprecated. Please use quotaUser instead.",
            "location": "query",
            "type": "string",
        },
    },
    "protocol": "rest",
    "resources": {
        "userinfo": {
            "methods": {
                "get": {
                    "httpMethod": "GET",
                    "id": "oauth2.userinfo.get",
                    "path": "oauth2/v2/userinfo",
                    "response": {"$ref": "Userinfoplus"},
                    "scopes": [
                        "https://www.googleapis.com/auth/plus.login",
                        "https://www.googleapis.com/auth/plus.me",
                        "https://www.googleapis.com/auth/userinfo.email",
                        "https://www.googleapis.com/auth/userinfo.profile",
                    ],
                }
            },
            "resources": {
                "v2": {
                    "resources": {
                        "me": {
                            "methods": {
                                "get": {
                                    "httpMethod": "GET",
                                    "id": "oauth2.userinfo.v2.me.get",
                                    "path": "userinfo/v2/me",
                                    "response": {"$ref": "Userinfoplus"},
                                    "scopes": [
                                        "https://www.googleapis.com/auth/plus.login",
                                        "https://www.googleapis.com/auth/plus.me",
                                        "https://www.googleapis.com/auth/userinfo.email",
                                        "https://www.googleapis.com/auth/userinfo.profile",
                                    ],
                                }
                            }
                        }
                    }
                }
            },
        }
    },
    "revision": "20181105",
    "rootUrl": "https://www.googleapis.com/",
    "schemas": {
        "Jwk": {
            "id": "Jwk",
            "properties": {
                "keys": {
                    "items": {
                        "properties": {
                            "alg": {"default": "RS256", "type": "string"},
                            "e": {"type": "string"},
                            "kid": {"type": "string"},
                            "kty": {"default": "RSA", "type": "string"},
                            "n": {"type": "string"},
                            "use": {"default": "sig", "type": "string"},
                        },
                        "type": "object",
                    },
                    "type": "array",
                }
            },
            "type": "object",
        },
        "Tokeninfo": {
            "id": "Tokeninfo",
            "properties": {
                "access_type": {
                    "description": "The access type granted with this token. It can be offline or online.",
                    "type": "string",
                },
                "audience": {
                    "description": "Who is the intended audience for this token. In general the same as issued_to.",
                    "type": "string",
                },
                "email": {
                    "description": "The email address of the user. Present only if the email scope is present in the request.",
                    "type": "string",
                },
                "expires_in": {
                    "description": "The expiry time of the token, as number of seconds left until expiry.",
                    "format": "int32",
                    "type": "integer",
                },
                "issued_to": {
                    "description": "To whom was the token issued to. In general the same as audience.",
                    "type": "string",
                },
                "scope": {
                    "description": "The space separated list of scopes granted to this token.",
                    "type": "string",
                },
                "token_handle": {
                    "description": "The token handle associated with this token.",
                    "type": "string",
                },
                "user_id": {"description": "The obfuscated user id.", "type": "string"},
                "verified_email": {
                    "description": "Boolean flag which is true if the email address is verified. Present only if the "
                    "email scope is present in the request.",
                    "type": "boolean",
                },
            },
            "type": "object",
        },
        "Userinfoplus": {
            "id": "Userinfoplus",
            "properties": {
                "email": {"description": "The user's email address.", "type": "string"},
                "family_name": {
                    "description": "The user's last name.",
                    "type": "string",
                },
                "gender": {"description": "The user's gender.", "type": "string"},
                "given_name": {
                    "description": "The user's first name.",
                    "type": "string",
                },
                "hd": {
                    "description": "The hosted domain e.g. example.com if the user is Google apps user.",
                    "type": "string",
                },
                "id": {
                    "description": "The obfuscated ID of the user.",
                    "type": "string",
                },
                "link": {"description": "URL of the profile page.", "type": "string"},
                "locale": {
                    "description": "The user's preferred locale.",
                    "type": "string",
                },
                "name": {"description": "The user's full name.", "type": "string"},
                "picture": {
                    "description": "URL of the user's picture image.",
                    "type": "string",
                },
                "verified_email": {
                    "default": "true",
                    "description": "Boolean flag which is true if the email address is verified. Always verified "
                    "because we only return the user's primary email address.",
                    "type": "boolean",
                },
            },
            "type": "object",
        },
    },
    "servicePath": "",
    "title": "Google OAuth2 API",
    "version": "v2",
}

WELLKNOWN_OPENID_CONFIGS = {
    "authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
    "claims_supported": [
        "aud",
        "email",
        "email_verified",
        "exp",
        "family_name",
        "given_name",
        "iat",
        "iss",
        "locale",
        "name",
        "picture",
        "sub",
    ],
    "code_challenge_methods_supported": ["plain", "S256"],
    "id_token_signing_alg_values_supported": ["RS256"],
    "issuer": "https://accounts.google.com",
    "jwks_uri": "https://www.googleapis.com/oauth2/v3/certs",
    "response_types_supported": [
        "code",
        "token",
        "id_token",
        "code token",
        "code id_token",
        "token id_token",
        "code token id_token",
        "none",
    ],
    "revocation_endpoint": "https://oauth2.googleapis.com/revoke",
    "scopes_supported": ["openid", "email", "profile"],
    "subject_types_supported": ["public"],
    "token_endpoint": "https://oauth2.googleapis.com/token",
    "token_endpoint_auth_methods_supported": [
        "client_secret_post",
        "client_secret_basic",
    ],
    "userinfo_endpoint": "https://openidconnect.googleapis.com/v1/userinfo",
}
