Skip to main

Erste Schritte

Entwicklerdokumentation

OAuth2

Die everHome API verwendet OAuth2 zur Authentifizierung.
Lege zunächst unter Meine Anwendungen eine OAuth2 Anwendung an.
Bewahre die Client ID und den Client Secret sicher auf.

Http

Alle HTTP Requests die an die everHome API gesendet werden müssen mithilfe des durch OAuth2 erzeugten Tokens autorisiert werden.
Hierfür muss das aktuelle Token im HTTP-Header mitgegeben werden.

GET https://everhome.cloud/device HTTP/1.1 Authorization: Bearer $TOKEN

Body parameter werden mittels Json übergeben.

POST https://everhome.cloud/device/56/execute HTTP/1.1 Authorization: Bearer $TOKEN Content-Type: application/json \n { "action": "on" }

OAuth2 Login Beispiel

export CLIENT_ID="Deine Client ID" export CLIENT_SECRET="Dein Client Secret"
const app = require('express')();
const { AuthorizationCode } = require('simple-oauth2');

const port = 3000;

const createApplication = (cb) => {
  const callbackUrl = 'http://localhost:3000/callback';

  app.listen(port, (err) => {
    if (err) return console.error(err);

    console.log(`http://localhost:${port}`);

    return cb({
      app,
      callbackUrl,
    });
  });
};

createApplication(({ app, callbackUrl }) => {
  const client = new AuthorizationCode({
    client: {
      id: process.env.CLIENT_ID,
      secret: process.env.CLIENT_SECRET,
    },
    auth: {
      tokenHost: 'https://everhome.cloud',
      authorizeHost: 'https://everhome.cloud',
      tokenPath: '/oauth2/token',
      authorizePath: '/oauth2/authorize',
    },
    http: {
      json: 'force',
      headers: {
        accept: "text/html"
      }
    },
    options: {
      authorizationMethod: 'body',
    },
  });

  const authorizationUri = client.authorizeURL({
    redirect_uri: callbackUrl,
    state: '3',
  });

  // Ruft everHome OAuth2 Seite auf
  app.get('/auth', (req, res) => {
    console.log(authorizationUri);
    res.redirect(authorizationUri);
  });

  // Fängt Antwort der OAuth2 Seite ab
  app.get('/callback', async (req, res) => {
    const { code } = req.query;
    const options = {
      code,
      redirect_uri: callbackUrl,
    };

    try {
      const accessToken = await client.getToken(options);

      console.log('Dein everHome Token: ', accessToken.token);

      persistToken(accessToken.token); // token speichern

      return res.status(200).json(accessToken.token);
    } catch (error) {
      console.error('Access Token Error', error.message);
      return res.status(500).json('Authentication failed');
    }
  });

  app.get('/', (req, res) => {
    res.send('<a href="/auth">Login</a>');
  });
});

OAuth2 Token erneuern

Das erhaltene OAuth2 Token läuft aus Sicherheitsgründen nach einer gewissen Zeit ab.
Prüfe daher vor jedem HTTP-Request, ob das zu verwendende Token noch gültig ist.

const accessTokenJSONString = loadTokenFromStorage();
let accessToken = client.createToken(JSON.parse(accessTokenJSONString));
if (accessToken.expired(30)) {
    try {
      accessToken = await accessToken.refresh();
    } catch (error) {
      console.log('Error refreshing access token: ', error.message);
    }
}