Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
b765e63
Update README
iinuwa Jul 16, 2025
d1c6657
Remove bogus ViewEvent variant
iinuwa Jul 16, 2025
7cbf77e
Move shared models from view_model to model
iinuwa Jul 17, 2025
055cfee
Add D-Bus methods and serialization for decoupling UI from credential…
iinuwa Jul 17, 2025
f11c0a3
Advertise support for hybrid transport in client capabilities
iinuwa Jul 20, 2025
c2a3ac3
Do a whole bunch of stuff to move background events to credential client
iinuwa Jul 20, 2025
f4142b8
Send background events to UI from spawned tasks
iinuwa Jul 22, 2025
f0b7d00
Apply clippy lints to dbus.rs
iinuwa Jul 22, 2025
16b9df0
wip: Work on exposing scoped D-Bus services
iinuwa Jul 27, 2025
4be39e1
Update in-process client/server implementation with new methods
iinuwa Jul 29, 2025
b71c110
Apply lints
iinuwa Jul 29, 2025
7fb2679
Fix up D-Bus UI-cred service client
iinuwa Jul 30, 2025
8b5b6c3
wip: Attempt to wire up D-Bus client for UI
iinuwa Jul 30, 2025
892364f
Move shared types to model from gui
iinuwa Jul 30, 2025
b191109
Move GUI to separate Cargo project
iinuwa Jul 30, 2025
378caa0
Extract shared types into common library
iinuwa Jul 31, 2025
275413a
Change build target directories
iinuwa Aug 1, 2025
23d3475
Comment out creds-lib meson files
iinuwa Aug 1, 2025
0155dbe
Rename daemon to credsd
iinuwa Aug 1, 2025
191e1b0
wip: Launch UI process over D-Bus
iinuwa Aug 2, 2025
84cd7c8
Rename main service interface
iinuwa Aug 2, 2025
faeb80e
Apply Python format
iinuwa Aug 2, 2025
92d8746
Work on combining init_request/complete_auth into a single method cal…
iinuwa Aug 2, 2025
15e52ca
Move dbus.rs into dbus/mod.rs
iinuwa Aug 2, 2025
4c791a5
wip: Move D-Bus services into separate modules
iinuwa Aug 4, 2025
d86deb7
wip: Refactor gateway
iinuwa Aug 4, 2025
3f4cc1d
wip: Refactor flow_control
iinuwa Aug 4, 2025
7057536
wip: Refactor ui_control
iinuwa Aug 4, 2025
9fbdcec
Clean up
iinuwa Aug 4, 2025
ae49ac4
Make debugging in VS Code easier
iinuwa Aug 4, 2025
6e36f94
Call correct proxy method for USB flow
iinuwa Aug 4, 2025
deded30
Fix D-Bus deserialization for USB/Hybrid state
iinuwa Aug 4, 2025
f0784a8
Fix selection of multiple credentials
iinuwa Aug 5, 2025
2beae54
Complete request over D-Bus
iinuwa Aug 5, 2025
bc11100
Update D-Bus names in web extension
iinuwa Aug 5, 2025
d490fdd
Update webext docs
iinuwa Aug 5, 2025
3babaa6
Fix D-Bus tests
iinuwa Aug 5, 2025
d591301
Update references to xyz-iinuwa-credential-manager-portal-gtk
iinuwa Aug 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
run: meson test --interactive
working-directory: build/
- name: Check clippy recommendations
run: env CARGO_HOME=build/cargo-home cargo clippy --manifest-path xyz-iinuwa-credential-manager-portal-gtk/Cargo.toml --target-dir build/xyz-iinuwa-credential-manager-portal-gtk/src
run: env CARGO_HOME=build/cargo-home cargo clippy --manifest-path credsd/Cargo.toml --target-dir build/credsd/target/release
- name: Check formatting
run: cargo fmt --check
working-directory: xyz-iinuwa-credential-manager-portal-gtk
working-directory: credsd
29 changes: 24 additions & 5 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,35 @@
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'xicm-portal-gtk'",
"program": "${workspaceFolder}/build/xyz-iinuwa-credential-manager-portal-gtk/src/xyz-iinuwa-credential-manager-portal-gtk",
"name": "Debug Daemon (credsd)",
"program": "${workspaceFolder}/build/credsd/src/credsd",
"args": [],
"env": {
"GSETTINGS_SCHEMA_DIR": "${workspaceFolder}/build/xyz-iinuwa-credential-manager-portal-gtk/data",
"RUST_LOG": "xyz_iinuwa_credential_manager_portal_gtk=debug,libwebauthn=debug,libwebauthn::webauthn=debug,libwebauthn=warn,libwebauthn::proto::ctap2::preflight=debug,libwebauthn::transport::channel=debug"
"RUST_LOG": "credsd=debug,libwebauthn=debug,libwebauthn::webauthn=debug,libwebauthn=warn,libwebauthn::proto::ctap2::preflight=debug,libwebauthn::transport::channel=debug,zbus::object_server::debug,zbus=debug"
},
"sourceLanguages": ["rust"],
"cwd": "${workspaceFolder}",
"preLaunchTask": "Meson: Build all targets"
"preLaunchTask": "Meson: Build Daemon"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug UI (creds-ui)",
"program": "${workspaceFolder}/build/creds-ui/src/creds-ui",
"args": [],
"env": {
"GSETTINGS_SCHEMA_DIR": "${workspaceFolder}/build/creds-ui/data",
"RUST_LOG": "creds_ui=debug,zbus::trace,zbus::object_server::debug"
},
"sourceLanguages": ["rust"],
"cwd": "${workspaceFolder}",
"preLaunchTask": "Meson: Build UI"
},
],
"compounds": [
{
"name": "Server/Client",
"configurations": ["Debug UI (creds-ui)", "Debug Daemon (credsd)"]
}
]
}
61 changes: 32 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@
This project uses Meson and Ninja.

