Code Monkey home page Code Monkey logo

nest-oauth2-provider's Introduction

Nest provider for league/oauth2-client

This is a package to integrate Google Nest authentication with the OAuth2 client library by The League of Extraordinary Packages.

To install, use composer:

composer require grumpydictator/nest-oauth2-provider

Usage

Usage is the same as the league's OAuth client, using \Grumpydictator\NestOauth2Provider\Provider\NestProvider as the provider.

Authorization Code Flow

Example:

$provider = new \Grumpydictator\NestOauth2Provider\Provider\NestProvider([
    'clientId'  =>  'XXXXXXXX',
    'clientSecret'  =>  'XXXXXXXX',
    'redirectUri' => 'https://example.com', // https is mandatory for Google Nest
    'scopes' => [], // scopes are set at the Google Nest dev-site. 
));

if (!isset($_GET['code'])) {

    // If we don't have an authorization code then get one
    $authUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->state;
    header('Location: '.$authUrl);
    exit;

// Check given state against previously stored one to mitigate CSRF attack
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {

    unset($_SESSION['oauth2state']);
    exit('Invalid state');

} else {

    $token = $provider->getAccessToken('authorization_code', [
    	'code' => $_GET['code'],
    	'grant_type' => 'authorization_code',
    	
    ]);

    // Optional: Now you have a token you can look up a users profile data
    try {

        // We got an access token, let's now get the Nest details
        $nest = $provider->getUserDetails($token);

        // show all structures and thermostats:
        /** @var \Grumpydictator\NestOauth2Provider\Provider\Structure $structure */
        foreach($nest->getStructures() as $structure) {
            echo $structure->name."\n"; 
            /** @var \Grumpydictator\NestOauth2Provider\Provider\Thermostat $thermostat */
            foreach($structure->getThermostats() as $thermostat) {
                echo $thermostat->name_long.': ' . $thermostat->ambient_temperature_c.'C'."\n";
            }
            /** @var \Grumpydictator\NestOauth2Provider\Provider\SmokeCoAlarm $alarm */
            foreach($structure->getSmokeCoAlarms() as $alarm) {
                echo $alarm->name_long.': ' . $alarm->co_alarm_state.'/' . $alarm->smoke_alarm_state ."\n";
            }

        }

    } catch (Exception $e) {

        // Failed to get user details
        exit('Oh dear...');
    }

    // Use this to interact with an API on the users behalf
    echo $token->accessToken;
}

Refreshing a Token

The Google Nest API's access token is valid for ~10 years, and should not need refreshing.

nest-oauth2-provider's People

Contributors

jc5 avatar qistoph avatar

Watchers

 avatar

Forkers

stevenmaguire

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.