wizdog 0.0.2

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,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in wizdog.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,16 @@
1
+ require "wizdog/version"
2
+ require 'wizdog/acl/aro'
3
+ require 'wizdog/acl/aco'
4
+ require 'wizdog/acl/entry'
5
+ require 'wizdog/acl/acl'
6
+ require 'wizdog/acl/ext/aro_model'
7
+ require 'wizdog/acl/ext/aco_model'
8
+ require 'wizdog/acl/ext/action'
9
+ require 'wizdog/authc/realm_model'
10
+ require 'wizdog/authc/security_context'
11
+ require "wizdog/authc/filter"
12
+ require 'wizdog/acl/menu_item'
13
+
14
+ module Wizdog
15
+ # Your code goes here...
16
+ end
@@ -0,0 +1,211 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+ module WizAcl
4
+ class Acl
5
+ @@serialize_path = File.join(File.dirname(__FILE__),"..","..","acl.yml")
6
+ attr_accessor :entries
7
+ def initialize
8
+ @entries = []
9
+ @entries << WizAcl::Entry.new("*", "*").deny("*")
10
+ #{aco_id => {:instance => aro, :parents => {prent_id => parent}, :children => {aro_id => aro}}}
11
+ @aros = {}
12
+ #{:instance => aco, :parent => aco_parent, :children => {}}
13
+ @acos = {}
14
+ end
15
+
16
+ def self.instance
17
+ #unserialize
18
+ @@__acl__ ||=new
19
+ end
20
+
21
+ def self.authorize(&block)
22
+ block.call(instance)
23
+ end
24
+
25
+ def self.unserialize
26
+ YAML.load_file(@@serialize_path)
27
+ end
28
+
29
+ def self.serialize
30
+ File.open(@@serialize_path,"w") do |io|
31
+ YAML.dump(@@__acl__, io)
32
+ end
33
+ end
34
+
35
+ def self.serialize_path=(path)
36
+ @@serialize_path = path
37
+ end
38
+
39
+ def add_aro(aro, parents = "*")
40
+ aro_id = aro.respond_to?(:aro_id) ? aro.aro_id.to_s : aro.to_s
41
+ @aros[aro_id] = @aros[aro_id] || {:instance => Aro.new(aro_id), :parents =>{}, :children =>{}}
42
+
43
+ parents = [parents] unless parents.is_a?(Array)
44
+ parents.each do |parent|
45
+ parent_id = parent.respond_to?(:aro_id) ? parent.aro_id.to_s : parent.to_s
46
+ @aros[parent_id] = @aros[parent_id] || {:instance => Aro.new(parent_id),:parents =>{}, :children =>{}}
47
+ @aros[aro_id][:parents][parent_id] = @aros[aro_id][:parents][parent_id] || @aros[parent_id][:instance]
48
+ @aros[parent_id][:children][aro_id] = @aros[aro_id][:children][aro_id] || @aros[aro_id][:instance]
49
+ end
50
+
51
+ end
52
+
53
+ def add_aco(aco, parents = "*")
54
+ aco = Aco.new(aco) unless aco.respond_to?(:aco_id)
55
+
56
+ @acos[aco.aco_id] = {:instance => aco, :parents =>{}, :children =>{}}
57
+
58
+ parents = [parents] unless parents.is_a?(Array)
59
+ parents.each do |parent|
60
+ parent = Aco.new(parent) unless parent.respond_to?(:aco_id)
61
+ @acos[parent.aco_id] = @acos[parent.aco_id] || {:instance => parent,:parents =>{}, :children =>{}}
62
+ @acos[aco.aco_id][:parents][parent.aco_id] = @acos[parent.aco_id][:instance]
63
+ @acos[parent.aco_id][:children][aco.aco_id] = @acos[aco.aco_id][:instance]
64
+ end
65
+ end
66
+
67
+ def get_aco(id)
68
+ @acos[id][:instance]
69
+ end
70
+
71
+ def get_parents_of_aco(id)
72
+ @acos[id][:parents].values
73
+ end
74
+
75
+ def get_children_of_aco(id)
76
+ @acos[id] ? @acos[id][:children].values : []
77
+ end
78
+
79
+ def allow(aros = "*", acos = "*", operations = "*")
80
+ aros = [aros] unless aros.is_a?(Array)
81
+ acos = [acos] unless acos.is_a?(Array)
82
+ aros.each do |aro|
83
+ acos.each do |aco|
84
+ entry = find_one_entry(aro, aco)
85
+ entry.nil? ? @entries << WizAcl::Entry.new(aro, aco).allow(operations) : entry.allow(operations)
86
+ end
87
+ end
88
+ end
89
+
90
+ def deny(aros = "*", acos = "*", operations = "*")
91
+ aros = [aros] unless aros.is_a?(Array)
92
+ acos = [acos] unless acos.is_a?(Array)
93
+ aros.each do |aro|
94
+ acos.each do |aco|
95
+ entry = find_one_entry(aro, aco)
96
+ entry.nil? ? @entries << WizAcl::Entry.new(aro, aco).deny(operations) : entry.deny(operations)
97
+ end
98
+ end
99
+ end
100
+
101
+ def allowed?(aro = "*", aco = "*", operation = "*")
102
+ ###
103
+ permit = dfs_permitted_by_aro(aro, aco, operation)
104
+ return permit unless permit.nil?
105
+
106
+ permit = permitted?("*", "*", operation)
107
+ return permit unless permit.nil?
108
+ end
109
+
110
+ def remove_allow(aro = "*", aco = "*", operations = "*")
111
+ entry = find_one_entry(aro,aco)
112
+ if entry && entry.privileges[operations.to_s] == :allow
113
+ entry.privileges.delete(operations.to_s)
114
+ @entries.delete(entry) if entry.privileges.empty?
115
+ end
116
+ end
117
+
118
+ def remove_deny(aro = "*", aco = "*", operations = "*")
119
+ entry = find_one_entry(aro,aco)
120
+ if entry && entry.privileges[operations.to_s] == :deny
121
+ entry.privileges.delete(operations.to_s)
122
+ @entries.delete(entry) if entry.privileges.empty?
123
+ end
124
+ end
125
+
126
+ def find_entries_by_aro(aro)
127
+ aro_id = aro.respond_to?(:aro_id) ? aro.aro_id.to_s : aro.to_s
128
+ @entries.select { |e| e.aro_id == aro_id }
129
+ end
130
+
131
+ def find_entries_by_aco(aco)
132
+ aco_id = aco.respond_to?(:aco_id) ? aco.aco_id.to_s : aco.to_s
133
+ @entries.select { |e| e.aco_id == aco_id }
134
+ end
135
+
136
+ private
137
+
138
+ def find_one_entry(aro = "*", aco = "*")
139
+ aro_id = aro.respond_to?(:aro_id) ? aro.aro_id.to_s : aro.to_s
140
+ aco_id = aco.respond_to?(:aco_id) ? aco.aco_id.to_s : aco.to_s
141
+ @entries.detect() { |e| e.aro_id == aro_id && e.aco_id == aco_id }
142
+ end
143
+
144
+ def permitted?(aro = "*", aco = "*", operation = "*")
145
+ entry = find_one_entry(aro, aco)
146
+ permit = entry.allowed?(operation) unless entry.nil?
147
+ return permit unless permit.nil?
148
+
149
+ entry = find_one_entry(aro, "*")
150
+ permit = entry.allowed?(operation) unless entry.nil?
151
+ return permit unless permit.nil?
152
+
153
+ entry = find_one_entry("*", aco)
154
+ permit = entry.allowed?(operation) unless entry.nil?
155
+ return permit unless permit.nil?
156
+
157
+ nil
158
+ end
159
+
160
+ def find_all_parents_by_aro(aro = "*")
161
+ aro_id = aro.respond_to?(:aro_id) ? aro.aro_id.to_s : aro.to_s
162
+ parents = @aros[aro_id] || {}
163
+ parents[:parents] || (aro.respond_to?(:aro_parents) ? aro.aro_parents : {})
164
+ end
165
+
166
+ def find_all_parents_by_aco(aco = "*")
167
+ aco_id = aco.respond_to?(:aco_id) ? aco.aco_id.to_s : aco.to_s
168
+ parents = @acos[aco_id] || {}
169
+ parents[:parents] || (aco.respond_to?(:aco_parents) ? aco.aco_parents : {})
170
+ end
171
+
172
+ #dfs
173
+ def dfs_permitted_by_aro(aro = "*", aco = "*", operation = "*")
174
+ permit = permitted?(aro, aco, operation)
175
+ return permit unless permit.nil?
176
+
177
+ aco_parents = find_all_parents_by_aco(aco)
178
+ aro_parents = find_all_parents_by_aro(aro)
179
+
180
+ aro_parents.each do |aro_parent_id,aro_parent|
181
+ permit = dfs_permitted_by_aro(aro_parent, aco, operation)
182
+ return permit unless permit.nil?
183
+ end
184
+
185
+ aco_parents.each do |aco_parent_id, aco_parent|
186
+ permit = dfs_permitted_by_aro(aro, aco_parent, operation)
187
+ return permit unless permit.nil?
188
+ aro_parents.each do |aro_parent_id,aro_parent|
189
+ permit = dfs_permitted_by_aro(aro_parent, aco_parent, operation)
190
+ return permit unless permit.nil?
191
+ end
192
+ end
193
+ nil
194
+ end
195
+
196
+ #bfs
197
+ def bfs_permitted_by_aro(aro = "*", aco = "*", operation = "*", queue = [])
198
+ return nil if aro.nil?
199
+
200
+ permit = permitted?(aro, aco, operation)
201
+ return permit unless permit.nil?
202
+
203
+ parents = find_all_parents_by_aro(aro)
204
+ parents.each do |parent_id, parent|
205
+ queue << parent_id
206
+ end
207
+
208
+ bfs_permitted_by_aro(queue.delete_at(0), aco, operation, queue)
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,16 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+ module WizAcl
4
+ class Aco
5
+ attr_accessor :aco_id, :name
6
+
7
+ def initialize(id = "*")
8
+ @aco_id = id
9
+ end
10
+
11
+ def aro_parents
12
+ {}
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAcl
5
+ class Aro
6
+ attr_accessor :aro_id
7
+
8
+ def initialize(id = "*")
9
+ @aro_id = id
10
+ end
11
+
12
+ def aro_parents
13
+ {}
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAcl
5
+ class Entry
6
+ attr_accessor :aro_id, :aco_id, :privileges
7
+
8
+ def initialize(aro = "*", aco = "*")
9
+ aro.respond_to?(:aro_id) ? @aro_id = aro.aro_id : @aro_id = aro.to_s
10
+ aco.respond_to?(:aco_id) ? @aco_id = aco.aco_id : @aco_id = aco.to_s
11
+ #{:operation => :permission}
12
+ @privileges = {}
13
+ end
14
+
15
+ def allow(operations = "*")
16
+ #@privileges << Privilege.new(operation, :allow)
17
+ privilege(operations, :allow)
18
+ return self
19
+ end
20
+
21
+ def deny(operations = "*")
22
+ #@privileges << Privilege.new(operation, :deny)
23
+ privilege(operations, :deny)
24
+ return self
25
+ end
26
+
27
+ def allowed?(operation = "*")
28
+ permission = @privileges[operation.to_s] || @privileges["*"]
29
+ return permission == :allow unless permission.nil?
30
+ nil
31
+ end
32
+
33
+ private
34
+
35
+ def privilege(operations = "*", permission = :deny)
36
+ operations = operations.to_a unless operations.is_a?(Array)
37
+ operations.each do |operation|
38
+ @privileges[operation.to_s] = permission
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,38 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+ module WizAcl
4
+ module AcoModel
5
+ def self.included(base)
6
+ base.class_eval do
7
+ include InstanceMethods
8
+ end
9
+ end
10
+
11
+ module InstanceMethods
12
+ def aco_id
13
+ "#{self.class.name}_#{id}"
14
+ end
15
+
16
+ def allow(aros = "*", operations = "*")
17
+ Acl.instance.allow(aros, self, operations)
18
+ end
19
+
20
+ def deny(aros = "*", operations = "*")
21
+ Acl.instance.deny(aros, self, operations)
22
+ end
23
+
24
+ def allowed?(aros = "*", operation = "*")
25
+ Acl.instance.allowed?(aros, self, operation)
26
+ end
27
+
28
+ def remove_allow(aros = "*", operations = "*")
29
+ Acl.instance.remove_allow(aros, self, operations)
30
+ end
31
+
32
+ def find_entries
33
+ Acl.instance.find_entries_by_aco(self)
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,47 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAcl
5
+ module Action
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ base.class_eval do
9
+ include InstanceMethods
10
+ before_filter :allowed?
11
+ end
12
+ end
13
+
14
+ module ClassMethods
15
+ def allow(aros = "*", actions = "*")
16
+ Acl.instance.allow(aros, controller_name, actions)
17
+ end
18
+
19
+ def deny(aros = "*", actions = "*")
20
+ Acl.instance.allow(aros, controller_name, actions)
21
+ end
22
+
23
+ def current_aro
24
+ session[:current_user]
25
+ end
26
+ end
27
+
28
+ module InstanceMethods
29
+ def aco_id
30
+ self.class.controller_name
31
+ end
32
+
33
+ def allow(aros = "*", actions = "*")
34
+ Acl.instance.allow(aros, self, actions)
35
+ end
36
+
37
+ def deny(aros = "*", actions = "*")
38
+ Acl.instance.deny(aros, self, actions)
39
+ end
40
+
41
+ def allowed?
42
+ Acl.instance.allowed?(self.class.current_aro, self, action_name)
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,45 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAcl
5
+ module AroModel
6
+ def self.included(base)
7
+ base.class_eval do
8
+ include InstanceMethods
9
+ end
10
+ end
11
+
12
+ module ClassMethods
13
+ def allow(acos = "*", operations = "*")
14
+ Acl.instance.allow(self.name, acos, operations)
15
+ end
16
+
17
+ def deny(acos = "*", operations = "*")
18
+ Acl.instance.allow(self.name, acos, operations)
19
+ end
20
+ end
21
+
22
+ module InstanceMethods
23
+ def aro_id
24
+ "#{self.class.name}_#{id}"
25
+ end
26
+
27
+ def allow(acos = "*", operations = "*")
28
+ Acl.instance.allow(self, acos, operations)
29
+ end
30
+
31
+ def deny(acos = "*", operations = "*")
32
+ Acl.instance.allow(self, acos, operations)
33
+ end
34
+
35
+ def allowed?(acos = "*", operation = "*")
36
+ Acl.instance.allowed?(self, acos, operation) || Acl.instance.allowed?(self.class.name, acos, operation)
37
+ end
38
+
39
+ def find_entries
40
+ Acl.instance.find_entries_by_aro(self)
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,27 @@
1
+ module WizAcl
2
+ class MenuItem < Aco
3
+ attr_accessor :url
4
+ alias_attribute :id, :aco_id
5
+
6
+ def initialize(attributes = {})
7
+ attributes.each do |name, value|
8
+ send("#{name}=", value)
9
+ end
10
+ end
11
+
12
+ def add(attributes = nil)
13
+ acl = WizAcl::Acl.instance
14
+ case attributes
15
+ when Hash
16
+ acl.add_aco(WizAcl::MenuItem.new(attributes), self)
17
+ when Array
18
+ attributes.each do |attribute|
19
+ add(attribute)
20
+ end
21
+ when WizAcl::Aco
22
+ acl.add_aco(attributes, self)
23
+ else
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class AuthcInfo
6
+ attr_accessor :principal, :credentials, :authenticated
7
+ def initialize(principal = nil, credentials = nil, authenticated = false)
8
+ @principal = principal
9
+ @credentials = credentials
10
+ @state = :fail
11
+ @authenticated = authenticated
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class Authenticator
6
+ include Singleton
7
+
8
+ attr_accessor :storage
9
+
10
+ def initialize
11
+ @storage = Thread.current[:identity]
12
+ end
13
+
14
+ #return authentication
15
+ def authenticate(realm)
16
+ authentication = realm.authenticate()
17
+ if authenticated?
18
+ storage = nil
19
+ end
20
+ if authentication.authenticated?
21
+ storage = authentication.identity
22
+ end
23
+ return authentication
24
+ end
25
+
26
+ def authenticated?
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+ module WizAuthc
4
+ module Filter
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ base.class_eval do
8
+ attr_accessor :current
9
+ include InstanceMethods
10
+ before_filter :activate_wiz_auth
11
+
12
+ end
13
+ end
14
+
15
+ module ClassMethods
16
+
17
+ end
18
+
19
+
20
+ module InstanceMethods
21
+
22
+ def authenticated?
23
+ WizAuthc::SecurityContext.current.authenticated?
24
+ end
25
+
26
+ private
27
+ def activate_wiz_auth
28
+ p self.session.to_s
29
+ WizAuthc::SecurityContext.init(self)
30
+ @current = WizAuthc::SecurityContext.current
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,49 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ module AuthcRealm
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ base.class_eval do
9
+ include InstanceMethods
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ def find_one_by_principal(principal)
15
+ first(:conditions => {:login => principal})
16
+ end
17
+
18
+ def authenticate(token, remembered = false)
19
+ user = find_one_by_principal(token.principal)
20
+ info = AuthcInfo.new()
21
+ if user && user.authenticate(token.credentials)
22
+ info.principal = {:identity => user.id, :type => user.class}
23
+ info.credentials = token.credentials
24
+ info.authenticated = true
25
+ end
26
+ return info
27
+ end
28
+ end
29
+
30
+ module InstanceMethods
31
+ attr_accessor :password, :password_confirmation
32
+
33
+ def authenticate(credential = nil)
34
+ self.credential == encrypt(credential)
35
+ end
36
+
37
+ # Encrypts the password with the user salt
38
+ def encrypt(password)
39
+ Digest::SHA1.hexdigest("--#{salt}--#{password}--")
40
+ end
41
+
42
+ def encrypt_password
43
+ self.password = '123456' if password.blank?
44
+ self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
45
+ self.crypted_password = encrypt(password)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,10 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class Realm
6
+ def initialize
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,79 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ module RealmModel
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ base.class_eval do
9
+ include InstanceMethods
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ # @@realm_map = {:principal => :name, :credential => :password, :remembered => false}
15
+ #:credential
16
+ # :principal
17
+ # :remembered
18
+ # @@realm_map = {}
19
+
20
+ # def set_realm_map(options = nil)
21
+ # # return unless options.is_a?(Hash)
22
+ # @@realm_map = @@realm_map.merge(options)
23
+ # # principal = options[:principal]
24
+ # # alias principal :principal
25
+ # # credential = options[:credential]
26
+ # # alias credential :credential
27
+ #
28
+ # end
29
+ #
30
+ # def get_realm_map
31
+ # @@realm_map
32
+ # end
33
+ #overide
34
+ def find_one_by_principal(principal)
35
+ where(:login => principal).first
36
+ end
37
+
38
+ def authenticate(principal=nil, credential=nil, remembered = false)
39
+ user = find_one_by_principal(principal)
40
+ p user
41
+ p principal
42
+ user && user.authenticate(credential) ? user : nil
43
+ end
44
+
45
+ end
46
+
47
+ module InstanceMethods
48
+ #attr_accessor :password, :password_confirmation
49
+ def authenticate(credential = nil)
50
+ self.credential == encrypt(credential)
51
+ # realm_map = self.class.get_realm_map
52
+ # my_principal = realm_map[:principal]
53
+ # my_credential = realm_map[:credential]
54
+ # if self.respond_to?(my_principal) && self.respond_to?(my_credential)
55
+ # if principal == self.send(my_principal) && credential == self.send(my_credential)
56
+ # return self.send(my_principal)
57
+ # end
58
+ # end
59
+ end
60
+
61
+ # attr_accessor :password, :password_confirmation
62
+
63
+
64
+
65
+ # Encrypts the password with the user salt
66
+ def encrypt(password)
67
+ Digest::SHA1.hexdigest("--#{salt}--#{password}--")
68
+ end
69
+
70
+ def encrypt_password
71
+ if new_record?
72
+ self.password = '123456' if self.password.blank?
73
+ self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--")
74
+ self.password = encrypt(self.password)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,81 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class SecurityContext
6
+ # @@ip = "0.0.0.0"
7
+ # @@contexts = {}
8
+ class << self
9
+ def env
10
+ Thread.current[:security_env_key]
11
+ end
12
+
13
+ def env=(value)
14
+ Thread.current[:security_env_key] = value
15
+ end
16
+
17
+ # def context
18
+ # Thread.current[:security_context_key]
19
+ # end
20
+
21
+ def current=(value)
22
+ # Thread.current[:security_context_key] = value
23
+ Thread.current[:security_contexts_key] = value
24
+ end
25
+
26
+ def session
27
+ env.session[:security_session_key] ||= {}
28
+ end
29
+ #
30
+ # def session=(value)
31
+ # Thread.current[:security_session_key] = value
32
+ # end
33
+
34
+ def current
35
+ Thread.current[:security_contexts_key]
36
+ end
37
+
38
+ def init(env)
39
+ self.env = env
40
+ self.current = Core::Account.new(self.session)
41
+ end
42
+
43
+
44
+
45
+
46
+
47
+ #--------------------------
48
+
49
+ def authenticate(realm, token)
50
+ authc_info = realm.authenticate(token)
51
+ # ctx = self.current
52
+ # unless ctx
53
+ # session = ctx.session
54
+ # end
55
+ ctx = self.new(authc_info.principal, authc_info.authenticated, env.session)
56
+ # env.session[:security_contexts_key] = ctx
57
+ self.current = ctx
58
+ end
59
+
60
+
61
+ end
62
+
63
+ attr_accessor :principal, :authenticated, :session
64
+
65
+ def initialize(principal, authenticated = nil, session = nil, ip = nil)
66
+ @principal = principal || nil
67
+ @authenticated = authenticated || false
68
+ @session = session
69
+ @ip = ip || "0.0.0.0"
70
+ @actived = false
71
+ end
72
+
73
+ def authenticated?
74
+ @authenticated
75
+ end
76
+
77
+ def user
78
+ @principal[:type].constantize.find(@principal[:identity])
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,25 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+ module WizAuthc
4
+ class SecuritySession
5
+ def initialize
6
+
7
+ end
8
+
9
+ class << self
10
+ def controller=(value)
11
+ Thread.current[:wiz_auth_controller] = value
12
+ end
13
+
14
+ ## The current controller object
15
+ def controller
16
+ Thread.current[:wiz_auth_controller]
17
+ end
18
+ end
19
+
20
+ private
21
+ def controller
22
+ self.class.controller
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,12 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class AuthcToken
6
+ attr_accessor :principal, :credentials
7
+ def initialize
8
+ @principal
9
+ @credentials
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class FormToken < AuthcToken
6
+ def initialize(login_name, password)
7
+ self.principal = login_name
8
+ self.credentials = password
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class RailsEnv < WebEnv
6
+ def session
7
+ self.env.session
8
+ end
9
+
10
+ def cookies
11
+ self.env.send(:cookies)
12
+ end
13
+
14
+ def request
15
+ self.env.request
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ module WizAuthc
5
+ class WebEnv
6
+ attr_accessor :env
7
+
8
+ #env = controller
9
+ def initialize(env)
10
+ @env = env
11
+ end
12
+
13
+ # def session
14
+ #
15
+ # end
16
+
17
+
18
+
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+
2
+ module WizMenu
3
+ class Menu
4
+
5
+
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Wizdog
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "wizdog/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "wizdog"
7
+ s.version = Wizdog::VERSION
8
+ s.authors = ["songgz"]
9
+ s.email = ["sgzhe@163.com"]
10
+ s.homepage = "http://github.com/songgz/wizdog"
11
+ s.summary = "Flexible authentication solution for Rails"
12
+ s.description = "Flexible authentication solution for Rails"
13
+
14
+ s.rubyforge_project = "wizdog"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wizdog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - songgz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-12 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Flexible authentication solution for Rails
15
+ email:
16
+ - sgzhe@163.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - Rakefile
24
+ - lib/wizdog.rb
25
+ - lib/wizdog/acl/acl.rb
26
+ - lib/wizdog/acl/aco.rb
27
+ - lib/wizdog/acl/aro.rb
28
+ - lib/wizdog/acl/entry.rb
29
+ - lib/wizdog/acl/ext/aco_model.rb
30
+ - lib/wizdog/acl/ext/action.rb
31
+ - lib/wizdog/acl/ext/aro_model.rb
32
+ - lib/wizdog/acl/menu_item.rb
33
+ - lib/wizdog/authc/authc_info.rb
34
+ - lib/wizdog/authc/authenticator.rb
35
+ - lib/wizdog/authc/filter.rb
36
+ - lib/wizdog/authc/realm/authc_realm.rb
37
+ - lib/wizdog/authc/realm/realm.rb
38
+ - lib/wizdog/authc/realm_model.rb
39
+ - lib/wizdog/authc/security_context.rb
40
+ - lib/wizdog/authc/security_session.rb
41
+ - lib/wizdog/authc/token/authc_token.rb
42
+ - lib/wizdog/authc/token/form_token.rb
43
+ - lib/wizdog/authc/web/rails_env.rb
44
+ - lib/wizdog/authc/web/web_env.rb
45
+ - lib/wizdog/menu/menu.rb
46
+ - lib/wizdog/version.rb
47
+ - wizdog.gemspec
48
+ homepage: http://github.com/songgz/wizdog
49
+ licenses: []
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project: wizdog
68
+ rubygems_version: 1.8.21
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Flexible authentication solution for Rails
72
+ test_files: []