eth-educators / ethstaker-deposit-cli

Secure key generation for deposits
https://eth-educators.github.io/ethstaker-deposit-cli/
Creative Commons Zero v1.0 Universal
3 stars 5 forks source link

Check terminal encoding #101

Closed yorickdowne closed 1 month ago

yorickdowne commented 1 month ago

Resolves #34

Changes

Checks for utf-8 terminal encoding on password strength check. If not utf-8 and the password isn't ASCII, ask the user to retype.

If the platform is not Windows, suggest to switch to a utf-8 terminal instead.

utf-8 terminal is not a standard on Windows, it uses "a zoo of code pages"

utf-8 console on Windows in Python is alas also not a thing. PEP528 has been around since 2016, don't hold your breath.

Types of changes

What types of changes does your code introduce?

Testing

Notes on testing

The reason this failed in the Windows runner for staking-deposit-cli was that they checked only for utf-8, and Windows does not do utf-8.

yorickdowne commented 1 month ago

So the question is - are we doing more harm than good. How much do we care about the zoo of code pages on Windows?

Windows Terminal can now do utf-8. That's always an option, just additional steps that will likely not be intuitive to the user.

We could also decide to not exit on Windows at all. And instead if it's not utf-8 and it's Windows, output a message that says "please stick to ASCII characters". WDYT?

github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   62     16    74%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          18      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          37      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               56      3    95%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         198     51    74%
-------------------------------------------------------------------------------
TOTAL                                                        1313    190    86%
github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   54     10    81%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          36      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               56      3    95%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         204     54    74%
-------------------------------------------------------------------------------
TOTAL                                                        1309    187    86%
github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   54     10    81%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          36      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               56      3    95%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         204     54    74%
-------------------------------------------------------------------------------
TOTAL                                                        1309    187    86%
github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   54     10    81%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          36      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               70      3    96%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         204     51    75%
-------------------------------------------------------------------------------
TOTAL                                                        1323    184    86%
github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   54     10    81%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          36      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               70      3    96%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         204     51    75%
-------------------------------------------------------------------------------
TOTAL                                                        1323    184    86%
github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   54     10    81%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          36      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               70      3    96%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         204     51    75%
-------------------------------------------------------------------------------
TOTAL                                                        1323    184    86%
github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                        Stmts   Miss  Cover
-------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                   0      0   100%
ethstaker_deposit/cli/__init__.py                               0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                     28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py             39      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py             62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py      66     15    77%
ethstaker_deposit/cli/generate_keys.py                         43      3    93%
ethstaker_deposit/cli/new_mnemonic.py                          26      0   100%
ethstaker_deposit/cli/partial_deposit.py                       61      5    92%
ethstaker_deposit/credentials.py                              197     68    65%
ethstaker_deposit/deposit.py                                   54     10    81%
ethstaker_deposit/exceptions.py                                 2      0   100%
ethstaker_deposit/key_handling/__init__.py                      0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py       0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py      90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py          17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py          36      0   100%
ethstaker_deposit/key_handling/keystore.py                    100      0   100%
ethstaker_deposit/settings.py                                  22      1    95%
ethstaker_deposit/utils/__init__.py                             0      0   100%
ethstaker_deposit/utils/ascii_art.py                            2      0   100%
ethstaker_deposit/utils/click.py                               70      3    96%
ethstaker_deposit/utils/config.py                               3      0   100%
ethstaker_deposit/utils/constants.py                           27      0   100%
ethstaker_deposit/utils/crypto.py                              29      1    97%
ethstaker_deposit/utils/deposit.py                              9      0   100%
ethstaker_deposit/utils/exit_transaction.py                    24      0   100%
ethstaker_deposit/utils/file_handling.py                        8      0   100%
ethstaker_deposit/utils/intl.py                                54      3    94%
ethstaker_deposit/utils/ssz.py                                 50      6    88%
ethstaker_deposit/utils/validation.py                         204     51    75%
-------------------------------------------------------------------------------
TOTAL                                                        1323    184    86%