Compare commits

..

159 Commits

Author SHA1 Message Date
scito 66c68fd9ef fix Python 3.7 compatibility 2023-01-02 22:41:30 +01:00
scito 6cfbc10e69 build wheel 2023-01-02 22:18:54 +01:00
scito 064fe81b2e docker remove python3-opencv, but add required libs; add debug mode 2023-01-02 22:11:56 +01:00
scito cd5160f123 fix Alpine tests 2023-01-02 20:29:37 +01:00
scito e1c8568ba2 fix protoc generation 2023-01-02 19:28:11 +01:00
scito ef0fbc3586 update README 2023-01-02 19:09:28 +01:00
scito b86c4f9a61 add ignore duplicate entries option and add quiet test; fixed -k stdout 2023-01-02 17:30:46 +01:00
scito 722009b172 build: add generate result files option 2023-01-02 14:16:30 +01:00
scito 1c106150b0 sort docker imports 2023-01-02 13:53:29 +01:00
scito 77e23b4ae4 refactor cv2 window and logging
- increase font and cut if too long
- refactor logging
- extract key handling
- refactor big methods
2023-01-02 13:52:04 +01:00
scito fe3e371897 build: print restult at the end 2023-01-02 12:50:41 +01:00
scito 7c6d341270 rename github urls; update descriptions 2023-01-01 23:21:29 +01:00
scito 160a558825 some renaming and README updating 2023-01-01 22:47:12 +01:00
scito 8d8b993f12 add CV2 screenshot 2023-01-01 20:15:38 +01:00
scito e177f860e1 abort instead of assertion 2023-01-01 19:55:28 +01:00
scito 8545dab7a5 extract draw_box and print_text functions 2023-01-01 19:22:46 +01:00
scito 16047a5b15 fix test compatibility with Alpine Linux 2023-01-01 19:19:41 +01:00
scito 604c461549 rename to build.sh 2023-01-01 19:19:21 +01:00
scito f5acd1dee9 test docker locally after build, easier to reproduce 2023-01-01 17:56:06 +01:00
scito 1086e28056 fix pylint and mypy problems 2023-01-01 17:45:50 +01:00
scito 2c0cfd83ee docker: pip install -U 2023-01-01 17:38:08 +01:00
scito a3bda6ff8e make PYTHON workaround uniform 2023-01-01 17:25:24 +01:00
scito 67c4f737c4 do catch AssertionError in camera capture 2023-01-01 15:21:18 +01:00
scito fff74fc638 handle errors while reading QR from camera; log errors 2023-01-01 15:12:24 +01:00
scito 19c8e9df23 update docs 2023-01-01 10:03:44 +01:00
scito 13fcdcd022 fix problem of outdated colorama 2023-01-01 01:22:06 +01:00
scito 91b9b3671c ci: add missing colorama 2023-01-01 01:02:39 +01:00
scito be6b9c8a7c ci: mypy only for latest Python on ubuntu 2023-01-01 00:57:18 +01:00
scito 3d61f1d316 ci: use pip install -e . for smoke tests 2023-01-01 00:56:19 +01:00
scito a8559db6e0 ci: mypy only for latest Python on ubuntu 2023-01-01 00:52:28 +01:00
scito 9f725b227f ci: use requirements.txt for smoke tests 2023-01-01 00:48:52 +01:00
scito 869c404489 fix fileinput.input encoding only since Python 3.10 2023-01-01 00:41:11 +01:00
scito 003e122808 ignore types for stdout.reconfigure 2023-01-01 00:22:09 +01:00
scito b3fc854078 colored warn and error messages
- add log_warn() and log_error()
- adapt tests
2023-01-01 00:14:56 +01:00
scito fc1619d9c7 disable verbose unittest for Windows 2022-12-31 21:34:28 +01:00
scito 5be6e9c322 fix finput encoding problem on Windows 2022-12-31 21:27:40 +01:00
scito 739ae4c012 fix pytest.skipif 2022-12-31 21:16:19 +01:00
scito 1af6fe3161 fix camera type and enhance readme with pyzbar problem 2022-12-31 21:02:05 +01:00
scito e311386a15 skip verbose tests for windows as there are encoding problems 2022-12-31 20:42:40 +01:00
scito 496564a605 avoid AttributeError in tests
StringIO in tests do not have all attributes, ignore it
2022-12-31 20:19:21 +01:00
scito 6406fcaef7 set encoding to utf-8 for stdout, needed for Windows 2022-12-31 19:52:09 +01:00
scito 7bb92f00b2 avoid mypy problems for duplicate Final
src/extract_otp_secrets.py:63: error: Incompatible import of "Final"
(imported name has type "typing_extensions._SpecialForm", local name has type "typing._SpecialForm")
[assignment]
2022-12-31 19:42:53 +01:00
scito 965f721caf ci_docker: run smoke tests before building 2022-12-31 19:20:01 +01:00
scito 61cca0c476 import Final from __future__ for Python 3.7 2022-12-31 19:11:37 +01:00
scito ebd4d61f5f try workaround for Python 3.7: must use () for assignments 2022-12-31 19:06:57 +01:00
scito e058010be3 fix docker invalid tags from comments 2022-12-31 18:59:01 +01:00
scito 463a9851be try workaround for Python 3.7: avoid Final in tuple assignments 2022-12-31 18:55:16 +01:00
scito dcbb128e7c try workaround for Python 3.7: do not use Types in Final 2022-12-31 18:51:26 +01:00
scito 1b572fc9ab fix pipenv problem 2022-12-31 18:40:26 +01:00
scito c3e9883216 try workaround for Python 3.7 NORMAL_COLOR = 255, 0, 255 problem 2022-12-31 18:21:13 +01:00
scito 3f9f7d2b8a better formatting of help 2022-12-31 18:00:49 +01:00
scito 0212e54f42 ci: runs on windows, exclude linting for Python 3.7 2022-12-31 17:52:19 +01:00
scito 3558eba93b use detect_and_decode since qrreader is fixed 2022-12-31 17:30:24 +01:00
scito 5225af0621 update README with --qr option 2022-12-31 16:42:12 +01:00
scito 1f04dd71e2 allow to choose qr reader for images 2022-12-31 15:54:21 +01:00
scito 2dea161cdc add argument for initial setting of qr_mode 2022-12-31 12:44:16 +01:00
scito f731530f57 improve handling of wrong urls
- adapt tests
- improve messages for files
- show red box camera
2022-12-31 11:32:07 +01:00
scito 4c0bb8dc61 vscode debug: fix path to script: add missing src/ 2022-12-31 11:26:11 +01:00
scito ad9c4a22db ci_docker: upload to only one repo 2022-12-31 11:25:33 +01:00
scito 2cdf2480a0 make bulding docker optional in script 2022-12-31 11:25:02 +01:00
scito 5aa1a35b8f add licence label to docker images 2022-12-31 11:23:44 +01:00
scito 3f3903cc81 add version to PYTHON todos 2022-12-30 21:22:03 +01:00
scito 97e4f084cb mv docker extract_otp_secrets_no_qr_reader -> extract_otp_secrets_only_txt 2022-12-30 20:43:51 +01:00
scito 549c128fb7 renaming extract_otp_secret_keys -> extract_otp_secrets and test file names 2022-12-30 20:37:38 +01:00
scito 10ff533a42 downgrade opencv for macos in requirements.txt and Pipfile 2022-12-30 19:26:45 +01:00
scito 7eb6f036ab ci: tryout downgrade opencv for macos 2022-12-30 18:51:13 +01:00
scito 652ecf57f0 ci: workaround macOS pytest segfauls -> exclude macOS (2) 2022-12-30 18:33:26 +01:00
scito 9592e6ebfe ci: workaround macOS pytest segfauls -> exclude macOS 2022-12-30 18:29:23 +01:00
scito d6c285e59d ci: segfault: try python -m pytest 2022-12-30 18:23:31 +01:00
scito 5eed47364e ci: revert try out changes 2022-12-30 18:18:15 +01:00
scito 26e4632f90 ci: another try, install module 2022-12-30 18:14:16 +01:00
scito c84ca46861 ci: try to avoid random test failures 2022-12-30 18:09:25 +01:00
scito 63f5ab37c4 docu pyproject.toml 2022-12-30 18:02:22 +01:00
scito f97d7143c5 ci: fix mypy and pytest-cov after clean 2022-12-30 17:49:46 +01:00
scito 0566683203 reenable pytest --import-mode=importlib 2022-12-30 17:31:34 +01:00
scito ee404576d5 set package_dir=src and clean option 2022-12-30 17:14:49 +01:00
scito 60d7362eee add protobuf_generated_python to py-modules 2022-12-30 15:47:02 +01:00
scito 1beba7587f enable setuptools-git-versioning 2022-12-30 15:44:58 +01:00
scito 144c9e6320 fixes after change to src-layout 2022-12-30 15:31:41 +01:00
scito 3e4476e317 change to src-layout 2022-12-30 12:37:05 +01:00
scito 7f5d4b37ee initial pyproject.toml 2022-12-30 11:14:15 +01:00
scito 82e43172c3 update setup.py 2022-12-30 09:23:31 +01:00
scito 149a548610 upgrade opencv 4.7.0 & run program at the end 2022-12-30 08:14:13 +01:00
scito d8de89de36 improve README, add docker ci badge 2022-12-30 02:30:16 +01:00
scito 3c164fea28 coverage from yellowgreen to brightgreen 2022-12-30 02:01:10 +01:00
scito 23d8cfa151 ci: Pytest coverage comment only for 3.x and ubuntu-latest 2022-12-30 01:58:54 +01:00
scito f5ee59368e python 3.7 compatibility: use TypedDict from typing_extensions 2022-12-30 01:44:11 +01:00
scito b2a877061c add typing_extensions for compatibility 2022-12-30 01:37:13 +01:00
scito c525c06480 quit on window close click 2022-12-30 01:22:12 +01:00
scito fb43c6793c type hinting fixes 2022-12-30 01:22:05 +01:00
scito 58fc1b85ac type compatibility for Python < 3.11 2022-12-30 01:07:39 +01:00
scito 04d864c093 add code coverage bade & ci: fix pytest-cov 2022-12-30 00:58:52 +01:00
scito 51094a1a18 use PathLike type instead of str | Path 2022-12-29 23:17:31 +01:00
scito a5768ba1e6 Workaround for PYTHON < 3.10: use Union[int, None] instead of int | None 2022-12-29 22:34:07 +01:00
scito faafb61241 fix type hint compatibility with Python < 3.11 2022-12-29 22:12:07 +01:00
scito d5a088135e ci: if matrix.python-version 2022-12-29 22:04:52 +01:00
scito 45a9693586 ci: fix if ${{ matrix.python-version }} 2022-12-29 21:58:44 +01:00
scito 66b41d86e6 ci: use ${{ }} for mypy python check 2022-12-29 21:52:54 +01:00
scito 89564448c6 ci: fix mypy if condition 2022-12-29 21:41:11 +01:00
scito 9ab33bd02b sort imports 2022-12-29 21:34:14 +01:00
scito f4ab540283 rename protobuf module as pb 2022-12-29 21:32:19 +01:00
scito 201e6510f8 add type hints (Python 3.11) 2022-12-29 21:29:20 +01:00
scito f933cd0d32 initial mypy type checking 2022-12-29 16:30:18 +01:00
scito f4389ca8a3 fix linting 2022-12-29 15:52:17 +01:00
scito b89a338246 enable mypy type checking 2022-12-29 14:24:12 +01:00
scito 631bacc409 use tmp_path fixture instead of clean_up() in pytests 2022-12-29 13:44:19 +01:00
scito 833afa7c13 use 3.11-slim-bullseye, add missing package 2022-12-29 11:50:19 +01:00
scito 4209a5db3d move abort to end, use SystemExit instead; improve colors 2022-12-29 11:18:57 +01:00
scito d9a4c7ca9f fix docker image digest 2022-12-29 04:36:31 +01:00
scito 829fe65b1e ci: pip install pytest-mock 2022-12-29 04:24:00 +01:00
scito c90526dcf2 fix undefined name 'abort' and 'qreader' 2022-12-29 04:15:36 +01:00
scito 47e84e4462 run docker capture version 2022-12-29 03:19:09 +01:00
scito b4931856ba apk add --no-cache nano zlib jpeg && re-enable tests 2022-12-29 02:34:29 +01:00
scito f532dc668d indent_size = 2 for yml 2022-12-29 01:59:54 +01:00
scito 1dee86668a rename ARG run_tests to RUN_TESTS 2022-12-29 01:48:00 +01:00
scito aa0de699fe disable tests for alpine 2022-12-29 01:43:22 +01:00
scito 7e684ff19e --build-arg run_tests=false 2022-12-29 01:35:43 +01:00
scito b159b9e70d apk add musl-dev and apk del .build-deps 2022-12-29 01:13:48 +01:00
scito 951878d027 apk add gcc 2022-12-29 01:02:41 +01:00
scito 2a44bbfa27 use $(apk --print-arch) 2022-12-29 00:53:47 +01:00
scito 540ae7438d use $(uname -m) 2022-12-29 00:42:13 +01:00
scito c346c085b6 apk add python3-dev py3-setuptools 2022-12-29 00:33:52 +01:00
scito 7cb3b2ac21 always apk add on alpine 2022-12-29 00:29:26 +01:00
scito 0eb5014eb0 ci_docker: add docker/setup-buildx-action@v2 2022-12-29 00:25:29 +01:00
scito d4f5eb243e change to "$TARGETARCH" == "arm64" 2022-12-29 00:02:14 +01:00
scito b05decc10f apk add zlib-dev jpeg-dev only for alpine linux/arm64 2022-12-28 23:58:09 +01:00
scito 21ebccbba5 apk add zlib-dev 2022-12-28 23:44:30 +01:00
scito 912825034f add zlib for alpine/arm64 docker image 2022-12-28 23:37:54 +01:00
scito 95e7d73173 mock no_args tests 2022-12-28 23:37:21 +01:00
scito 9f0872c2d0 extract from camera
- add help description
- use f-strings
- handle plural correctly
- rename methods, use otp_url instead of line
- remove importlib.util
- move cv2 imports to top
- remove unnecessary global delcarations
- group image tests
2022-12-28 22:43:40 +01:00
scito 7964c687f6 make running tests optional in docker build 2022-12-28 09:02:02 +01:00
scito 1d0b568b1e setup QEMU 2022-12-27 11:36:53 +01:00
scito aaa7bd3da1 build also on arm64 2022-12-27 10:34:32 +01:00
scito 5ab5f84ff3 add docker label for source 2022-12-27 01:11:36 +01:00
scito a4c4badd54 fix docker hub username 2022-12-27 00:57:49 +01:00
scito f272c35a1f enable docker push in ci_docker 2022-12-27 00:52:14 +01:00
scito e4e5271c0f github actions docker build no_qr_reader 2022-12-27 00:43:30 +01:00
scito 158564e79a fix to_bytes() mandatory byte_order 2022-12-27 00:18:37 +01:00
scito 672d18a5ca build docker images, run tests in docker build
- qreader_available flag
- echo commands in upgrade_deps.sh
2022-12-26 23:57:38 +01:00
scito 0490e227e1 docker image with qreader, 2nd image without qreader
- organize imports
- add qreader pytest.mark
- relaxed mode for pytest
- run tests in docker
- more tests
2022-12-26 18:31:09 +01:00
scito 2bcaa35251 organize imports 2022-12-25 11:00:15 +01:00
scito b0b4c29e7b improve README 2022-12-24 15:50:44 +01:00
scito e754befb52 refactor; update setup.py
more verbose logging
better error messages
2022-12-24 15:30:17 +01:00
scito 06b8efff62 add zypper and dnf for libzbar0 2022-12-24 05:31:17 +01:00
scito 5d0feacdba update README 2022-12-24 05:12:52 +01:00
scito 343520acb8 support multiple infiles 2022-12-24 04:48:12 +01:00
scito c2d7c905ff handle wrong stdin streams 2022-12-24 04:19:43 +01:00
scito bc329e24d5 renable libzbar 2022-12-24 03:29:14 +01:00
scito 4612ab6e7f catch zbar import error 2022-12-24 03:25:10 +01:00
scito 05db190de3 test qreader import 2022-12-24 03:12:06 +01:00
scito 0ad3c2d8ed change name to nightly tests 2022-12-24 03:06:03 +01:00
scito 31bb2909da fix ci jobs 2022-12-24 03:05:07 +01:00
scito c1a55fb874 test pypy only in nightly builds 2022-12-24 03:02:08 +01:00
scito 82da427d1a refactor code: extract method 2022-12-24 02:56:40 +01:00
scito af0d7ffd5d dynamic import of QReader
since this module has a dependency to zbar lib
2022-12-24 02:46:36 +01:00
scito 9a308b148f fix macOS ci 2022-12-24 02:37:16 +01:00
scito cd07851e30 install zbar lib 2022-12-24 02:29:43 +01:00
scito f4934192ae WIP 2022-12-24 01:59:35 +01:00
qwertyca 483fcc0163 Add the ability so provide an image file as the infile. If the file contains a QR code generated by Google Authenticator's "Transfer Accounts" function, it will be decoded directly in a single step. This is meant to help users who need to access their secrets from Google Authenticator but don't have a QR code decoder and don't want to use an online one due to security concerns. 2022-12-23 10:17:04 +01:00
4 changed files with 15 additions and 13 deletions
+1
View File
@@ -9,6 +9,7 @@ name: docker
on:
# run it on push to the default repository branch
push:
branches: [master]
schedule:
# Run weekly on default branch
- cron: '47 3 * * 6'
+9 -9
View File
@@ -1,4 +1,4 @@
# Extract TOTP/HOTP secrets from QR codes exported by two-factor authentication apps
# Extract secrets from QR codes exported by two-factor authentication apps
[![CI tests](https://github.com/scito/extract_otp_secrets/actions/workflows/ci.yml/badge.svg)](https://github.com/scito/extract_otp_secrets/actions/workflows/ci.yml)
![coverage](https://img.shields.io/badge/coverage-96%25-brightgreen)
@@ -13,15 +13,15 @@
---
The Python script `extract_otp_secrets.py` extracts one time password (OTP) secrets from QR codes exported by two-factor authentication (2FA) apps such as "Google Authenticator".
The exported QR codes from authentication apps can be read in three ways:
The export QR codes from authentication apps can be provided in three ways to this script:
1. Capture from the system camera using a GUI, _(new!)_
2. Read image files containing the QR codes, and _(new!)_
3. Read text files containing the QR code data generated by third-party QR readers.
1. Capture from the system camera in a GUI,
2. Image files containing the QR codes, and
3. Text files containing the QR code data generated by QR readers.
The secret and otp values can be exported to json or csv files, as well as printed or saved to PNG images.
**The project and the script were renamed from extract_otp_secret_keys to extract_otp_secrets in version 2.0.0.**
This script/project was renamed from extract_otp_secret_keys to extract_otp_secrets in version 2.0.0.
## Installation
@@ -518,10 +518,10 @@ FileNotFoundError: Could not find module 'libiconv.dll' (or one of its dependenc
* [ZBar](https://github.com/mchehab/zbar) is an open source software suite for reading bar codes from various sources, including webcams.
* [Aegis Authenticator](https://github.com/beemdevelopment/Aegis) is a free, secure and open source 2FA app for Android.
* [pyzbar](https://github.com/NaturalHistoryMuseum/pyzbar) is a good QR code reader Python module
* [OpenCV](https://docs.opencv.org/4.x/) (CV2) Open Source Computer Vision library with [opencv-python](https://github.com/opencv/opencv-python)
* [Python QReader](https://github.com/Eric-Canas/QReader) Python QR code readers
* [Android OTP Extractor](https://github.com/puddly/android-otp-extractor) can extract your tokens from popular Android OTP apps and export them in a standard format or just display them as QR codes for easy importing. [Requires a _rooted_ Android phone.]
* [Python QReader](https://github.com/Eric-Canas/QReader)
* [pyzbar](https://github.com/NaturalHistoryMuseum/pyzbar)
* [OpenCV](https://docs.opencv.org/4.x/) (CV2) Open Source Computer Vision library with [opencv-python](https://github.com/opencv/opencv-python)
***
+1 -1
View File
@@ -317,7 +317,7 @@ eval "$cmd"
# Build wheel
cmd="$PIP wheel ."
cmd="$PIP wheel .
if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi
eval "$cmd"
+4 -3
View File
@@ -2,6 +2,8 @@ from typing import Any
import pytest
from extract_otp_secrets import QRMode
def pytest_addoption(parser: pytest.Parser) -> None:
parser.addoption("--relaxed", action='store_true', help="run tests in relaxed mode")
@@ -15,7 +17,6 @@ def relaxed(request: pytest.FixtureRequest) -> Any:
def pytest_generate_tests(metafunc: pytest.Metafunc) -> None:
if "qr_mode" in metafunc.fixturenames:
all_qr_modes = ['ZBAR', 'QREADER', 'QREADER_DEEP', 'CV2', 'CV2_WECHAT']
number = 2 if metafunc.config.getoption("fast") else len(all_qr_modes)
qr_modes = [mode for mode in all_qr_modes]
number = 2 if metafunc.config.getoption("fast") else len(QRMode)
qr_modes = [mode.name for mode in QRMode]
metafunc.parametrize("qr_mode", qr_modes[0:number])