1
0
Fork 0
mirror of https://codeberg.org/tyy/aspm synced 2024-12-24 04:09:28 -07:00

Compare commits

..

No commits in common. "afa8eb79b3cee865ffb3d740c293baaf8340e5a1" and "cf6bbfeecf6df67f7124bd47b5206e8578ab4a83" have entirely different histories.

30 changed files with 611 additions and 1193 deletions

1636
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,43 @@
[package]
name = "aspm"
authors = ["Ty"]
description = "A tool to manage ariadne signature profiles, implementing v0 of the specification"
repository = "https://codeberg.org/tyy/aspm"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[workspace] [workspace]
members = ["crates/*"] members = ["crates/*"]
resolver = "2"
[dependencies]
anyhow = "1.0.79"
app_dirs2 = "2.5.5"
clap = { version = "4.4.18", features = ["derive", "unstable-styles", "env"] }
thiserror = "1.0.56"
asp = { path = "crates/asp" }
indoc = "2.0.4"
anstyle = "1.0.4"
dialoguer = { version = "0.11.0", features = ["password"] }
argon2 = { version = "0.5.3", features = ["std"] }
data-encoding = "2.5.0"
sea-orm = { version = "0.12.12", features = ["sqlx-sqlite", "runtime-tokio-rustls"] }
async-trait = "0.1.77"
tokio = "1.35.1"
clap-stdin = "0.4.0"
gpgme = { version = "0.11.0", optional = true }
sequoia-openpgp = { version = "1.18.0", optional = true }
josekit = { version = "0.8.5" }
aes-gcm = "0.10.3"
migrations = { path = "crates/migrations" }
scrypt = "0.11.0"
serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.114"
[features]
gpg-compat = ["dep:gpgme", "dep:sequoia-openpgp"]
default = ["gpg-compat"]
[profile.release] [profile.release]
strip = true strip = true

View file

@ -1,17 +1,5 @@
# aspm # aspm
This is the **A**riadne **S**ignature **P**rofile **M**anager, a command line program and rust library implementing the [Ariadne Signature Profile specification v0](https://ariadne.id/related/ariadne-signature-profile-0/). Currently, it is updated to the latest version of the spec as of [ariadne/ariadne-identity-specification@92f280bf83](https://codeberg.org/ariadne/ariadne-identity-specification/commit/92f280bf83e2d5957e5a53a6f1b6974bc975517d). This is setup as a cargo workspace with multiple crates, which are all explained below This is the **A**riadne **S**ignature **P**rofile **M**anager, a command line program and rust library implementing the [Ariadne Signature Profile specification v0](https://ariadne.id/related/ariadne-signature-profile-0/). Currently, it is updated to the latest version of the spec as of [ariadne/ariadne-identity-specification@92f280bf83](https://codeberg.org/ariadne/ariadne-identity-specification/commit/92f280bf83e2d5957e5a53a6f1b6974bc975517d).
# Crates The command line program is located in `src/`, and the library it uses to do ASP-related things (like creating and signing profiles, or generating keys) is located in `crates/asp`.
## aspm
The main binary crate, featuring all user-facing CLI code. This crate does not contain any actual ASP logic, but rather utilizes the `asp` crate for operations such as generating keys, signing profiles, etc.
## asp
The main libary crate, which provides APIs for interfacing with ASP keys, profiles, and exchange servers. This is mainly used by the `aspm` CLI crate, however it could hypothetically be used by other projects (or even a future GUI!)
## migrations
A crate which soley contains database migrations for the `aspm` CLI crate. It contains both a library interface and a binary which can be used to manipulate existing databases.

View file

@ -7,16 +7,16 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
anyhow = "1.0.86" anyhow = "1.0.71"
data-encoding = "2.6.0" data-encoding = "2.4.0"
hex_color = { version = "3.0.0", features = ["serde"] } hex_color = { version = "2.0.0", features = ["serde"] }
josekit = "0.8.6" josekit = "0.8.3"
openssl = "0.10.64" openssl = "0.10.55"
reqwest = "0.12.5" reqwest = "0.11.18"
serde = { version = "1.0.204", features = ["derive"] } serde = { version = "1.0.164", features = ["derive"] }
serde-email = "3.0.1" serde-email = "2.0.0"
serde_json = { version = "1.0.120", features = ["preserve_order"] } serde_json = { version = "1.0.99", features = ["preserve_order"] }
sha2 = "0.10.8" sha2 = "0.10.7"
thiserror = "1.0.61" thiserror = "1.0.40"
tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] } tokio = { version = "1.28.2", features = ["macros", "rt-multi-thread"] }
url = { version = "2.5.2", features = ["serde"] } url = { version = "2.4.0", features = ["serde"] }

