• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IJHack / QtPass / 32880739204
64%

Build:
DEFAULT BRANCH: main
Ran 25 Aug 2026 06:01PM UTC
Jobs 1
Files 88
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

25 Aug 2026 05:55PM UTC coverage: 64.257% (+1.4%) from 62.904%
32880739204

push

github

web-flow
feat: native RFC 6238 TOTP, replacing the pass-otp shell-out (#1625)

* feat: implement native TOTP storage and generation for the OTP field

QtPass advertised OTP support, but it was only a shell-out to the
third-party pass-otp extension: RealPass::OtpGenerate ran `pass otp`,
ImitatePass::OtpGenerate was a stub, ConfigDialog disabled the feature
when the extension was missing and hid the checkbox entirely on Windows,
and updateOtpButtonVisibility() hid the toolbar action on Windows and
macOS. OTP therefore never worked on Windows, never worked in
gpg2/git-direct mode, and needed a Unix package most users lack.

Generate one-time passwords in-process instead, using only QtCore
(QMessageAuthenticationCode + QCryptographicHash), so no dependency is
added. The configuration is stored as an otpauth:// URI in the OTP
template field, and bare otpauth:// lines written by pass-otp are still
read for compatibility.

New modules, ported and trimmed from KeePassXC:

- Base32 (src/base32.*): RFC 4648 codec. Failure is an empty QByteArray
  rather than KeePassXC's QVariant-nullness idiom. Two fixes over the
  original: encode() no longer sign-extends bytes >= 0x80 (which
  corrupted neighbouring bytes of the 40-bit quantum), and decode()
  rejects impossible pad counts instead of returning wrong-length data.
- Totp (src/totp.*): RFC 6238, SHA-1/256/512 plus the Steam encoder.
  parse() returns std::optional<Settings> and validates everything, so
  Settings is valid by construction and generate() cannot fail — this
  replaces KeePassXC's "return the localized error string in place of
  the code, plus a bool* out-param" convention. Also fixes its modulus
  overflow at ten digits (pow() into a quint32), applies the digits and
  period clamps on every path, and rejects otpauth://hotp/, which
  KeePassXC would answer with a plausible-looking wrong code.
- OtpCodeWidget (src/otpcodewidget.*): the live row. Its refresh timer
  is a child of the widget it updates, so Pass... (continued)

409 of 502 new or added lines in 11 files covered. (81.47%)

38 existing lines in 6 files now uncovered.

4622 of 7193 relevant lines covered (64.26%)

56.35 hits per line

Uncovered Changes

Lines Coverage ∆ File
47
35.15
0.32% src/mainwindow.cpp
31
72.97
-13.16% src/passworddialog.cpp
6
95.28
src/totp.cpp
4
0.0
src/qtcompat.h
3
57.79
1.15% src/qtpass.cpp
1
98.0
src/otpcodewidget.cpp
1
85.21
4.08% src/passworddisplaypanel.cpp

Coverage Regressions

Lines Coverage ∆ File
20
35.11
-0.38% src/moc_mainwindow.cpp
9
0.0
0.0% src/qrc_qmake_qmake_qm_files.cpp
4
86.31
-1.52% src/qtpasssettings.cpp
3
35.15
0.32% src/mainwindow.cpp
1
41.76
-0.59% src/moc_pass.cpp
1
57.79
1.15% src/qtpass.cpp
Jobs
ID Job ID Ran Files Coverage
1 32880739204.1 25 Aug 2026 06:01PM UTC 88
64.26
GitHub Action Run
Source Files on build 32880739204
  • Tree
  • List 88
  • Changed 20
  • Source Changed 16
  • Coverage Changed 13
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32880739204
  • 00182f43 on github
  • Prev Build on main (#28701231107)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc