have-i-been-pwned 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4711dd81ac9ca50eba43b0bb6ba9fb11ab360326
4
+ data.tar.gz: '018f62905a5d68f2221f2e15d2231eaeeb7ca0b1'
5
+ SHA512:
6
+ metadata.gz: b0055b956fd638355ac2234523eb408a65cdf58bd1bb5b9a2dae466f37b52f6d33e1c424a575b2fe9dd822b6daca516c4823afa6fbd12cf4dc6de57a8ac6eaad
7
+ data.tar.gz: 802e570b65737f296ffb5668aec0ddf44b1dda82e7953b1cac470778b3294ff9477faafe131214419cf3d798b0cddb7052c6c9ff963efd6b33d057c517f75acc
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gem 'codecov', :require => false, :group => :test
3
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ require 'rubygems'
3
+ require 'rake/testtask'
4
+
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << 'test'
9
+ t.pattern = 'test/test_*.rb'
10
+ t.verbose = true
11
+ end
12
+
13
+ desc "Run tests"
14
+ task :default => :test
@@ -0,0 +1,41 @@
1
+ require 'httparty'
2
+ require 'digest'
3
+
4
+ module HaveIBeenPwned
5
+ class << self
6
+ def pwned password
7
+ # if password is not nil
8
+ if password
9
+ # get a digest of the password
10
+ digest = Digest::SHA1.hexdigest password
11
+ # get the first 5 characters of the hash
12
+ firstFive = digest[0..4]
13
+ # make the APU call
14
+ results = HTTParty.get("https://api.pwnedpasswords.com/range/#{firstFive}")
15
+ # if we get something back
16
+ if results.code != 404
17
+ # split the string based on line breaks into an array
18
+ resArray = results.split("\n")
19
+ # interate through the list of hashes
20
+ resArray.each do |partial_hash|
21
+ # hashes are formatted hash:count
22
+ # ex. 0018A45C4D1DEF81644B54AB7F969B88D65:1
23
+ # return true if we find a match
24
+ return true if "#{firstFive}#{partial_hash.split(":")[0]}".upcase == digest.upcase
25
+ end
26
+
27
+ # return false if we dont find anything
28
+ return false
29
+ else
30
+ raise 'Troy Hunt has failed us. The API returned a 404.'
31
+ end
32
+ else
33
+ raise 'You must provide a password to check!'
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # Uncomment and call directly if you want to test this locally
40
+ # results = HaveIBeenPwned::pwned 'abc123'
41
+ # puts results
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module HaveIBeenPwned
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,20 @@
1
+ require 'minitest/autorun'
2
+ require 'have_i_been_pwned'
3
+
4
+ class HolaTest < Minitest::Test
5
+ def test_abc123_is_found
6
+ assert_equal true, HaveIBeenPwned::pwned('abc123')
7
+ end
8
+
9
+ def test_password_is_found
10
+ assert_equal true, HaveIBeenPwned::pwned('password')
11
+ end
12
+
13
+ def test_crazy_long_password_is_not_found
14
+ assert_equal false, HaveIBeenPwned::pwned('dfsfk;lngfdsjlmkvsdlmjkvf8um54b89u5438mu0p435u0m5b409u54b09um5309um50u9m3b56u90m54jmgtrgv')
15
+ end
16
+
17
+ def test_not_actually_providing_a_password_is_silly
18
+ assert_equal false, HaveIBeenPwned::pwned('')
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: have-i-been-pwned
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Dale Myszewski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-06-27 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
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A simple gem to check and see if a given password was compromised by
56
+ a hack. Special thanks to Troy Hunt facilitating the service.
57
+ email: dale@daleslab.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - Rakefile
64
+ - lib/have_i_been_pwned.rb
65
+ - lib/version.rb
66
+ - test/test_have_i_been_pwned.rb
67
+ homepage: https://github.com/Dales-Lab/haveibeenpwned-ruby-sdk
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ - test
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.6.7
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: Check to see if your passwords are safe
92
+ test_files: []