View file

@ -1,44 +0,0 @@
[package]
name = "aspm-cli"
authors = ["Ty"]
description = "A tool to manage ariadne signature profiles, implementing v0 of the specification"
repository = "https://codeberg.org/tyy/aspm"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "aspm"
path = "src/main.rs"
[dependencies]
anyhow = "1.0.86"
app_dirs2 = "2.5.5"
clap = { version = "4.5.8", features = ["derive", "unstable-styles", "env"] }
thiserror = "1.0.61"
asp = { path = "../asp" }
indoc = "2.0.5"
anstyle = "1.0.7"
dialoguer = { version = "0.11.0", features = ["password"] }
argon2 = { version = "0.5.3", features = ["std"] }
data-encoding = "2.6.0"
sea-orm = { version = "0.12.15", features = ["sqlx-sqlite", "runtime-tokio-rustls"] }
async-trait = "0.1.81"
tokio = "1.38.0"
clap-stdin = "0.5.0"
gpgme = { version = "0.11.0", optional = true }
sequoia-openpgp = { version = "1.21.1", optional = true }
josekit = { version = "0.8.6" }
aes-gcm = "0.10.3"
migrations = { path = "../migrations" }
scrypt = "0.11.0"
serde = { version = "1.0.204", features = ["derive"] }
serde_json = "1.0.120"
[dev-dependencies]
assert_cmd = "2.0.14"
predicates = "3.1.0"
tempfile = "3.10.1"
[features]
gpg-compat = ["dep:gpgme", "dep:sequoia-openpgp"]
default = ["gpg-compat"]

View file

@ -1,33 +0,0 @@
use anyhow::Context;
use assert_cmd::prelude::*;
use predicates::prelude::*;
use tempfile::TempDir;
use std::process::Command;
#[test]
fn help_prints_correctly() -> Result<(), anyhow::Error> {
let tempdir = TempDir::new()?;
let datadir = tempdir.path().to_str().context("Tempdir path was not valid utf8")?;
Command::cargo_bin("aspm")?
.env("ASPM_DATA_DIR", datadir)
.arg("--help")
.assert()
.success()
.stdout(predicate::str::starts_with(env!("CARGO_PKG_DESCRIPTION")));
Command::cargo_bin("aspm")?
.env("ASPM_DATA_DIR", datadir)
.arg("-h")
.assert()
.success()
.stdout(predicate::str::starts_with(env!("CARGO_PKG_DESCRIPTION")));
Command::cargo_bin("aspm")?
.env("ASPM_DATA_DIR", datadir)
.assert()
.code(2)
.stderr(predicate::str::starts_with(env!("CARGO_PKG_DESCRIPTION")));
Ok(())
}

View file

@ -6,5 +6,5 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
sea-orm-migration = { version = "0.12.15", features = ["sqlx-sqlite", "runtime-tokio-rustls"] } sea-orm-migration = { version = "0.12.14", features = ["sqlx-sqlite", "runtime-tokio-rustls"] }
tokio = { version = "1.38.0", features = ["rt-multi-thread", "macros"] } tokio = { version = "1.36.0", features = ["rt-multi-thread", "macros"] }

View file

@ -130,7 +130,7 @@ impl AspmSubcommand for ProfilesCreateCommand {
avatar_url: ActiveValue::Set( avatar_url: ActiveValue::Set(
profile.avatar_url.map(|avatar_url| avatar_url.to_string()), profile.avatar_url.map(|avatar_url| avatar_url.to_string()),
), ),
color: ActiveValue::Set(profile.color.map(|color| color.display_rgb().to_string())), color: ActiveValue::Set(profile.color.map(|color| color.to_string())),
key: ActiveValue::Set(keys[key_index].fingerprint.clone()), key: ActiveValue::Set(keys[key_index].fingerprint.clone()),
}) })
.exec(&state.db) .exec(&state.db)

View file

@ -76,7 +76,7 @@ impl AspmSubcommand for ProfilesImportCommand {
.into_active_value(), .into_active_value(),
color: profile color: profile
.color .color
.map(|color| color.display_rgb().to_string()) .map(|color| color.to_string())
.into_active_value(), .into_active_value(),
}) })
.exec(&txn) .exec(&txn)