Class: JunglePath::Authentication::AuthProvider::Default

Inherits:
Object
  • Object
show all
Defined in:
lib/jungle_path/authentication/auth_provider/default.rb

Instance Method Summary collapse

Instance Method Details

#authenticate(request, data_provider, no_cache = false) ⇒ Object



5
6
7
8
9
10
11
12
13
14
# File 'lib/jungle_path/authentication/auth_provider/default.rb', line 5

def authenticate request, data_provider, no_cache=false
	puts "JunglePath::Authentication::AuthProvider::Default.authenticate"
	remote_user = request.env['REMOTE_USER']
	remote_password = request.env['REMOTE_PASSWORD']
	puts "remote_user: #{remote_user}."
	puts "remote_password: #{remote_password}."
	identity = basic_authentication(data_provider, remote_user, remote_password, no_cache)
	identity = basic_authentication(data_provider, remote_user, remote_password, true) unless identity and identity.valid?
	identity
end

#authenticate_identity(data_provider, identity, assume_identity = false, no_cache = false) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/jungle_path/authentication/auth_provider/default.rb', line 60

def authenticate_identity data_provider, identity, assume_identity=false, no_cache=false
	idn = nil
	if identity
		idn = identity.dup
		if user_name_is_key? identity.user_name, identity.remote_password
			idn.user = data_provider.get_user_by_key(identity.user_name, assume_identity, no_cache, identity.remote_password)
			idn.key = identity.user_name
		else
			idn.user = data_provider.get_user(identity.user_name, identity.remote_password, assume_identity, no_cache)
			idn.key = nil
		end
		idn.valid = (idn.user and idn.user.is_valid)
		if idn.valid
			idn.alternative_user_keys = data_provider.get_alternative_user_keys(idn.user.id, no_cache) if data_provider.respond_to?('get_alternative_user_keys')
		end
	end
	idn
end

#authorize_identity(data_provider, identity, no_cache) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/jungle_path/authentication/auth_provider/default.rb', line 79

def authorize_identity data_provider, identity, no_cache
	idn = nil
	if identity
		idn = identity.dup
		if idn.valid?
			idn.role = data_provider.get_role(idn, no_cache)
			idn.authorization_filter = data_provider.get_authorization_filter(idn, no_cache)
			idn.query_filters = data_provider.get_query_filters(idn, no_cache)
			idn.table_filters = data_provider.get_table_filters(idn, no_cache) if data_provider.respond_to?('get_table_filters')
		else
			idn.role = nil
			idn.authorization_filter = nil
			idn.query_filters = nil
			idn.table_filters = nil
		end
	end
	idn
end

#basic_authentication(data_provider, remote_user, remote_password, no_cache = false) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/jungle_path/authentication/auth_provider/default.rb', line 16

def basic_authentication data_provider, remote_user, remote_password, no_cache=false
	identity, assume_identity = parse_identities(remote_user, remote_password)

	puts "identity: #{identity}"
	puts "assume_identity: #{assume_identity}"

	#valid = false

	identity = authenticate_identity(data_provider, identity, false, no_cache)
	puts "authenticated identity: #{identity}."
	identity = authorize_identity(data_provider, identity, no_cache)
	puts "authorized identity: #{identity}."

	if identity and identity.valid? and assume_identity
		if identity.authorization_filter.has_permission?(:assume_user_identity) and !identity.authorization_filter.has_restriction?(:assume_user_identity)
			assume_identity = authenticate_identity(data_provider, assume_identity, true, no_cache)
			puts "authenticated assume_identity: #{assume_identity}."
			assume_identity = authorize_identity(data_provider, assume_identity, no_cache)
			assume_identity.valid = false unless assume_identity.authorization_filter.has_permission?(:assumable_user_identity) and !assume_identity.authorization_filter.has_restriction?(:assumable_user_identity)
			puts "authorized assume_identity: #{assume_identity}."
		end
		return assume_identity
	end
	identity
end

#parse_identities(remote_user, remote_password) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/jungle_path/authentication/auth_provider/default.rb', line 42

def parse_identities remote_user, remote_password
	identity = JunglePath::Authentication::Identity.new
	identity.remote_user = remote_user
	identity.remote_password = remote_password
	assume_identity = nil
	if remote_user and remote_user.include?("|")
		parts = remote_user.split('|')
		identity.user_name = parts[1]
		assume_identity = JunglePath::Authentication::Identity.new
		assume_identity.user_name = parts[0]
		assume_identity.remote_user = remote_user
		assume_identity.remote_password = nil
	else
		identity.user_name = remote_user
	end
	return identity, assume_identity
end

#user_name_is_key?(user_name, password) ⇒ Boolean

Returns:

  • (Boolean)


98
99
100
101
# File 'lib/jungle_path/authentication/auth_provider/default.rb', line 98

def user_name_is_key? user_name, password
	#puts "user_name: #{user_name}, password: #{password}. password == nil: #{password == nil}."
	user_name and user_name.start_with?("sk_") and !user_name.include?("@") and (password == nil or password.strip.length == 0)
end