kwalletd5-wrapper 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/kwalletd5-wrapper.rb +166 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c803e2108e1ffe1d78230bd0f7a3d3184a552150123c0d2c0fb0078bcf13577b
|
4
|
+
data.tar.gz: f46d867ad0a9bd900ccdb8f644be93dca6c6c58fbc27d82d129ae830fd95f334
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 449d64ef73077aa8669bff7e4d041216869fad6b701f7b72c48d47600696679b35611c65ddb2c594ae47302a3cf4828eb54ebf398ec65697f3ef6b427d01effc
|
7
|
+
data.tar.gz: 4af62b72313eb951cac0f83e5eaf626375febd38d48d736c33db90d848916d6206575883dd850911332bea7753be2dd7d29582cc944fe7b98c13a1d7fe3ddc5d
|
@@ -0,0 +1,166 @@
|
|
1
|
+
#!/snap/bin/ruby
|
2
|
+
#
|
3
|
+
# Author: Eric Power
|
4
|
+
#
|
5
|
+
# Description:
|
6
|
+
# A module that provides an interface for communicating with the KDE wallet
|
7
|
+
# provided in Plasma 5.
|
8
|
+
#
|
9
|
+
# The interface is split into two categories:
|
10
|
+
# 1. A KwalletConnection
|
11
|
+
# initializing a KwalletConnection Object will ensure that the wallet
|
12
|
+
# is open (KWallet will prompt the user if required), and make reading
|
13
|
+
# and writing from that wallet easy.
|
14
|
+
# 2. Direct functions
|
15
|
+
# These functions provide tools to interact with KDE Wallet outside
|
16
|
+
# of a particular wallet. This includes things like checking which
|
17
|
+
# wallets exist, creating new wallets, pinging the Kwallet daemon,
|
18
|
+
# setting priorities, and more.
|
19
|
+
#
|
20
|
+
# This module will raise StandardErrors if qdbus or kwalletd5 is not available
|
21
|
+
# on the local machine.
|
22
|
+
#
|
23
|
+
# All calls to this module will raise StandardErrors if the call to qdbus
|
24
|
+
# fails. Check the associated error message for information on why the call
|
25
|
+
# failed.
|
26
|
+
#
|
27
|
+
# Released under the MIT License.
|
28
|
+
# Full license at https://github.com/epwr/kwalletd5-ruby-interface/LICENSE
|
29
|
+
|
30
|
+
# Dependencies
|
31
|
+
require 'open3'
|
32
|
+
|
33
|
+
if `which kwalletd5 2>&1` == ""
|
34
|
+
raise "Kwalletd5 Ruby Interface requires `kwalletd5` be installed on your system."
|
35
|
+
elsif `which qdbus 2>&1` == ""
|
36
|
+
raise "Kwalletd5 Ruby Interface requires `qdbus` be installed on your system."
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
module KWalletd5
|
41
|
+
|
42
|
+
# KWalletConnection
|
43
|
+
# Used to either open or create a wallet. The user will be prompted if KDE
|
44
|
+
# Wallet requires their authorization. The prompt will include app_name,
|
45
|
+
# so make sure that the user will recognize your app_name.
|
46
|
+
class KWalletConnection
|
47
|
+
|
48
|
+
def initialize(wallet_name, app_name, window_id: "0")
|
49
|
+
# TODO: explain window_id here.
|
50
|
+
@app_name = app_name
|
51
|
+
@wallet_id = message_kwd5("open", wallet_name, window_id, app_name)
|
52
|
+
@wallet_name = wallet_name
|
53
|
+
end
|
54
|
+
|
55
|
+
def replace_key(folder, old_key, new_key)
|
56
|
+
message_kwd5("renameEntry", @wallet_id, folder, old_key, new_key, @app_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
def list_keys(folder)
|
60
|
+
message_kwd5("entryList", @wallet_id, folder, @app_name).split("\n")
|
61
|
+
end
|
62
|
+
|
63
|
+
def does_key_exist(folder, key)
|
64
|
+
message_kwd5("entryList", @wallet_id, folder, @app_name).split("\n").include?(key)
|
65
|
+
end
|
66
|
+
|
67
|
+
def write_entry(folder, key, value)
|
68
|
+
message_kwd5("writeEntry", @wallet_id, folder, key, value, @app_name)
|
69
|
+
end
|
70
|
+
|
71
|
+
def lookup_entry(folder, key)
|
72
|
+
message_kwd5("readEntry", @wallet_id, folder, key, @app_name)
|
73
|
+
end
|
74
|
+
|
75
|
+
def delete_entry(folder, key)
|
76
|
+
message_kwd5("removeEntry", @wallet_id, folder, key, @app_name)
|
77
|
+
end
|
78
|
+
|
79
|
+
def write_password(folder, key, value)
|
80
|
+
message_kwd5("writePassword", @wallet_id, folder, key, value, @app_name)
|
81
|
+
end
|
82
|
+
|
83
|
+
def lookup_password(folder, key)
|
84
|
+
message_kwd5("readPassword", @wallet_id, folder, key, @app_name)
|
85
|
+
end
|
86
|
+
|
87
|
+
def write_map(folder, key, value)
|
88
|
+
message_kwd5("writeMap", @wallet_id, folder, key, value, @app_name)
|
89
|
+
end
|
90
|
+
|
91
|
+
def lookup_map(folder, key)
|
92
|
+
message_kwd5("readMap", @wallet_id, folder, key, @app_name)
|
93
|
+
end
|
94
|
+
|
95
|
+
def create_folder(folder)
|
96
|
+
message_kwd5("createFolder", @wallet_id, folder, @app_name)
|
97
|
+
end
|
98
|
+
|
99
|
+
def delete_folder(folder)
|
100
|
+
message_kwd5("removeFolder", @wallet_id, folder, @app_name)
|
101
|
+
end
|
102
|
+
|
103
|
+
def list_folders
|
104
|
+
message_kwd5("folderList", @wallet_id, @app_name)
|
105
|
+
end
|
106
|
+
|
107
|
+
def does_folder_exist(folder)
|
108
|
+
message_kwd5("hasFolder", @wallet_id, folder, @app_name) == "true"
|
109
|
+
end
|
110
|
+
|
111
|
+
def is_open
|
112
|
+
msg = message_kwd5("isOpen", @wallet_name) == "true"
|
113
|
+
end
|
114
|
+
|
115
|
+
def close!
|
116
|
+
message_kwd5("close", @wallet_id, true, @app_name)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Direct Functions
|
121
|
+
|
122
|
+
def change_wallet_password(wallet_name, app_name, window_id: "0")
|
123
|
+
# Kwalletd5 returns "-1" if the prompt opens properly. No way of telling if
|
124
|
+
# the password was actually changed (at least not via qdbus).
|
125
|
+
message_kwd5("changePassword", wallet_name, app_name, window_id) == "-1"
|
126
|
+
end
|
127
|
+
|
128
|
+
def list_wallets
|
129
|
+
message_kwd5("wallets")
|
130
|
+
end
|
131
|
+
|
132
|
+
def list_users(wallet_name)
|
133
|
+
message_kwd5("users", wallet_name)
|
134
|
+
end
|
135
|
+
|
136
|
+
def delete_wallet(wallet_name)
|
137
|
+
message_kwd5("deleteWallet", wallet_name)
|
138
|
+
end
|
139
|
+
|
140
|
+
def is_wallet_open(wallet_name)
|
141
|
+
message_kwd5("isOpen", wallet_name) == "true"
|
142
|
+
end
|
143
|
+
|
144
|
+
def does_wallet_exist(wallet_name)
|
145
|
+
message_kwd5("wallets").split("\n").include?(wallet_name)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Private helper functions
|
149
|
+
|
150
|
+
private
|
151
|
+
def message_kwd5(method, *args, path: "/modules/kwalletd5")
|
152
|
+
# TODO: Test if capture3 handles escaping characters.
|
153
|
+
# TODO: handle the case where a string contains "\;" already (escape both?)
|
154
|
+
# args.each{ |arg| arg.split(";").join("\;") }
|
155
|
+
stdout, stderr, status = Open3.capture3("qdbus org.kde.kwalletd5 #{path} #{method} #{args.join(" ")}")
|
156
|
+
unless stderr == ""
|
157
|
+
raise stderr + " -- ran: qdbus org.kde.kwalletd5 #{path} #{method} #{args.join(" ")}"
|
158
|
+
end
|
159
|
+
unless status == 0
|
160
|
+
raise "Method call returned error code: #{status}. stdout = '#{stdout}', stderr = '#{stderr}'" +
|
161
|
+
" -- ran: qdbus org.kde.kwalletd5 #{path} #{method} #{args.join(" ")}"
|
162
|
+
end
|
163
|
+
stdout.strip()
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kwalletd5-wrapper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eric Power
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-09-09 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A gem that provides access to as much of the kwalletd5 api as could be
|
14
|
+
useful.
|
15
|
+
email: ericpower@outlook.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/kwalletd5-wrapper.rb
|
21
|
+
homepage: https://github.com/epwr/kwalletd5-ruby-wrapper
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubygems_version: 3.2.22
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: A gem that provides access to the kwalletd5 dbus api.
|
44
|
+
test_files: []
|