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);
}
}