Skip to content

Commit 5f067f8

Browse files
authored
Update password flow to fetch client_id from service (#653)
* Update password flow to fetch client_id from service * lint
1 parent c7f2f24 commit 5f067f8

File tree

3 files changed

+12
-15
lines changed

3 files changed

+12
-15
lines changed

src/cli/login.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,9 @@ class UrlValidator(pydantic.BaseModel):
9898
password = args.password_file.read().strip('\n')
9999
args.password_file.close()
100100

101-
# Construct device endpoint
102-
device_endpoint = args.device_endpoint
103-
client_id: str = service_client.login_manager.login_config.client_id
104-
if not device_endpoint:
105-
login_info = login.fetch_login_info(url)
106-
device_endpoint = login_info['device_endpoint']
107-
client_id = login_info['device_client_id'] or client_id
108-
109101
# Login through device code flow
110102
if args.method == 'code':
111-
service_client.login_manager.device_code_login(url, device_endpoint, client_id)
103+
service_client.login_manager.device_code_login(url, args.device_endpoint)
112104

113105
# Login through resource owner password flow
114106
elif args.method == 'password':

src/lib/utils/client.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,13 @@ def login_storage(self) -> login.LoginStorage:
155155
def login_config(self) -> login.LoginConfig:
156156
return self._login_config
157157

158-
def device_code_login(self, url: str, device_endpoint: str, client_id: str):
158+
def device_code_login(self, url: str, device_endpoint: str | None):
159159
""" Log in using OAUTH2 device flow """
160160
# Generate a user code
161+
login_info = login.fetch_login_info(url)
162+
device_endpoint = device_endpoint or login_info['device_endpoint']
163+
client_id = self._login_config.client_id or login_info['client_id']
164+
161165
response = requests.post(device_endpoint, data={
162166
'client_id': client_id,
163167
'scope': 'openid offline_access profile'

src/lib/utils/login.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ class LoginConfig(pydantic.BaseModel):
7878
command_line='token_endpoint',
7979
default = None,
8080
description='The url to get a token from device auth, client auth, or refresh token.')
81-
client_id: str = pydantic.Field(
81+
client_id: str | None = pydantic.Field(
8282
command_line='client_id',
83-
default='osmo-device',
83+
default=None,
8484
description='The client id for the OSMO application.')
8585
login_method: Literal['password', 'token'] | None = pydantic.Field(
8686
command_line='login_method',
@@ -176,17 +176,18 @@ def owner_password_login(config: LoginConfig,
176176
url: str,
177177
username: str,
178178
password: str,
179-
user_agent: str| None) -> LoginStorage:
179+
user_agent: str| None,) -> LoginStorage:
180180
""" Log in using OAUTH2 resource owner password flow """
181181
# Do not allow IPV6 which doesn't work in some of our configurations
182182
urllib3.util.connection.HAS_IPV6 = False
183183

184184
headers = {}
185185
if user_agent:
186186
headers['User-Agent'] = user_agent
187-
token_endpoint = config.token_or_default(url)
187+
login_info = fetch_login_info(url)
188+
token_endpoint = config.token_endpoint or login_info['token_endpoint']
188189
result = requests.post(token_endpoint, data={
189-
'client_id': config.client_id,
190+
'client_id': config.client_id or login_info['client_id'],
190191
'username': username,
191192
'password': password,
192193
'grant_type': 'password',

0 commit comments

Comments
 (0)