From 3c831da310786eef7590d2614a054a54f2934e62 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Dec 2021 10:11:26 +0100 Subject: [PATCH] [api] Add support for anonymous EOS sessions These can be used to download the launcher and overlay/service updates without actually having to authenticate an account. --- legendary/api/egs.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/legendary/api/egs.py b/legendary/api/egs.py index 435be09..a1c429c 100644 --- a/legendary/api/egs.py +++ b/legendary/api/egs.py @@ -79,7 +79,8 @@ class EPCAPI: self.user = session return self.user - def start_session(self, refresh_token: str = None, exchange_token: str = None) -> dict: + def start_session(self, refresh_token: str = None, exchange_token: str = None, + client_credentials: bool = False) -> dict: if refresh_token: params = dict(grant_type='refresh_token', refresh_token=refresh_token, @@ -88,6 +89,9 @@ class EPCAPI: params = dict(grant_type='exchange_code', exchange_code=exchange_token, token_type='eg1') + elif client_credentials: + params = dict(grant_type='client_credentials', + token_type='eg1') else: raise ValueError('At least one token type must be specified!') @@ -102,9 +106,12 @@ class EPCAPI: self.log.warning(f'Login to EGS API failed with errorCode: {j["errorCode"]}') raise InvalidCredentialsError(j['errorCode']) - self.user = j - self.session.headers['Authorization'] = f'bearer {self.user["access_token"]}' - return self.user + self.session.headers['Authorization'] = f'bearer {j["access_token"]}' + # only set user info when using non-anonymous login + if not client_credentials: + self.user = j + + return j def invalidate_session(self): # unused r = self.session.delete(f'https://{self._oauth_host}/account/api/oauth/sessions/kill/{self.access_token}')