dyc3 / steamguard-cli

A linux utility for generating 2FA codes for Steam and managing Steam trade confirmations.
GNU General Public License v3.0
545 stars 36 forks source link

Schema migration fails due to missing_field server_time #337

Closed spyfly closed 11 months ago

spyfly commented 11 months ago

Version

v0.12.2

What happened?

Schema Migration fails with the following error:

ERROR - Failed to migrate manifest: An unexpected error occurred during manifest migration: Failed to load some accounts: 
[
 DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 469) }),
 DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }),
 DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, 
 ...
]

Steps To Reproduce

Using a manifest.json which has been initialized with Steam Desktop Authenticator and extended with previous versions of steamguard-cli

Relevant log output

DEBUG - Args { global: GlobalArgs { username: None, password: None, all: false, mafiles_path: Some(".../maFiles"), passkey: None, verbosity: Debug, no_update_check: false, http_proxy: None, proxy_credentials: None, danger_accept_invalid_certs: false }, sub: None, code: CodeCommand { offline: false } }
INFO - reading manifest from .../maFiles
DEBUG - loading manifest: ".../maFiles/manifest.json"
INFO - Migrating manifest
DEBUG - deserializing manifest: version None
DEBUG - loading all accounts for migration
DEBUG - loading entry: ".../SDA/maFiles/steamname.maFile"
...
ERROR - Failed to migrate manifest: An unexpected error occurred during manifest migration: Failed to load some accounts: [DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 469) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 466) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 467) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 467) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 467) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 466) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 466) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 468) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 466) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 466) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 460) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 460) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 460) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 467) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 460) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 461) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 460) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 465) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 464) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 463) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 462) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 1519) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 1519) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 1519) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 1519) }), DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 1520) })]
...
DEBUG - Checking for updates to dyc3/steamguard-cli v0.12.2
DEBUG - No update available
dyc3 commented 11 months ago

So you initially created these maFiles with SDA, and continued using them with steamguard-cli, is that correct? What was the last version of steamguard-cli you used with these files before updating to 0.12.2?

dyc3 commented 11 months ago

Would you be able to pull down #338 to see if that makes it work? If it does, I'll publish a new release with it right away.

spyfly commented 11 months ago

Would you be able to pull down #338 to see if that makes it work? If it does, I'll publish a new release with it right away.

Thanks for the quick reaction.

Just built the version from the PR, still the same error:

ERROR - Failed to migrate manifest: An unexpected error occurred during manifest migration: Failed to load some accounts: [DeserializationFailed(Error { path: Path { segments: [] }, original: Error("missing field `server_time`", line: 1, column: 469) })
dyc3 commented 11 months ago

That's weird, I just created a unit test for this and it's passing. Can you post the full -v debug logs unabbreviated?

spyfly commented 11 months ago

That's weird, I just created a unit test for this and it's passing. Can you post the full -v debug logs unabbreviated?

Classical Layer 8 Error, I've used cargo to install using the toolchain instead of building from source.

So the PR can be merged, it fixes the issue.