ptj 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.
@@ -0,0 +1,2 @@
1
+ # this is just a helper file for scripts to setup the ptj libpath
2
+ $: << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
Binary file
Binary file
@@ -0,0 +1,46 @@
1
+ require 'model/shared_behaviors'
2
+
3
+ describe PTJ::Password do
4
+ before :each do
5
+ PTJ::Model.migrate_all! unless PTJ::Model.migrated?
6
+ PTJ::Password.destroy!
7
+ end
8
+
9
+ after :each do
10
+ PTJ::Password.destroy!
11
+ end
12
+
13
+ context "basic functionality" do
14
+ before :each do
15
+ @ctime = Time.now
16
+ @obj = PTJ::Password.add_single("password", "abchash")
17
+ end
18
+
19
+ it_should_behave_like "a valid ptj model"
20
+
21
+ context "valid categorization of passwords" do
22
+ it("should have the correct upper-case letter value") { PTJ::Password.classify_passwords("Upper")[:upper].should == true }
23
+ it("should not have the correct upper-case letter value") { PTJ::Password.classify_passwords("upper")[:upper].should == false }
24
+
25
+ it("should have the correct lower-case letter value") { PTJ::Password.classify_passwords("lower")[:lower].should == true }
26
+ it("should not have the correct lower-case letter value") { PTJ::Password.classify_passwords("LOWER")[:lower].should == false }
27
+
28
+ it("should have the correct numeric value") { PTJ::Password.classify_passwords("Numeric123")[:number].should == true }
29
+ it("should not have the correct numeric value") { PTJ::Password.classify_passwords("Numeric!@#")[:number].should == false }
30
+
31
+ it("should have the correct special character value") { PTJ::Password.classify_passwords("Special!@#")[:special].should == true }
32
+ it("should not have the correctspecial character value") { PTJ::Password.classify_passwords("Special123")[:special].should == false }
33
+ end
34
+
35
+
36
+ context "valid size of passwords" do
37
+ it("should have a size of 1") { PTJ::Password.new(:password => "a").size.should == 1}
38
+ it("should have a size of 10") { PTJ::Password.new(:password => "abcdefghij").size.should == 10}
39
+ it("should have a size of 20") { PTJ::Password.new(:password => "abcdefghijklmnopqrst").size.should == 20}
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+
46
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+ shared_examples_for "a valid ptj model" do
3
+ after :each do
4
+ @obj.destroy if @obj.saved?
5
+ end
6
+
7
+ it "should be valid" do
8
+ @obj.should be_valid
9
+ end
10
+
11
+ it "should save without problems" do
12
+ @obj.save
13
+ @obj.should be_saved
14
+ end
15
+
16
+ it "should be destroy-able" do
17
+ @obj.save
18
+ @obj.should be_saved
19
+ @obj.destroy
20
+ @obj.should be_destroyed
21
+ end
22
+
23
+ end
@@ -0,0 +1,27 @@
1
+ require 'model/shared_behaviors'
2
+
3
+ describe PTJ::Tag do
4
+ before :all do
5
+ PTJ::Model.migrate_all! unless PTJ::Model.migrated?
6
+ PTJ::Tag.destroy!
7
+ end
8
+
9
+ after :all do
10
+ PTJ::Tag.destroy!
11
+ end
12
+
13
+ context "validity" do
14
+ before :each do
15
+ @ctime = Time.now
16
+ @obj = PTJ::Tag.new(:tag => 'foo')
17
+ end
18
+
19
+ after :each do
20
+ @obj.destroy if @obj.saved?
21
+ end
22
+
23
+ it_should_behave_like "a valid ptj model"
24
+
25
+ end
26
+ end
27
+
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'ptj'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ class TestPtj < Test::Unit::TestCase
4
+ should "parse files correctly" do
5
+ flunk "gotta write this unit test. i fail."
6
+ end
7
+
8
+ should "be able to add files to the database correctly" do
9
+ flunk "gotta write this unit test. i fail."
10
+ end
11
+
12
+ should "have the external functions operate as expected" do
13
+ flunk "gotta write this unit test. i fail."
14
+ end
15
+
16
+ end
@@ -0,0 +1,68 @@
1
+
2
+ namespace :db do
3
+
4
+ $: << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
5
+
6
+ desc "Initialize the database model"
7
+ task :init => [:auto_upgrade!]
8
+
9
+ desc "Run DataMapper.auto_upgrade! (non-destructively applies model schema)"
10
+ task :auto_upgrade! do
11
+
12
+ require 'ptj/default_setup'
13
+ DataMapper.auto_upgrade!
14
+ puts "Database initialized"
15
+ end
16
+
17
+ namespace :size do
18
+ desc "Dump db record counts"
19
+ task :default do
20
+ require 'ptj/default_setup'
21
+ puts "Passwords: #{PTJ::Password.all.size}"
22
+ puts "Tags: #{PTJ::Tag.all.size}"
23
+ end
24
+
25
+ desc "Dump db record counts with debugging"
26
+ task :debug do
27
+ require 'ptj/default_setup'
28
+ time_now = Time.now
29
+ puts "Passwords: #{PTJ::Password.all.size}"
30
+ puts "Tags: #{PTJ::Tag.all.size}"
31
+ puts "Time Taken: #{Time.now - time_now} seconds."
32
+ end
33
+ end
34
+
35
+ desc "Backup the development database"
36
+ task :backup do
37
+ require 'date'
38
+ tarfile = DateTime.now.strftime("data/data-%F.%H.%M.%S.%2N.tar.bz2")
39
+ sh "tar -cjvf #{tarfile} data/ptj.db"
40
+ puts "* Backed up data in: #{tarfile}"
41
+ end
42
+
43
+ desc "Destructively re-initialize the default db setup (no backup)"
44
+ task :reinit! => [:clobber_db, :init]
45
+
46
+ desc "Less destructively re-initialize the default db setup with a backup"
47
+ task :reinit => [:backup, :clobber, :init]
48
+
49
+ desc "Clobber the development database"
50
+ task :clobber_db do
51
+ require 'ptj/default_setup'
52
+ require 'pathname'
53
+ require 'addressable/uri'
54
+
55
+ db_conn = PTJ::Env::CONFIG['db_conn']
56
+ if( db_conn.is_a?(String) and
57
+ (u=Addressable::URI.parse(db_conn)).scheme == 'sqlite' and
58
+ (path=Pathname.new(u.path)).file? )
59
+ sh "rm -f #{path}"
60
+ end
61
+ end
62
+
63
+ desc "Run DataMapper.auto_migrate! (destructively creates model schema)"
64
+ task :auto_migrate! do
65
+ require 'ptj/default_setup'
66
+ DataMapper.auto_migrate!
67
+ end
68
+ end
@@ -0,0 +1,8 @@
1
+
2
+ desc "Open an irb session preloaded with PTJ"
3
+ task :irb do
4
+ sh "irb -rubygems -I lib -I PTJ -r ptj/default_setup"
5
+ end
6
+
7
+
8
+
metadata ADDED
@@ -0,0 +1,263 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ptj
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Josh Grunzweig
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-08-29 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: shoulda
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.0.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: jeweler
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.6.2
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rcov
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: rspec
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 2.3.0
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: dm-core
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: dm-migrations
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: dm-types
95
+ requirement: &id008 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
+ name: dm-transactions
106
+ requirement: &id009 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: "0"
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
+ name: dm-aggregates
117
+ requirement: &id010 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: *id010
126
+ - !ruby/object:Gem::Dependency
127
+ name: dm-validations
128
+ requirement: &id011 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: "0"
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: *id011
137
+ - !ruby/object:Gem::Dependency
138
+ name: dm-serializer
139
+ requirement: &id012 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: "0"
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: *id012
148
+ - !ruby/object:Gem::Dependency
149
+ name: dm-timestamps
150
+ requirement: &id013 !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: "0"
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: *id013
159
+ - !ruby/object:Gem::Dependency
160
+ name: dm-sqlite-adapter
161
+ requirement: &id014 !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: "0"
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: *id014
170
+ - !ruby/object:Gem::Dependency
171
+ name: dm-postgres-adapter
172
+ requirement: &id015 !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: "0"
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: *id015
181
+ description: |-
182
+ An easy way to collect and analyze data about password
183
+ databases.
184
+ email: jgrunzweig@gmail.com
185
+ executables: []
186
+
187
+ extensions: []
188
+
189
+ extra_rdoc_files:
190
+ - LICENSE.txt
191
+ - README.rdoc
192
+ files:
193
+ - .document
194
+ - Gemfile
195
+ - Gemfile.lock
196
+ - LICENSE.txt
197
+ - README.rdoc
198
+ - Rakefile
199
+ - VERSION
200
+ - etc/config.yml
201
+ - lib/ptj.rb
202
+ - lib/ptj/default_setup.rb
203
+ - lib/ptj/environment.rb
204
+ - lib/ptj/ext.rb
205
+ - lib/ptj/ext/datamapper_collection.rb
206
+ - lib/ptj/model.rb
207
+ - lib/ptj/model/password.rb
208
+ - lib/ptj/model/tag.rb
209
+ - lib/ptj/model/tasks.rb
210
+ - lib/ptj/parser.rb
211
+ - lib/ptj/parser/fileparser.rb
212
+ - lib/ptj/parser/fileparser/countpassonly.rb
213
+ - lib/ptj/parser/fileparser/hashpassonlycolon.rb
214
+ - lib/ptj/parser/fileparser/passhashonly.rb
215
+ - lib/ptj/parser/fileparser/passonly.rb
216
+ - lib/ptj/parser/fileparser/passthreecolons.rb
217
+ - ptj.gemspec
218
+ - scripts/analyze.rb
219
+ - scripts/generate_wordlist.rb
220
+ - scripts/import.rb
221
+ - scripts/ptj_libpath.rb
222
+ - spec/.helper.rb.swp
223
+ - spec/.test_ptj.rb.swp
224
+ - spec/model/password_spec.rb
225
+ - spec/model/shared_behaviors.rb
226
+ - spec/model/tag_spec.rb
227
+ - spec/spec_helper.rb
228
+ - spec/spec_ptj.rb
229
+ - tasks/db.rake
230
+ - tasks/irb.rake
231
+ has_rdoc: true
232
+ homepage: http://github.com/jgrunzweig/ptj
233
+ licenses:
234
+ - MIT
235
+ post_install_message:
236
+ rdoc_options: []
237
+
238
+ require_paths:
239
+ - lib
240
+ required_ruby_version: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ hash: 536136881655303577
246
+ segments:
247
+ - 0
248
+ version: "0"
249
+ required_rubygems_version: !ruby/object:Gem::Requirement
250
+ none: false
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: "0"
255
+ requirements: []
256
+
257
+ rubyforge_project:
258
+ rubygems_version: 1.6.2
259
+ signing_key:
260
+ specification_version: 3
261
+ summary: Password analysis and collection database.
262
+ test_files: []
263
+