invision_bridge 0.2.1 → 0.3.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.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # InvisionBridge
2
2
 
3
- Allows your [Authlogic](http://github.com/binarylogic/authlogic)-based User model to authenticate using an [IP.Board](http://www.invisionpower.com/) 3.x database.
3
+ Allows your [Authlogic](http://github.com/binarylogic/authlogic)-based user model to authenticate using an [IP.Board](http://www.invisionpower.com/) 3.x database.
4
4
 
5
5
  ## Usage
6
6
 
@@ -37,16 +37,19 @@ Modify your `config/database.yml` file to include your IP.Board database informa
37
37
 
38
38
  ### Model creation
39
39
 
40
- Modify or create your User model to inherit from `InvisionBridge::User::Base`
40
+ Modify or create your User model to include `InvisionBridge`
41
41
 
42
- class User < InvisionBridge::User::Base
42
+ class User < ActiveRecord::Base
43
+ include InvisionBridge
43
44
  end
44
45
 
45
46
  That's it. You can further customize your model as needed. For example, you may
46
47
  have a group of administrators on your forum that you want to be administrators
47
48
  in your Rails application.
48
49
 
49
- class User < InvisionBridge::User::Base
50
+ class User < ActiveRecord::Base
51
+ include InvisionBridge
52
+
50
53
  ADMIN_GROUP = 1
51
54
 
52
55
  def is_admin?
@@ -54,6 +57,10 @@ in your Rails application.
54
57
  end
55
58
  end
56
59
 
60
+ ### ORM Adapters
61
+
62
+ Currently InvisionBridge only works with ActiveRecord models. I'd love to add a DataMapper adapter if/when I need one.
63
+
57
64
  ## Known Issues
58
65
 
59
66
  While using this in my own production application, I'd occasionally get "MySQL
@@ -63,4 +70,4 @@ but I was able to make the error stop appearing by adding `reconnect: true` to t
63
70
 
64
71
  ## Credits
65
72
 
66
- Copyright (c) 2010 Robert Speicher, released under the MIT license
73
+ Copyright (c) 2010 Robert Speicher, released under the MIT license
data/Rakefile CHANGED
@@ -1,18 +1,6 @@
1
1
  require 'rake'
2
2
  require 'rake/rdoctask'
3
3
 
4
- gem 'rspec-rails', '>= 1.0.0'
5
- require 'spec/rake/spectask'
6
-
7
- desc 'Default: run unit tests.'
8
- task :default => :spec
9
-
10
- desc 'Test the invision_bridge plugin.'
11
- Spec::Rake::SpecTask.new('spec') do |t|
12
- t.spec_files = FileList['spec/**/*_spec.rb']
13
- t.spec_opts = ["-c"]
14
- end
15
-
16
4
  desc 'Generate documentation for the invision_bridge plugin.'
17
5
  Rake::RDocTask.new(:rdoc) do |rdoc|
18
6
  rdoc.rdoc_dir = 'rdoc'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{invision_bridge}
8
- s.version = "0.2.1"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Robert Speicher"]
12
- s.date = %q{2010-08-18}
12
+ s.date = %q{2010-09-24}
13
13
  s.description = %q{Allows your Authlogic-based User model to authenticate using an IP.Board 3.x database.}
14
14
  s.email = %q{rspeicher@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -22,28 +22,17 @@ Gem::Specification.new do |s|
22
22
  "VERSION",
23
23
  "config/database.yml.example",
24
24
  "init.rb",
25
- "install.rb",
26
25
  "invision_bridge.gemspec",
26
+ "lib/authlogic/crypto_providers/invision_power_board.rb",
27
27
  "lib/invision_bridge.rb",
28
- "lib/invision_bridge/crypto_provider.rb",
29
- "lib/invision_bridge/invision_bridge.rb",
30
- "lib/invision_bridge/rails.rb",
31
- "lib/invision_bridge/user/base.rb",
32
- "rails/init.rb",
33
- "spec/invision_bridge/crypto_provider_spec.rb",
34
- "spec/spec.opts",
35
- "spec/spec_helper.rb",
36
- "uninstall.rb"
28
+ "lib/invision_bridge/active_record.rb",
29
+ "rails/init.rb"
37
30
  ]
38
31
  s.homepage = %q{http://github.com/tsigo/invision_bridge}
39
32
  s.rdoc_options = ["--charset=UTF-8"]
40
33
  s.require_paths = ["lib"]
41
34
  s.rubygems_version = %q{1.3.7}
42
35
  s.summary = %q{Allows your Authlogic-based User model to authenticate using an IP.Board 3.x database.}
43
- s.test_files = [
44
- "spec/invision_bridge/crypto_provider_spec.rb",
45
- "spec/spec_helper.rb"
46
- ]
47
36
 
48
37
  if s.respond_to? :specification_version then
49
38
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -8,18 +8,18 @@ module Authlogic
8
8
  tokens = tokens.flatten
9
9
  digest = tokens.shift
10
10
  digest = filter_input(digest)
11
-
11
+
12
12
  # Invision's hash: MD5(MD5(salt) + MD5(raw))
13
13
  digest = Digest::MD5.hexdigest(Digest::MD5.hexdigest(tokens.join('')) + Digest::MD5.hexdigest(digest))
14
-
14
+
15
15
  digest
16
16
  end
17
-
17
+
18
18
  # Does the crypted password match the tokens? Uses the same tokens that were used to encrypt.
19
19
  def matches?(crypted, *tokens)
20
20
  encrypt(*tokens) == crypted
21
21
  end
22
-
22
+
23
23
  private
24
24
  def filter_input(input)
25
25
  # Invision's input filtering replaces a bunch of characters before
@@ -46,4 +46,4 @@ module Authlogic
46
46
  end
47
47
  end
48
48
  end
49
- end
49
+ end
@@ -1,2 +1,40 @@
1
1
  require 'authlogic'
2
- require 'invision_bridge/crypto_provider'
2
+ require 'authlogic/crypto_providers/invision_power_board'
3
+
4
+ module InvisionBridge
5
+ autoload :ActiveRecord, 'invision_bridge/active_record'
6
+
7
+ def self.config
8
+ if @config.nil?
9
+ if Rails
10
+ config_file = File.join(Rails.root, 'config', 'database.yml')
11
+ config_group = "invision_bridge_#{Rails.env}"
12
+ else
13
+ config_file = File.join(File.dirname(__FILE__), '..', '..', 'config', 'database.yml')
14
+ config_group = "invision_bridge"
15
+ end
16
+
17
+ config = YAML::load(File.open(config_file))
18
+ config = config[config_group]
19
+
20
+ if config.nil?
21
+ raise "** [InvisionBridge] Unable to read database configuration from #{config_file} -- Make sure an #{config_group} definition exists."
22
+ else
23
+ config['prefix'] ||= 'ibf_'
24
+ end
25
+
26
+ @config = config
27
+ end
28
+
29
+ @config
30
+ end
31
+
32
+ def self.included(base)
33
+ if base.respond_to? :establish_connection
34
+ base.send(:include, InvisionBridge::ActiveRecord)
35
+ else
36
+ raise "** [InvisionBridge] Currently we only support ActiveRecord models. Sorry."
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,23 @@
1
+ module InvisionBridge
2
+ module ActiveRecord
3
+ def self.included(base)
4
+ base.class_eval do
5
+ establish_connection(InvisionBridge.config)
6
+
7
+ # IP.Board database design, grumble grumble
8
+ set_table_name "#{InvisionBridge.config['prefix']}members"
9
+ set_primary_key "member_id"
10
+
11
+ # Configure Authlogic
12
+ attr_accessible :name, :login, :password, :password_confirmation
13
+ acts_as_authentic do |c|
14
+ c.crypto_provider = Authlogic::CryptoProviders::InvisionPowerBoard
15
+ c.login_field = :name
16
+ c.crypted_password_field = :members_pass_hash
17
+ c.password_salt_field = :members_pass_salt
18
+ c.validate_password_field = false
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1 +1 @@
1
- require 'invision_bridge/rails'
1
+ require 'invision_bridge'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invision_bridge
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Robert Speicher
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-18 00:00:00 -04:00
18
+ date: 2010-09-24 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -47,18 +47,11 @@ files:
47
47
  - VERSION
48
48
  - config/database.yml.example
49
49
  - init.rb
50
- - install.rb
51
50
  - invision_bridge.gemspec
51
+ - lib/authlogic/crypto_providers/invision_power_board.rb
52
52
  - lib/invision_bridge.rb
53
- - lib/invision_bridge/crypto_provider.rb
54
- - lib/invision_bridge/invision_bridge.rb
55
- - lib/invision_bridge/rails.rb
56
- - lib/invision_bridge/user/base.rb
53
+ - lib/invision_bridge/active_record.rb
57
54
  - rails/init.rb
58
- - spec/invision_bridge/crypto_provider_spec.rb
59
- - spec/spec.opts
60
- - spec/spec_helper.rb
61
- - uninstall.rb
62
55
  has_rdoc: true
63
56
  homepage: http://github.com/tsigo/invision_bridge
64
57
  licenses: []
@@ -93,6 +86,5 @@ rubygems_version: 1.3.7
93
86
  signing_key:
94
87
  specification_version: 3
95
88
  summary: Allows your Authlogic-based User model to authenticate using an IP.Board 3.x database.
96
- test_files:
97
- - spec/invision_bridge/crypto_provider_spec.rb
98
- - spec/spec_helper.rb
89
+ test_files: []
90
+
data/install.rb DELETED
@@ -1 +0,0 @@
1
- # Install hook code here
@@ -1,34 +0,0 @@
1
- module InvisionBridge
2
- module Base
3
- def self.included(base)
4
- base.extend(ClassMethods)
5
- end
6
-
7
- module ClassMethods
8
- def establish_bridge()
9
- if Rails
10
- config_file = Rails.configuration.database_configuration_file
11
- config_group = "invision_bridge_#{Rails.env}"
12
- else
13
- config_file = File.join(File.dirname(__FILE__), '..', '..', 'config', 'database.yml')
14
- config_group = "invision_bridge"
15
- end
16
-
17
- config = YAML::load(File.open(config_file))
18
- config = config[config_group]
19
-
20
- if config.nil?
21
- raise "Unable to read database configuration from #{config_file} -- Make sure an #{config_group} definition exists."
22
- else
23
- config['prefix'] ||= 'ibf_'
24
- end
25
-
26
- establish_connection(config)
27
-
28
- unloadable # http://www.dansketcher.com/2009/05/11/cant-dup-nilclass/
29
- set_table_name "#{config['prefix']}members"
30
- set_primary_key "member_id"
31
- end
32
- end
33
- end
34
- end
@@ -1,3 +0,0 @@
1
- require 'invision_bridge'
2
- require 'invision_bridge/invision_bridge'
3
- require 'invision_bridge/user/base'
@@ -1,27 +0,0 @@
1
- module InvisionBridge
2
- module User
3
- class Base < ActiveRecord::Base
4
- self.abstract_class = true
5
-
6
- include InvisionBridge::Base
7
- establish_bridge
8
-
9
- # Authlogic -----------------------------------------------------------------
10
- attr_accessible :login, :password, :password_confirmation
11
- acts_as_authentic do |c|
12
- c.crypto_provider = Authlogic::CryptoProviders::InvisionPowerBoard
13
- c.login_field = :name
14
- c.crypted_password_field = :members_pass_hash
15
- c.password_salt_field = :members_pass_salt
16
- c.validate_password_field = false
17
- end
18
-
19
- # ---------------------------------------------------------------------------
20
- # Override some AR methods; we don't want to mess with Invision's integrity
21
- def destroy; end
22
- def delete; end
23
- def self.destroy_all; end
24
- def self.delete_all; end
25
- end
26
- end
27
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Authlogic::CryptoProviders::InvisionPowerBoard do
4
- it "should encrypt" do
5
- Authlogic::CryptoProviders::InvisionPowerBoard.encrypt("mypass").should be_true
6
- end
7
-
8
- it "should match expected output" do
9
- hash = Authlogic::CryptoProviders::InvisionPowerBoard.encrypt("mypass")
10
- Authlogic::CryptoProviders::InvisionPowerBoard.matches?(hash, "mypass").should be_true
11
- end
12
-
13
- it "should filter characters" do
14
- pass = '?&amp;!&><"!\''
15
- hash = Authlogic::CryptoProviders::InvisionPowerBoard.encrypt(pass)
16
- Authlogic::CryptoProviders::InvisionPowerBoard.matches?(hash, pass).should be_true
17
- end
18
- end
@@ -1,3 +0,0 @@
1
- --colour
2
- --reverse
3
- --backtrace
@@ -1,6 +0,0 @@
1
- require 'rubygems'
2
- require 'spec'
3
- require 'invision_bridge'
4
-
5
- $: << File.join(File.dirname(__FILE__), '..', 'lib')
6
- require File.join(File.dirname(__FILE__), '..', 'init')
@@ -1 +0,0 @@
1
- # Uninstall hook code here