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.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/yst +27 -0
  3. data/lib/yst/yello_api.rb +46 -0
  4. data/lib/yst.rb +37 -0
  5. 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: []