fix(credentials): try cached credentials before prompting on login

Problem: `:CP <platform> login` always prompted for username and
password, even when valid credentials were already cached.

Solution: if cached credentials exist, attempt `scraper.login()`
with them first. On success, return immediately with no prompt. On
failure, fall through to `prompt_and_login()` for fresh input.
This commit is contained in:
Barrett Ruth 2026-03-07 02:20:54 -05:00
parent ffd40564bc
commit e6441ad630
Signed by: barrett
GPG key ID: A6C96C9349D2FC81

View file

@ -11,6 +11,43 @@ local STATUS_MESSAGES = {
installing_browser = 'Installing browser...',
}
---@param platform string
---@param display string
local function prompt_and_login(platform, display)
vim.ui.input({ prompt = display .. ' username: ' }, function(username)
if not username or username == '' then
logger.log('Cancelled', { level = vim.log.levels.WARN })
return
end
vim.fn.inputsave()
local password = vim.fn.inputsecret(display .. ' password: ')
vim.fn.inputrestore()
if not password or password == '' then
logger.log('Cancelled', { level = vim.log.levels.WARN })
return
end
local credentials = { username = username, password = password }
local scraper = require('cp.scraper')
scraper.login(platform, credentials, function(ev)
vim.schedule(function()
local msg = STATUS_MESSAGES[ev.status] or ev.status
logger.log(display .. ': ' .. msg, { level = vim.log.levels.INFO, override = true })
end)
end, function(result)
vim.schedule(function()
if result.success then
logger.log(display .. ' login successful', { level = vim.log.levels.INFO, override = true })
else
local err = result.error or 'unknown error'
logger.log(display .. ' login failed: ' .. err, { level = vim.log.levels.ERROR })
end
end)
end)
end)
end
---@param platform string?
function M.login(platform)
platform = platform or state.get_platform()
@ -24,31 +61,12 @@ function M.login(platform)
local display = constants.PLATFORM_DISPLAY_NAMES[platform] or platform
vim.ui.input({ prompt = display .. ' username: ' }, function(username)
if not username or username == '' then
logger.log('Cancelled', { level = vim.log.levels.WARN })
return
end
vim.fn.inputsave()
local password = vim.fn.inputsecret(display .. ' password: ')
vim.fn.inputrestore()
if not password or password == '' then
logger.log('Cancelled', { level = vim.log.levels.WARN })
return
end
cache.load()
local existing = cache.get_credentials(platform) or {}
local credentials = {
username = username,
password = password,
}
if existing.token then
credentials.token = existing.token
end
cache.load()
local existing = cache.get_credentials(platform) or {}
if existing.username and existing.password then
local scraper = require('cp.scraper')
scraper.login(platform, credentials, function(ev)
scraper.login(platform, existing, function(ev)
vim.schedule(function()
local msg = STATUS_MESSAGES[ev.status] or ev.status
logger.log(display .. ': ' .. msg, { level = vim.log.levels.INFO, override = true })
@ -56,17 +74,16 @@ function M.login(platform)
end, function(result)
vim.schedule(function()
if result.success then
logger.log(
display .. ' login successful',
{ level = vim.log.levels.INFO, override = true }
)
logger.log(display .. ' login successful', { level = vim.log.levels.INFO, override = true })
else
local err = result.error or 'unknown error'
logger.log(display .. ' login failed: ' .. err, { level = vim.log.levels.ERROR })
prompt_and_login(platform, display)
end
end)
end)
end)
return
end
prompt_and_login(platform, display)
end
---@param platform string?