have-i-been-pwned 0.1.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 +7 -0
- data/Gemfile +3 -0
- data/Rakefile +14 -0
- data/lib/have_i_been_pwned.rb +41 -0
- data/lib/version.rb +3 -0
- data/test/test_have_i_been_pwned.rb +20 -0
- metadata +92 -0
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
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,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: []
|