kwalletd5-wrapper 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/kwalletd5-wrapper.rb +166 -0
  3. 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: []