iMicknl/python-overkiz-api

Implement auth factory

Opened this issue · 1 comments

As discussed it would be good to implement some kind of authentication factory per server.

Eventually it would be great to investigate

Manufacturers

  • Atlantic Cozytouch -> JWT / OAuth?

# CozyTouch authentication using jwt
if self.server == SUPPORTED_SERVERS["atlantic_cozytouch"]:
jwt = await self.cozytouch_login()
payload = {"jwt": jwt}

Need to investigate if we can just pass this as a Bearer token to requests as well.

  • Hi Kumo -> classic /login

  • Nexity Eugénie -> ssoToken / OAuth?

    elif self.server == SUPPORTED_SERVERS["nexity"]:
    sso_token = await self.nexity_login()
    user_id = self.username.replace("@", "_-_") # Replace @ for _-_
    payload = {"ssoToken": sso_token, "userId": user_id}

    Need to investigate if we can just pass this as a Bearer token to requests as well.

  • Rexel Energeasy Connect -> broken (uses Azure B2C without user/password flow)
    Tracked in iMicknl/ha-tahoma#591.

  • Somfy (Europe) -> OAuth

Uses bearer token in header, need to handle token refresh
Would the Somfy official API client id / secret work as well?

  • Somfy (other) -> classic /login

  • Local auth (all, jailbroken)
    Tracked in #187

Endpoint is different (/enduser-mobile-web/1/enduserAPI/) and requires X-Auth-Token header.
/login endpoint doesn't exist, verify with checking another endpoint (/setup?).

self.headers.update ({
     "X-Auth-Token": self.api_token
})

I think we should expose an interface where a get and post methods must be implemented. And behind, the implementation does what it wants.