Package requirements:
- GTK4
- gettext
- libdbus-1
- libssl/openssl
- libudev
- desktop-file-utils

- GTK4
- gettext
- libdbus-1
- libssl/openssl
- libudev
- desktop-file-utils

For example, on Ubuntu:

```shell
sudo apt update && sudo apt install \
# Build dependencies
Expand All @@ -42,9 +44,10 @@ ninja -C build

```shell
# Run the server, with debug logging enabled
export GSETTINGS_SCHEMA_DIR=build/xyz-iinuwa-credential-manager-portal-gtk/data
export RUST_LOG=xyz_iinuwa_credential_manager_portal_gtk=debug
./build/xyz-iinuwa-credential-manager-portal-gtk/src/xyz-iinuwa-credential-manager-portal-gtk
export GSETTINGS_SCHEMA_DIR=build/creds-ui/data
export RUST_LOG=credsd=debug,creds_ui=debug
./build/credsd/target/debug/credsd &
./build/creds-ui/target/debug/creds-ui
```

### Clients
Expand All @@ -59,7 +62,6 @@ cd demo_client/

There is also a demo web extension that can be used to test the service in Firefox. Instructions are in [webext/README.md]().


## Goals

The goal of this repository is to define a spec for clients (apps, browsers,
Expand All @@ -77,37 +79,39 @@ Some high-level goals:
etc.) to hook into

Some nice-to-haves:

- Design a specification for a platform authenticator. I'm not sure whether this
needs to be specified, or whether it could be considered and implemented as a
first-party credential provider.
needs to be specified, or whether it could be considered and implemented as a
first-party credential provider.

Some non-goals:

- Fully implement the proposed specification. This repo is focused on defining
the D-Bus API for clients and portal frontend/backend implementations to use.
Though I would love to help implement, I don't think I will have the time to
fully implement the features specced by the API, so I welcome collaboration
from others to help implement. For now, any implementation in this repository
is for reference purposes.
- Fully integrate with any specific desktop environment. Each desktop
environment (GNOME, KDE, etc.) has its own UI and UX conventions, as well as
system configuration methods (e.g., GNOME Settings), which this API will need to integrate with.
Because of the variation, we intend to leave integration with these other
components to developers more familiar with each of the desktop environments.
For now, we are using bare GTK to build a UI for testing, but any UI
implementation in this repository is for reference purposes. If anyone is willing to do some of this integration work, feel free to contact us!

- Create a full-featured password manager. Features like Password syncing,
password generation, rotation, etc. is not part of this specficiation. Other
password manager projects should be able to use this to make their credentials
available to the user uniformly, though.
password generation, rotation, etc. is not part of this specficiation. Other
password manager projects should be able to use this to make their credentials
available to the user uniformly, though.

- BSD support. While I'd love to help out all open desktop environments, I don't
know enough about any BSD to make it useful for them. Hopefully, the design
process is transparent enough that someone else could design something that
works for BSDs.
- BSD support. While we'd love to help out all open desktop environments, we don't
know enough about any BSD to make it useful for them. Hopefully, the design
process is transparent enough that someone else could design something that
works for BSDs.

## Current Work

- April 2025: Added web extension for testing in Firefox.
- March 2025: Integrated libwebauthn to support USB authenticators.
- May 2024: Met with developers in GNOME and systemd to design internals for
securely storing device credentials.
- Jan 2024: I've defined the [scenarios](doc/scenarios.md) that I expect this
API to cover. I am working on extracting [API methods](doc/api.md) required to
- Jan 2024: Defined the [scenarios](doc/scenarios.md) that we expect this
API to cover. We are working on extracting [API methods](doc/api.md) required to
implement the interactions between the client, portal frontend, portal backend,
machine and mobile devices. Once that is done, I intend to convert the API into
a [portal spec](doc/design-doc.md), making it fit normal D-Bus/portal patterns.
Expand Down Expand Up @@ -141,9 +145,8 @@ Alternatively, lock out the credential based on incorrect attempts.
![](images/security-key-3.png)
![](images/end.png)



## Related projects:

- https://github.com/linux-credentials/libwebauthn (previously https://github.com/AlfioEmanueleFresta/xdg-credentials-portal)
- authenticator-rs
- webauthn-rs
2 changes: 1 addition & 1 deletion contrib/xyz.iinuwa.credentials.CredentialManager.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<arg type="s" direction="out"/>
</method>
</interface>
<interface name="xyz.iinuwa.credentials.CredentialManagerUi1">
<interface name="xyz.iinuwa.credentials.Credentials1">
<method name="CreateCredential">
<arg name="request" type="a{sv}" direction="in"/>
<arg type="a{sv}" direction="out"/>
Expand Down
Loading
Loading