terminal.com 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d256dec7f902f6e53bebf75cedb4231ba0123e1b
4
+ data.tar.gz: 51cc71d632d28a9b840eaf67a7a353363e8f76fa
5
+ SHA512:
6
+ metadata.gz: fb2b0d8e464a88d836015e20984aa000b8304f5dab8ae783a087324b90f19c49ff9a0b4d7a3a99cc50481e986b5b11a771763f73560ab0820915efa189e9f516
7
+ data.tar.gz: d06615df3b69e26cf1645ed40bc4081fb18a566c163b520b9142893b44459da3724096ce9daffdec6fef60c738f4e928a76b7780baa57f53265b8d62407aebf5
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # About
2
+
3
+ This is a Ruby wrapper for [Terminal.com](https://www.terminal.com) API.
4
+
5
+ At the moment all it does is to dump all the [Terminal.com API endpoints](https://www.terminal.com/api/docs) to `Terminal::API` module, from which you can call them pretty much the same way you'd do with curl, just from Ruby.
6
+
7
+ In the future there will be more object-oriented abstraction.
8
+
9
+ # Usage
10
+
11
+ 1. Run `gem install terminal.com --development` or put `gem 'terminal.com'` into your Gemfile and run `bundle`. The development option installs coderay, so you get syntax highlighting for JSON on console when using the command-line client.
12
+
13
+ 2. Get your `user_token` and `access_token` from [your settings](https://www.terminal.com/settings/api).
14
+
15
+ ![](docs/terminal-com-api-keys.png)
16
+
17
+ # Command-Line Client
18
+
19
+ Anything you can do from the library can be done through the CLI client. There are two ways how you can use it.
20
+
21
+ ![](docs/terminal-cli-client.png)
22
+
23
+ ## Without Configuration
24
+
25
+ ```bash
26
+ terminal.com [user_token] [access_token] list_terminals
27
+ ```
28
+
29
+ *Note that at the point you have to provide both `user_token` and `access_token` regardless of whether the API endpoint actually needs it. This will be fixed in near future!*
30
+
31
+ ## With Configuration
32
+
33
+ Specifying the credentials every single time can be quite tedious. That's where `terminal.com configure` comes in handy:
34
+
35
+ ![](docs/terminal-com-configure.png)
36
+
37
+ ```bash
38
+ # One time only.
39
+ terminal.com configure
40
+
41
+ # Now you can simply do:
42
+ terminal.com list_terminals
43
+ ```
44
+
45
+ ## Options
46
+
47
+ ```bash
48
+ terminal.com list_public_snapshots --tag=ruby --featured
49
+ ```
50
+
51
+ # Example
52
+
53
+ ```ruby
54
+ require 'terminal.com'
55
+
56
+ # Let's search featured ruby-related snapshots.
57
+ Terminal::API.list_public_snapshots(tag: 'ruby', featured: true)
58
+ # {"snapshots" => [{"title" => "JRuby Stack (example included)", "body" => "JRuby is a 100% Java implementation of the Ruby programming language. This snapshot also includes a working example, its source code and the tools needed to develop JRuby applications.", ...
59
+
60
+ # List your Terminals.
61
+ my_user_token = '...'
62
+ my_access_token = '...'
63
+
64
+ Terminal::API.list_terminals(my_user_token, my_access_token)
65
+ # {"terminals" => [{"cpu" => "2 (max)", "ram" => "256", "diskspace" => "10", "name" => "Coding Interview: John Doe Jr", ...
66
+ ```
data/bin/terminal.com ADDED
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # TODO (later): Don't force tokens for methods that don't need them.
4
+ # TODO (maybe): DBG=ruby/curl/off. Curl would output curl commands.
5
+
6
+ ############
7
+ # Helpers. #
8
+ ############
9
+
10
+ def log(message)
11
+ STDERR.puts("\x1B[1;30m~ #{message}\x1B[0m") unless ENV['DBG'] == 'off'
12
+ end
13
+
14
+ def dbg(command, arguments, **options)
15
+ log "Terminal::API.#{command}(" +
16
+ ("#{arguments.inspect[1..-2]}" unless arguments.empty?).to_s +
17
+ (", #{options.inspect[1..-2]}" unless options.empty?).to_s +
18
+ ")\n"
19
+ end
20
+
21
+ def try_highlight_syntax(json)
22
+ CodeRay.scan(json, :json).term
23
+ rescue
24
+ json
25
+ end
26
+
27
+ def print_as_json(data)
28
+ json = JSON.pretty_generate(data)
29
+ puts try_highlight_syntax(json)
30
+ end
31
+
32
+ def api_call(command, arguments, options)
33
+ # Ruby **args expansion doesn't work as I expected, that's why the extra if.
34
+ # pry(main)> def xxx(*args) args; end
35
+ # pry(main)> xxx(**{})
36
+ # => [{}]
37
+ if options
38
+ dbg command, arguments, options
39
+ print_as_json Terminal::API.send(command, *arguments, **options)
40
+ else
41
+ dbg command, arguments
42
+ print_as_json Terminal::API.send(command, *arguments)
43
+ end
44
+ end
45
+
46
+ def usage
47
+ if File.exist?(File.expand_path('../docs/help.txt', __dir__))
48
+ # Running locally.
49
+ puts File.read(File.expand_path('../docs/help.txt', __dir__))
50
+ else
51
+ # RubyGems installation.
52
+ spec = Gem::Specification.find_by_name('terminal.com')
53
+ puts File.read(File.join(spec.gem_dir, 'docs', 'help.txt'))
54
+ end
55
+ end
56
+
57
+ #########
58
+ # Main. #
59
+ #########
60
+
61
+ require File.expand_path('../../lib/terminal.com', __FILE__)
62
+ require 'json'
63
+
64
+ begin
65
+ require 'coderay'
66
+ rescue LoadError
67
+ log "CodeRay is not installed. Syntax highlighting won't be available."
68
+ end
69
+
70
+ # -h | --help
71
+ if ARGV.include?('-h') || ARGV.include?('--help')
72
+ puts usage; exit
73
+ end
74
+
75
+ if ARGV.first == 'configure'
76
+ puts <<-EOF
77
+ Welcome to the Terminal.com CLI client.
78
+
79
+ We don't want to bother you with asking for credentials every single time,
80
+ so instead we'll ask you for them now and save them to ~/.terminal.com.json.
81
+
82
+ Alright?
83
+
84
+ Go to https://www.terminal.com/settings/api
85
+
86
+ And:
87
+ EOF
88
+
89
+ print "1. Paste your user token here: "
90
+ user_token = STDIN.readline.chomp
91
+ print "2. Generate an access token if you don't have one and paste it here: "
92
+ access_token = STDIN.readline.chomp
93
+
94
+ File.open(File.expand_path('~/.terminal.com.json'), 'w') do |file|
95
+ file.puts({user_token: user_token, access_token: access_token}.to_json)
96
+ end
97
+
98
+ puts "\nYour tokens were saved to ~/.terminal.com.json."
99
+ exit
100
+ end
101
+
102
+ # Tokens.
103
+ # TODO: Add --no-config
104
+ if File.exist?(File.expand_path('~/.terminal.com.json'))
105
+ config = JSON.parse(File.read(File.expand_path('~/.terminal.com.json')))
106
+ user_token, access_token = config.values_at('user_token', 'access_token')
107
+
108
+ if user_token.nil?
109
+ abort("Config file found, but user_token is missing. Add user_token key.")
110
+ end
111
+
112
+ if access_token.nil?
113
+ abort("Config file found, but access_token is missing. Add access_token key.")
114
+ end
115
+ else
116
+ user_token, access_token = ARGV.shift(2)
117
+
118
+ if user_token.nil? || access_token.nil?
119
+ STDERR.puts("Credentials missing.\n\n")
120
+ abort usage
121
+ end
122
+ end
123
+
124
+ if ARGV.empty?
125
+ STDERR.puts("Command missing.\n\n")
126
+ abort usage
127
+ else
128
+ command = ARGV.shift
129
+
130
+ unless Terminal::API.respond_to?(command)
131
+ STDERR.puts("Invalid command '#{command}'.\n\n")
132
+ abort usage
133
+ end
134
+
135
+ # Not every method requires authentication.
136
+ method_args = Terminal::API.method(command).parameters.map(&:last)
137
+
138
+ if method_args.include?(:options)
139
+ options = ARGV.reduce(Hash.new) do |buffer, argument|
140
+ if argument.match(/^--(.+)=(.+)$/)
141
+ buffer[$1.to_sym] = $2
142
+ elsif argument.match(/^--no-(.+)$/)
143
+ buffer[$1.to_sym] = false
144
+ elsif argument.match(/^--(.+)$/)
145
+ buffer[$1.to_sym] = true
146
+ end
147
+
148
+ buffer
149
+ end
150
+
151
+ ARGV.delete_if { |argument| argument.start_with?('--') }
152
+ end
153
+
154
+ arguments = []
155
+ arguments << user_token if method_args.include?(:user_token)
156
+ arguments << access_token if method_args.include?(:access_token)
157
+ arguments.push(*ARGV)
158
+
159
+ api_call(command, arguments, options)
160
+ end
data/docs/help.txt ADDED
@@ -0,0 +1,131 @@
1
+ == Usage ==
2
+
3
+ 1. Explicit configuration.
4
+
5
+ terminal.com [user_token] [access_token] [command]
6
+
7
+ 2. With a configuration file.
8
+
9
+ First run terminal.com configure. This command will
10
+ save your credentials into ~/.terminal.com.json.
11
+ {"user_token": "...", "access_token": "..."}
12
+
13
+ Then you can run commands like so:
14
+
15
+ terminal.com [command]
16
+
17
+ == Commands ==
18
+
19
+ These are identical to what the API provides.
20
+
21
+ # BROWSE SNAPSHOTS & USERS #
22
+ get_snapshot snapshot_id
23
+ get_profile username
24
+ list_public_snapshots [options]
25
+ --username=value
26
+ --tag=value
27
+ --featured
28
+ --title=value
29
+ --page=value
30
+ --perPage=value
31
+ --sortby=value
32
+
33
+ count_public_snapshots [options]
34
+ --username=value
35
+ --tag=value
36
+ --featured
37
+ --title=value
38
+
39
+ # CREATE AND MANAGE TERMINALS #
40
+ list_terminals user_token access_token
41
+ get_terminal user_token access_token [options]
42
+ --container_key=value
43
+ --subdomain=value
44
+
45
+ start_snapshot user_token access_token snapshot_id [options]
46
+ --cpu=value
47
+ --ram=value
48
+ --temporary
49
+ --name=value
50
+ --autopause=value
51
+ --startup_script=value
52
+ --custom_data=value
53
+
54
+ delete_terminal user_token access_token container_key
55
+ restart_terminal user_token access_token container_key
56
+ pause_terminal user_token access_token container_key
57
+ resume_terminal user_token access_token container_key
58
+ edit_terminal user_token access_token container_key [options]
59
+ --cpu=value
60
+ --ram=value
61
+ --diskspace=value
62
+ --name=value
63
+
64
+ # CREATE AND MANAGE SNAPSHOTS #
65
+ list_snapshots user_token access_token [options]
66
+ --username=value
67
+ --tag=value
68
+ --featured
69
+ --title=value
70
+ --page=value
71
+ --perPage=value
72
+
73
+ count_snapshots user_token access_token [options]
74
+ --username=value
75
+ --tag=value
76
+ --featured
77
+ --title=value
78
+
79
+ delete_snapshot user_token access_token snapshot_id
80
+ edit_snapshot user_token access_token snapshot_id [options]
81
+ --body=value
82
+ --title=value
83
+ --readme=value
84
+ --public
85
+ --custom_data=value
86
+
87
+ snapshot_terminal user_token access_token container_key [options]
88
+ --body=value
89
+ --title=value
90
+ --readme=value
91
+ --public
92
+
93
+ # MANAGE TERMINAL ACCESS #
94
+ add_terminal_links user_token access_token container_key *links
95
+ remove_terminal_links user_token access_token container_key *links
96
+ list_terminal_access user_token access_token container_key
97
+ edit_terminal_access user_token access_token container_key [options]
98
+ --is_public_list
99
+ --access_rules=value
100
+
101
+ # MANAGE TERMINAL DNS & DOMAINS #
102
+ get_cname_records user_token access_token
103
+ add_domain_to_pool user_token access_token domain
104
+ remove_domain_from_pool user_token access_token domain
105
+ add_cname_record user_token access_token domain subdomain port
106
+ remove_cname_record user_token access_token domain
107
+
108
+ # MANAGE TERMINAL IDLE SETTINGS #
109
+ set_terminal_idle_settings user_token access_token container_key action *triggers
110
+ get_terminal_idle_settings user_token access_token container_key
111
+
112
+ # MANAGE USAGE & CREDITS #
113
+ instance_types
114
+ instance_price instance_type status (defaults to running)
115
+ balance user_token access_token
116
+ balance_added user_token access_token
117
+ gift user_token access_token email cents
118
+ burn_history user_token access_token
119
+ terminal_usage_history user_token access_token
120
+ burn_state user_token access_token
121
+ burn_estimates user_token access_token
122
+
123
+ # MANAGE SSH PUBLIC KEYS #
124
+ add_authorized_key_to_terminal user_token access_token container_key publicKey
125
+ add_authorized_key_to_ssh_proxy user_token access_token name publicKey
126
+ del_authorized_key_from_ssh_proxy user_token access_token name fingerprint
127
+ get_authorized_keys_from_ssh_proxy user_token access_token
128
+
129
+ # OTHER #
130
+ who_am_i user_token, access_token
131
+ request_progress request_id
@@ -0,0 +1,385 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ module Terminal
5
+ VERSION = '0.0.1'
6
+
7
+ module API
8
+ extend self
9
+
10
+ API_VERSION = 'v0.1'
11
+ HEADERS = {'Content-Type' => 'application/json'}
12
+
13
+ ############################
14
+ # BROWSE SNAPSHOTS & USERS #
15
+ ############################
16
+
17
+ # https://www.terminal.com/api/docs#get-snapshot
18
+ def get_snapshot(snapshot_id)
19
+ call('/get_snapshot', snapshot_id: snapshot_id)
20
+ end
21
+
22
+ # https://www.terminal.com/api/docs#get-profile
23
+ def get_profile(username)
24
+ call('/get_profile', username: username)
25
+ end
26
+
27
+ # https://www.terminal.com/api/docs#list-public-snapshots
28
+ def list_public_snapshots(**options)
29
+ ensure_options_validity(options,
30
+ :username, :tag, :featured, :title, :page, :perPage, :sortby)
31
+
32
+ call('/list_public_snapshots', options)
33
+ end
34
+
35
+ # https://www.terminal.com/api/docs#count-public-snapshots
36
+ def count_public_snapshots(**options)
37
+ ensure_options_validity(options,
38
+ :username, :tag, :featured, :title)
39
+
40
+ call('/count_public_snapshots', options)
41
+ end
42
+
43
+ ###############################
44
+ # CREATE AND MANAGE TERMINALS #
45
+ ###############################
46
+
47
+ # https://www.terminal.com/api/docs#list-terminals
48
+ def list_terminals(user_token, access_token)
49
+ call('/list_terminals',
50
+ user_token: user_token, access_token: access_token)
51
+ end
52
+
53
+ # https://www.terminal.com/api/docs#get-terminal
54
+ def get_terminal(user_token, access_token, **options)
55
+ ensure_options_validity(options, :container_key, :subdomain)
56
+
57
+ options.merge!(user_token: user_token, access_token: access_token)
58
+
59
+ call('/get_terminal', options)
60
+ end
61
+
62
+ # https://www.terminal.com/api/docs#start-snapshot
63
+ def start_snapshot(user_token, access_token, snapshot_id, **options)
64
+ ensure_options_validity(options,
65
+ :cpu, :ram, :temporary, :name, :autopause, :startup_script, :custom_data)
66
+
67
+ options.merge!(user_token: user_token, access_token: access_token, snapshot_id: snapshot_id)
68
+
69
+ call('/start_snapshot', options)
70
+ end
71
+
72
+ # https://www.terminal.com/api/docs#delete-terminal
73
+ def delete_terminal(user_token, access_token, container_key)
74
+ call('/delete_terminal',
75
+ user_token: user_token, access_token: access_token, container_key: container_key)
76
+ end
77
+
78
+ # https://www.terminal.com/api/docs#restart-terminal
79
+ def restart_terminal(user_token, access_token, container_key)
80
+ call('/restart_terminal',
81
+ user_token: user_token, access_token: access_token, container_key: container_key)
82
+ end
83
+
84
+ # https://www.terminal.com/api/docs#pause-terminal
85
+ def pause_terminal(user_token, access_token, container_key)
86
+ call('/pause_terminal',
87
+ user_token: user_token, access_token: access_token, container_key: container_key)
88
+ end
89
+
90
+ # https://www.terminal.com/api/docs#resume-terminal
91
+ def resume_terminal(user_token, access_token, container_key)
92
+ call('/resume_terminal',
93
+ user_token: user_token, access_token: access_token, container_key: container_key)
94
+ end
95
+
96
+ # https://www.terminal.com/api/docs#edit-terminal
97
+ def edit_terminal(user_token, access_token, container_key, **options)
98
+ ensure_options_validity(options,
99
+ :cpu, :ram, :diskspace, :name)
100
+
101
+ options.merge!(user_token: user_token, access_token: access_token, container_key: container_key)
102
+
103
+ call('/edit_terminal', options)
104
+ end
105
+
106
+ ###############################
107
+ # CREATE AND MANAGE SNAPSHOTS #
108
+ ###############################
109
+
110
+ # https://www.terminal.com/api/docs#list-snapshots
111
+ def list_snapshots(user_token, access_token, **options)
112
+ ensure_options_validity(options,
113
+ :username, :tag, :featured, :title, :page, :perPage)
114
+
115
+ options.merge!(user_token: user_token, access_token: access_token)
116
+
117
+ call('/list_snapshots', options)
118
+ end
119
+
120
+ # https://www.terminal.com/api/docs#count-snapshots
121
+ def count_snapshots(user_token, access_token, **options)
122
+ ensure_options_validity(options,
123
+ :username, :tag, :featured, :title)
124
+
125
+ options.merge!(user_token: user_token, access_token: access_token)
126
+
127
+ call('/count_snapshots', options)
128
+ end
129
+
130
+ # https://www.terminal.com/api/docs#delete-snapshot
131
+ def delete_snapshot(user_token, access_token, snapshot_id)
132
+ call('/delete_snapshot',
133
+ user_token: user_token,
134
+ access_token: access_token,
135
+ snapshot_id: snapshot_id)
136
+ end
137
+
138
+ # https://www.terminal.com/api/docs#edit-snapshot
139
+ def edit_snapshot(user_token, access_token, snapshot_id, **options)
140
+ ensure_options_validity(options,
141
+ :body, :title, :readme, :tags, :public, :custom_data)
142
+
143
+ options.merge!(user_token: user_token, access_token: access_token, snapshot_id: snapshot_id)
144
+
145
+ call('/edit_snapshot', options)
146
+ end
147
+
148
+ # https://www.terminal.com/api/docs#snapshot-terminal
149
+ def snapshot_terminal(user_token, access_token, container_key, **options)
150
+ ensure_options_validity(options,
151
+ :body, :title, :readme, :tags, :public)
152
+
153
+ options.merge!(user_token: user_token, access_token: access_token, container_key: container_key)
154
+
155
+ call('/snapshot_terminal', options)
156
+ end
157
+
158
+ ##########################
159
+ # MANAGE TERMINAL ACCESS #
160
+ ##########################
161
+
162
+ # https://www.terminal.com/api/docs#add-terminal-links
163
+ def add_terminal_links(user_token, access_token, container_key, *links)
164
+ call('/add_terminal_links',
165
+ user_token: user_token,
166
+ access_token: access_token,
167
+ container_key: container_key,
168
+ links: links)
169
+ end
170
+
171
+ # https://www.terminal.com/api/docs#remove-terminal-links
172
+ def remove_terminal_links(user_token, access_token, container_key, *links)
173
+ call('/remove_terminal_links',
174
+ user_token: user_token,
175
+ access_token: access_token,
176
+ container_key: container_key,
177
+ links: links)
178
+ end
179
+
180
+ # https://www.terminal.com/api/docs#list-terminal-access
181
+ def list_terminal_access(user_token, access_token, container_key)
182
+ call('/list_terminal_access',
183
+ user_token: user_token,
184
+ access_token: access_token,
185
+ container_key: container_key)
186
+ end
187
+
188
+ # https://www.terminal.com/api/docs#edit-terminal-access
189
+ def edit_terminal_access(user_token, access_token, container_key, **options)
190
+ ensure_options_validity(options, :is_public_list, :access_rules)
191
+
192
+ options.merge!(user_token: user_token, access_token: access_token, container_key: container_key)
193
+
194
+ call('/edit_terminal_access', options)
195
+ end
196
+
197
+ #################################
198
+ # MANAGE TERMINAL DNS & DOMAINS #
199
+ #################################
200
+
201
+ # https://www.terminal.com/api/docs#get-cname-records
202
+ def get_cname_records(user_token, access_token)
203
+ call('/get_cname_records',
204
+ user_token: user_token, access_token: access_token)
205
+ end
206
+
207
+ # https://www.terminal.com/api/docs#add-domain-to-pool
208
+ def add_domain_to_pool(user_token, access_token, domain)
209
+ call('/add_domain_to_pool',
210
+ user_token: user_token, access_token: access_token, domain: domain)
211
+ end
212
+
213
+ # https://www.terminal.com/api/docs#remove-domain-from-pool
214
+ def remove_domain_from_pool(user_token, access_token, domain)
215
+ call('/remove_domain_from_pool',
216
+ user_token: user_token, access_token: access_token, domain: domain)
217
+ end
218
+
219
+ # https://www.terminal.com/api/docs#add-cname-record
220
+ def add_cname_record(user_token, access_token, domain, subdomain, port)
221
+ call('/add_cname_record',
222
+ user_token: user_token,
223
+ access_token: access_token,
224
+ domain: domain,
225
+ subdomain: subdomain,
226
+ port: port)
227
+ end
228
+
229
+ # https://www.terminal.com/api/docs#remove-cname-record
230
+ def remove_cname_record(user_token, access_token, domain)
231
+ call('/remove_cname_record',
232
+ user_token: user_token,
233
+ access_token: access_token,
234
+ domain: domain)
235
+ end
236
+
237
+ #################################
238
+ # MANAGE TERMINAL IDLE SETTINGS #
239
+ #################################
240
+
241
+ # https://www.terminal.com/api/docs#set-terminal-idle-settings
242
+ def set_terminal_idle_settings(user_token, access_token, container_key, action, *triggers)
243
+ call('/set_terminal_idle_settings',
244
+ user_token: user_token,
245
+ access_token: access_token,
246
+ container_key: container_key,
247
+ action: action,
248
+ triggers: triggers)
249
+ end
250
+
251
+ # https://www.terminal.com/api/docs#get-terminal-idle-settings
252
+ def get_terminal_idle_settings(user_token, access_token, container_key)
253
+ call('/get_terminal_idle_settings',
254
+ user_token: user_token,
255
+ access_token: access_token,
256
+ container_key: container_key)
257
+ end
258
+
259
+ ##########################
260
+ # MANAGE USAGE & CREDITS #
261
+ ##########################
262
+
263
+ # https://www.terminal.com/api/docs#instance-types
264
+ def instance_types
265
+ call('/instance_types', Hash.new)
266
+ end
267
+
268
+ # https://www.terminal.com/api/docs#instance-price
269
+ def instance_price(instance_type, status = 'running')
270
+ call('/instance_price', instance_type: instance_type, status: status)
271
+ end
272
+
273
+ # https://www.terminal.com/api/docs#balance
274
+ def balance(user_token, access_token)
275
+ call('/balance', user_token: user_token, access_token: access_token)
276
+ end
277
+
278
+ # https://www.terminal.com/api/docs#balance-added
279
+ def balance_added(user_token, access_token)
280
+ call('/balance_added', user_token: user_token, access_token: access_token)
281
+ end
282
+
283
+ # https://www.terminal.com/api/docs#gift
284
+ def gift(user_token, access_token, email, cents)
285
+ call('/gift',
286
+ user_token: user_token,
287
+ access_token: access_token,
288
+ email: email,
289
+ cents: cents)
290
+ end
291
+
292
+ # https://www.terminal.com/api/docs#burn-history
293
+ def burn_history(user_token, access_token)
294
+ call('/burn_history', user_token: user_token, access_token: access_token)
295
+ end
296
+
297
+ # https://www.terminal.com/api/docs#terminal-usage-history
298
+ def terminal_usage_history(user_token, access_token)
299
+ call('/terminal_usage_history', user_token: user_token, access_token: access_token)
300
+ end
301
+
302
+ # https://www.terminal.com/api/docs#burn-state
303
+ def burn_state(user_token, access_token)
304
+ call('/burn_state', user_token: user_token, access_token: access_token)
305
+ end
306
+
307
+ # https://www.terminal.com/api/docs#burn-estimates
308
+ def burn_estimates(user_token, access_token)
309
+ call('/burn_estimates', user_token: user_token, access_token: access_token)
310
+ end
311
+
312
+ ##########################
313
+ # MANAGE SSH PUBLIC KEYS #
314
+ ##########################
315
+
316
+ # https://www.terminal.com/api/docs#add-authorized-key-to-terminal
317
+ def add_authorized_key_to_terminal(user_token, access_token, container_key, publicKey)
318
+ call('/add_authorized_key_to_terminal',
319
+ user_token: user_token,
320
+ access_token: access_token,
321
+ container_key: container_key,
322
+ publicKey: publicKey)
323
+ end
324
+
325
+ # https://www.terminal.com/api/docs#add-authorized-key-to-ssh-proxy
326
+ def add_authorized_key_to_ssh_proxy(user_token, access_token, name, publicKey)
327
+ call('/add_authorized_key_to_ssh_proxy',
328
+ user_token: user_token,
329
+ access_token: access_token,
330
+ name: name,
331
+ publicKey: publicKey)
332
+ end
333
+
334
+ # https://www.terminal.com/api/docs#del-authorized-key-from-ssh-proxy
335
+ def del_authorized_key_from_ssh_proxy(user_token, access_token, name, fingerprint)
336
+ call('/del_authorized_key_from_ssh_proxy',
337
+ user_token: user_token,
338
+ access_token: access_token,
339
+ name: name,
340
+ fingerprint: fingerprint)
341
+ end
342
+
343
+ # https://www.terminal.com/api/docs#get-authorized-keys-from-ssh-proxy
344
+ def get_authorized_keys_from_ssh_proxy(user_token, access_token)
345
+ call('/get_authorized_keys_from_ssh_proxy',
346
+ user_token: user_token, access_token: access_token)
347
+ end
348
+
349
+ #########
350
+ # OTHER #
351
+ #########
352
+
353
+ # https://www.terminal.com/api/docs#who-am-i
354
+ def who_am_i(user_token, access_token)
355
+ call('/who_am_i', user_token: user_token, access_token: access_token)
356
+ end
357
+
358
+ # https://www.terminal.com/api/docs#request-progress
359
+ def request_progress(request_id)
360
+ call('/request_progress', request_id: request_id)
361
+ end
362
+
363
+ private
364
+ def request
365
+ @request ||= Net::HTTP.new('api.terminal.com')
366
+ end
367
+
368
+ def call(path, data)
369
+ path = "/#{API_VERSION}#{path}"
370
+ response = request.post(path, data.to_json, HEADERS)
371
+ status = response.code.to_i
372
+ return JSON.parse(response.body) if status == 200
373
+
374
+ raise "Unexpected status: #{response.inspect}"
375
+ end
376
+
377
+ def ensure_options_validity(options, *valid_keys)
378
+ unrecognised_options = (options.keys - valid_keys)
379
+
380
+ unless unrecognised_options.empty?
381
+ raise ArgumentError.new("Unrecognised options: #{unrecognised_options}")
382
+ end
383
+ end
384
+ end
385
+ end
File without changes
File without changes
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: terminal.com
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - James C Russell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: coderay
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1'
27
+ description: The official Terminal.com Ruby + CLI client.
28
+ email: james@cloudlabs.io
29
+ executables:
30
+ - terminal.com
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - bin/terminal.com
36
+ - docs/help.txt
37
+ - lib/terminal.com.rb
38
+ - spec/spec_helper.rb
39
+ - spec/terminal.com_spec.rb
40
+ homepage: http://github.com/botanicus/terminal.com
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.2.2
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: The official Terminal.com Ruby + CLI client
64
+ test_files: []