yst 0.1.0
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/bin/yst +27 -0
- data/lib/yst/yello_api.rb +46 -0
- data/lib/yst.rb +37 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 713de042480b3ba2abf79f6092b5bdad82c2a164
|
4
|
+
data.tar.gz: b74b83d701ae9ca439a5435d9bdba0d4a134e7cb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1994e4db0995988e5cc48e180f1ff132aa4179824e36e7b6c876cc7b0698837880ab5456950cff7d74c2f31ef0182accc20fde2e243010f5690e1e5febb10dac
|
7
|
+
data.tar.gz: 6d8a9e2accf51e0a7d2eb98ae2868cea39efd786ee10c55eb9979b4508d7ecea46d44fdd1a0a880fb54ce0bfd184e3ceb82b84634f4b8bb6d49ec1a131cd4484
|
data/bin/yst
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require 'yst'
|
4
|
+
|
5
|
+
OptionParser.new do |opt|
|
6
|
+
opt.banner = " The best gem you have probably ever downloaded.\n\n Usage: yst [options]\n"
|
7
|
+
|
8
|
+
opt.separator ''
|
9
|
+
opt.separator ' Options:'
|
10
|
+
|
11
|
+
opt.on('--register EMAIL_ADDRESS', 'Register your email to get a token for the rest of the training.') do |o|
|
12
|
+
YST.new.register(o)
|
13
|
+
end
|
14
|
+
|
15
|
+
opt.on('--vote ANSWER', 'Submit answer for current question.') do |o|
|
16
|
+
YST.new.vote(o)
|
17
|
+
end
|
18
|
+
|
19
|
+
opt.on('--votes', 'Retrieve all of your previous votes.') do |_o|
|
20
|
+
YST.new.votes
|
21
|
+
end
|
22
|
+
|
23
|
+
opt.separator ''
|
24
|
+
opt.separator ' Examples:'
|
25
|
+
opt.separator ' yst --register phil.prescher@yello.co'
|
26
|
+
opt.separator ' yst --vote A'
|
27
|
+
end.parse!
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module YelloAPI
|
4
|
+
TOKEN_FILE = File.join(ENV['HOME'], '/.yello_security_token')
|
5
|
+
|
6
|
+
def submit_registration(email)
|
7
|
+
response = HTTParty.post("#{base_uri}/users", {
|
8
|
+
body: { email: email }
|
9
|
+
})
|
10
|
+
response.body
|
11
|
+
end
|
12
|
+
|
13
|
+
def submit_vote(answer)
|
14
|
+
response = HTTParty.post("#{base_uri}/votes", {
|
15
|
+
body: {
|
16
|
+
token: parse_token,
|
17
|
+
answer: answer
|
18
|
+
}
|
19
|
+
})
|
20
|
+
response.body
|
21
|
+
end
|
22
|
+
|
23
|
+
def my_votes
|
24
|
+
response = HTTParty.get("#{base_uri}/votes?token=#{parse_token}")
|
25
|
+
response.body
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def parse_token
|
31
|
+
raise 'You must first register your email via --register' unless File.exists?(TOKEN_FILE)
|
32
|
+
File.read(TOKEN_FILE).split(':').last.chomp
|
33
|
+
end
|
34
|
+
|
35
|
+
def base_uri
|
36
|
+
'http://localhost:3000'.freeze
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
=begin
|
41
|
+
Developer Notes (pls ignore):
|
42
|
+
|
43
|
+
POST /register {email: 'test@yello.co'} => token/message
|
44
|
+
POST /vote {answer: 'a', token: '123'} => message
|
45
|
+
GET /urls => debug info
|
46
|
+
=end
|
data/lib/yst.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'yst/yello_api.rb'
|
2
|
+
|
3
|
+
class YST
|
4
|
+
TOKEN_FILE = File.join(ENV['HOME'], '/.yello_security_token')
|
5
|
+
include YelloAPI
|
6
|
+
|
7
|
+
def register(email)
|
8
|
+
email = sanitize_email(email)
|
9
|
+
return puts "Invalid Yello Email: #{email}" unless valid_email?(email)
|
10
|
+
|
11
|
+
token = submit_registration(email)
|
12
|
+
`echo '#{email}:#{token}' > #{TOKEN_FILE}`
|
13
|
+
|
14
|
+
puts "Successfully registered! Access token has been saved for future requests. (token: #{token})"
|
15
|
+
end
|
16
|
+
|
17
|
+
def vote(answer)
|
18
|
+
return puts "Invalid answer (must be single letter): #{answer}" unless answer.length == 1
|
19
|
+
|
20
|
+
puts submit_vote(answer.downcase)
|
21
|
+
end
|
22
|
+
|
23
|
+
def votes
|
24
|
+
puts my_votes
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def sanitize_email(email)
|
30
|
+
# Remove forward slashes and backward slashes
|
31
|
+
email.gsub(/\//, '').gsub(/\\/, '')
|
32
|
+
end
|
33
|
+
|
34
|
+
def valid_email?(email)
|
35
|
+
email.include?('@') && email.include?('yello')
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yst
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Phil Prescher
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-07-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: For interacting with the developer security training course.
|
28
|
+
email: phil.prescher@yello.co
|
29
|
+
executables:
|
30
|
+
- yst
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- bin/yst
|
35
|
+
- lib/yst.rb
|
36
|
+
- lib/yst/yello_api.rb
|
37
|
+
homepage: http://rubygems.org/gems/yst
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.5.2.1
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Yello developer security training library.
|
61
|
+
test_files: []
|