This commit is contained in:
2024-07-31 16:16:48 +02:00
commit abe1a6f6d4
3 changed files with 994 additions and 0 deletions

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# Currently all i do is brainstorm
![img](./layout.svg)

119
layout.d2 Normal file
View File

@@ -0,0 +1,119 @@
ppassctl
ppassctl.Commands: {
shape: class
init
ls
grep
find
show
insert
edit
generate
rm
mv
cp
git
help
version
}
ppassctl -- ppassd: control via unix socket
ppassd
ppassd.Host: {
shape: class
PeerId: "libp2p.ID"
PublicKey: "libp2p.PubKey"
PrivateKey: "libp2p.PrivKey"
}
ppassd.Config: {
shape: class
+VaultCfgs: "[]VaultCfg"
}
ppassd.VaultCfg {
shape: class
peers: "[]Peer"
VaultId: "string" #PubSub Topic
}
ppassd.Peer {
shape: class
PeerId: "libp2p.ID"
PublicKey: "string"
}
ppassd.Vault: {
shape: class
Id: "string"
Keys: "[]Peer.PublicKey"
Add(p Password): "error"
Get(k string): "(Password, error)"
Modify(p Password): "error"
Remove(k string): "(bool, error)"
Exists(k string): "(bool)"
OnUpdate(handler func()): "error"
ctx: "context.Context"
ps: "*pubsub.PubSub"
topic: "*pubsub.Topic"
sub: "*pubsub.Subscription"
}
ppassd.PasswordStore: {
shape: class
Init(): "error"
Add(p Password): "error"
Get(k string): "(Password, error)"
Modify(p Password): "error"
Remove(k string): "(bool, error)"
Exists(k string): "(bool)"
NewVault(id string): "(Vault, error)"
Cfg: "Config"
Vaults: "[]Vaults"
Passwords: "[]Password"
Secrets: "[]GnuPGKey"
host: "Host"
}
ppassd.Password: {
shape: class
Key: "string"
Password: "string"
Vaults: "[]*Vault"
}
ppassd.PasswordStore -> PPassd.Host
ppassd.PasswordStore -> PPassd.Config
ppassd.Config -> PPassd.VaultCfg
ppassd.VaultCfg -> PPassd.Peer
ppassd.PasswordStore -> PPassd.Vault
ppassd.PasswordStore -> PPassd.Password: Load on Init()
Thoughts
Thoughts.explanation: |md
# Architecture
- The host is a libp2p node. It connects with Peers of the given VaultCfgs.
- The Vaults itself a basically pubsub topics that each hosts subscribes and publishes to.
- Vaults internally are just abstractions of the PasswordStore
- they are like a "view" onto certain passwords
- there they can modify, add, delete passwords too
- if a password is in multiple vaults, it should be updated too
- hosts do not have to be able to decrypt stored passwords
- for example it would be nice to have a dummy node that is always online, storing passwords
- but not able to decrypt them
|

872
layout.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 72 KiB