Class: CliController
Instance Attribute Summary collapse
Attributes included from Myer::Config
#config_dir, #data_dir
Instance Method Summary
collapse
#default_server, #default_server=, define_attribute, #initialize_config, #local_csv_path, #read_config, #server, #servers, #subdirectory, #write_config
Constructor Details
Returns a new instance of CliController.
6
7
8
9
10
|
# File 'lib/myer/cli_controller.rb', line 6
def initialize
@out = STDOUT
initialize_config
@crypto = Crypto.new
end
|
Instance Attribute Details
#crypto ⇒ Object
Returns the value of attribute crypto.
4
5
6
|
# File 'lib/myer/cli_controller.rb', line 4
def crypto
@crypto
end
|
#out ⇒ Object
Returns the value of attribute out.
4
5
6
|
# File 'lib/myer/cli_controller.rb', line 4
def out
@out
end
|
Instance Method Details
#api(server_name = default_server) ⇒ Object
12
13
14
15
16
17
18
19
20
|
# File 'lib/myer/cli_controller.rb', line 12
def api(server_name = default_server)
api = MySelf::Api.new
api.server = server_name
if server(server_name)
api.user = server(server_name).user_id
api.password = server(server_name).user_password
end
api
end
|
#consume_ticket(ticket_source_path) ⇒ Object
171
172
173
174
175
176
177
178
179
180
181
|
# File 'lib/myer/cli_controller.rb', line 171
def consume_ticket(ticket_source_path)
read_config
ticket_target_path = File.join(config_dir, File.basename(ticket_source_path))
FileUtils.mv(ticket_source_path, ticket_target_path)
store = TicketStore.new(config_dir)
ticket = store.load_ticket_from_file(ticket_target_path)
self.default_bucket_id = ticket.bucket_id
write_config
end
|
#create_bucket(name) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/myer/cli_controller.rb', line 22
def create_bucket(name)
read_config
bucket_id = api.create_bucket
self.default_bucket_id = bucket_id
ticket = Ticket.new
ticket.server = default_server
ticket.bucket_id = bucket_id
ticket.key = @crypto.generate_passphrase
ticket.name = name
store = TicketStore.new(config_dir)
store.save_ticket(ticket)
write_config
out.puts("Created new bucket and stored its secret ticket at #{store.ticket_path(ticket)}.")
out.puts("You need this ticket to give other clients access to the bucket.")
out.puts("Keep it safe and secret. Everybody who has the ticket can read the bucket data.")
bucket_id
end
|
#create_payload(value, tag = nil) ⇒ Object
132
133
134
135
136
137
138
139
|
# File 'lib/myer/cli_controller.rb', line 132
def create_payload(value, tag = nil)
payload = {}
payload["id"] = SecureRandom.hex
payload["written_at"] = Time.now.utc.strftime("%FT%TZ")
payload["tag"] = tag if tag
payload["data"] = value.to_s
JSON.generate(payload)
end
|
#create_token ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/myer/cli_controller.rb', line 47
def create_token
read_config
token = api.create_token
out.puts("Created token: #{token}")
out.puts("Use this token to register another client, " +
"e.g. with `myer register #{default_server} #{token}`.")
token
end
|
#export(output_path) ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
|
# File 'lib/myer/cli_controller.rb', line 159
def export(output_path)
read_config
content = Content.new
inner_items = read
inner_items.each do |inner_item|
content.add(inner_item)
end
content.write_as_json(output_path)
end
|
#list_tickets(show_status: false) ⇒ Object
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
# File 'lib/myer/cli_controller.rb', line 183
def list_tickets(show_status: false)
read_config
store = TicketStore.new(config_dir)
out.puts "Available Tickets:"
store.tickets_per_server.each do |server_name,tickets|
if show_status
server_api = api(server_name)
begin
server_api.ping
status = " [pings]"
rescue StandardError => e
status = " [ping error: #{e.message.chomp}]"
end
end
out.puts " Server '#{server_name}'#{status}:"
tickets.each do |ticket|
out.puts " Bucket '#{ticket.name}' (#{ticket.bucket_id})"
end
end
end
|
#plot(dont_sync: false) ⇒ Object
150
151
152
153
154
155
156
157
|
# File 'lib/myer/cli_controller.rb', line 150
def plot(dont_sync: false)
read_config
read unless dont_sync
plot = Plot.new
plot.show(local_csv_path(default_bucket_id))
end
|
#read ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/myer/cli_controller.rb', line 112
def read
read_config
if !default_bucket_id || default_bucket_id.empty?
raise Myer::Error.new("Default bucket id not set")
end
inner_items = read_items(default_bucket_id)
FileUtils.mkdir_p(data_dir)
csv_file = local_csv_path(default_bucket_id)
content = Content.new
inner_items.each do |inner_item|
content.add(inner_item)
end
content.write_as_csv(csv_file)
inner_items
end
|
#read_items(bucket_id) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/myer/cli_controller.rb', line 92
def read_items(bucket_id)
read_config
store = TicketStore.new(config_dir)
ticket = store.load_ticket(default_bucket_id)
@crypto.passphrase = ticket.key
items = api.get_items(bucket_id)
content_list = []
items.each do |item|
content = @crypto.decrypt(item.content)
out.puts("#{item.id}: #{content}")
content_list.push(content)
end
content_list
end
|
#register(server_name, token) ⇒ Object
59
60
61
62
63
64
65
66
|
# File 'lib/myer/cli_controller.rb', line 59
def register(server_name, token)
read_config
self.default_server = server_name
self.user_id, self.user_password = api(server_name).register(token)
write_config
end
|
#write(content) ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/myer/cli_controller.rb', line 79
def write(content)
read_config
store = TicketStore.new(config_dir)
ticket = store.load_ticket(default_bucket_id)
@crypto.passphrase = ticket.key
encrypted_content = @crypto.encrypt(content)
write_item(default_bucket_id, encrypted_content)
end
|
#write_item(bucket_id, content) ⇒ Object
68
69
70
71
72
|
# File 'lib/myer/cli_controller.rb', line 68
def write_item(bucket_id, content)
read_config
return api.create_item(bucket_id, content)
end
|
#write_pair(value1, value2) ⇒ Object
145
146
147
148
|
# File 'lib/myer/cli_controller.rb', line 145
def write_pair(value1, value2)
json = [ value1, value2 ]
write_value(JSON.generate(json))
end
|
#write_raw(content) ⇒ Object
74
75
76
77
|
# File 'lib/myer/cli_controller.rb', line 74
def write_raw(content)
read_config
write_item(default_bucket_id, content)
end
|
#write_value(value, tag = nil) ⇒ Object
141
142
143
|
# File 'lib/myer/cli_controller.rb', line 141
def write_value(value, tag = nil)
write(create_payload(value, tag))
end
|