11 个版本
0.1.10 | 2022年9月22日 |
---|---|
0.1.9 | 2022年3月24日 |
#43 in #server-client
68KB
1.5K SLoC
KVS
Key Value Services 是一个 cli 工具,帮助你创建键值存储服务。
动机
我想创建一个内容共享工具,这个工具只能由一个人管理,在安全的网络环境中可以被许多人阅读,这样我就可以在终端中使用一些常用内容。
安装
cargo install key_value_service
警告
此项目仍处于开发初期,仅用作开发工具。请勿在生产环境中用于数据存储。如果您有此类要求,建议您使用 redis。一些 API 将会不经通知进行破坏性更改。
用法
- 在服务器上启动 kvs
> kvs start
2022-03-18T15:59:26.503861Z INFO starting with 0.0.0.0:8888 successfully!
- 从客户端登录 kvs 服务
> kvs -r 0.0.0.0:8888 login
2022-03-18T16:05:05.022305Z INFO Token: FAAAAAAAAACUH40t6d+A9jzhexGHktUINvWwL317xp1/AQAAFAAAAAAAAACrtlLcjeSqhMZCj5rnNn2hkf0K/w==
2022-03-18T16:05:05.022393Z INFO Save Token file to: .kvs/token
- 创建一个私有密钥值
> kvs create foo "hello world"
默认情况下,kvs 将使用您本地的 priv_key
对值进行加密。远程端仅判断密钥的所有者。解密过程需要由客户端自行完成。
- 读取一个键
> kvs read foo
hello world
- 创建一个公开密钥值
> kvs create priv_foo "priv hello world" -p
如果您仅这样做,kvs 将发送值并将值以明文形式保存在远程端。
- 读取一个私有密钥
> kvs cat priv_foo
priv hello world
- 删除一个键
> kvs delete priv_foo
您只能删除属于您自己的键。
- 更新一个键
kvs create priv_foo "this is change data"
kvs read priv_foo
this is change data
- 显示远程信息
> kvs remote
0.1.3
- 显示本地信息
> kvs local
scope: 0x4d7153428dd617a410f114468d212a9cd1b7ccd0
pub: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD9qWAweIhnLfBdjYj8oty1z2FYycQ8qhebrDLCQBJPTF1IfV282WCHET7Fsjd1C9+XMbW2xT0f73cZgSExgILeGjZFlx9gEf5VVJyBezfQ6yU2V9Emo58zRh6fjfoBGUsXmVIJIGCpnVjHg/ECEVKuDVQ3h0SEHrdxE98bSl9RIQIDAQAB
- 读取其他作用域的键
> kvs read -s 0xad359ae3e478342ed2b5512ed7ff4ebb3ceb2dd test_pub
pub content
- 重启 kvs 服务器
> kvs restart
- 停止 kvs 服务器
> kvs stop
- 删除所有键
> kvs list | awk -F '\t' '{print "kvs delete " $2}' | bash
示例
案例1:同步一个团队的信息
您的团队有一个庞大的资源 ID 列表。
# important_resource_id.txt
...
A7EB0B7B-3E27-4531-B239-750300EE8D0C
B9164246-49E3-45F1-A8CE-D871CEBE3971
92312D9B-B2D8-4A92-B7B5-9A5491FF9BEC
8E1B24ED-0023-45E0-BF34-1548C8D8884D
...
有时,团队成员需要根据这个大列表创建 URL。
# important_resource_urls.txt
...
http://xxx.xxx.xxx.xxx/app/goods/A7EB0B7B-3E27-4531-B239-750300EE8D0C
http://xxx.xxx.xxx.xxx/app/goods/B9164246-49E3-45F1-A8CE-D871CEBE3971
http://xxx.xxx.xxx.xxx/app/goods/92312D9B-B2D8-4A92-B7B5-9A5491FF9BEC
http://xxx.xxx.xxx.xxx/app/goods/8E1B24ED-0023-45E0-BF34-1548C8D8884D
...
假设我们已经编写了一个名为 transform
的命令行工具来处理这种情况。
cat important_resource_urls.txt | transform
问题是,我如何与其他团队成员共享 important_resource_urls.txt
。
当然,有很多方法可以共享它。但如果你使用 kvs
,你可以快速完成它。
# create the key
kvs create important_resource_urls -f important_resource_urls.txt
# and then, other team member can use it.
kvs read important_resource_urls | transform
案例1:公开同步信息
curl https://xxx/a.json | json "important" | kvs create important -f -p
kvs read important -s your_scope
案例2:证明自己的身份
您可以将您的 pub key
追踪到某些网站上。
> kvs local
scope: 0x4d7153428dd617a410f114468d212a9cd1b7ccd0
pub: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD9qWAweIhnLfBdjYj8oty1z2FYycQ8qhebrDLCQBJPTF1IfV282WCHET7Fsjd1C9+XMbW2xT0f73cZgSExgILeGjZFlx9gEf5VVJyBezfQ6yU2V9Emo58zRh6fjfoBGUsXmVIJIGCpnVjHg/ECEVKuDVQ3h0SEHrdxE98bSl9RIQIDAQAB
网站会追踪您的一个密文。
website: (your pub key) + (random value) -> (cipher text)
现在您可以使用 kvs de
命令来解密(密文)
> kvs de (cipher text)
(random value)
将(随机值)追踪到网站上。您将向网站证明自己的身份。
路线图
社区
-
添加
sync
命令以同步一个目录中的所有文件,并使用相对目录作为键。 -
添加
list
命令以列出您范围内的所有键元。 -
添加
restart
命令以重新启动服务器。 -
添加
stop
命令以停止服务器。 -
添加
set
和get
命令以在客户端本地配置一些值。 -
添加
set
命令以设置客户端本地的配置。 -
在创建和上传命令中添加
--file
选项。 -
在
sync
命令中添加相同的选项,类似于create
和update
。 -
在
kvs local
中附加显示公钥。 -
添加
kvs de
命令以解密某些内容。默认使用本地私钥。 -
添加
kvs en
命令以加密某些内容。默认使用本地公钥。 -
在读取中移除
--scope
选项,您可以使用kvs read your_scope:some_key
来读取公钥。 -
添加
kvs set whitelist
命令来设置白名单。 -
添加
kvs search
命令以在不同的存储库中搜索某些内容。 -
修复创建和上传命令中的
--file
选项,可以不提供文件名,如果这样做,kvs 将使用标准输入的内容作为值。 -
添加服务器配置以配置存储后端。
-
添加单元测试和文档。
-
添加 GitHub Action 以发布二进制文件。 -
重构
Remote Action
模型。 -
重构
aes session
以成为aes stream
。 -
配置 Docker 容器。
-
``
商业
- 在共享密钥过程中添加 P2P。
- 构建一个免费的中央存储节点。
- 添加
upgrade
命令以同步远程kvs
命令行到客户端本地。
依赖关系
~16–26MB
~374K SLoC