saml_camel 0.1.3 → 0.1.4
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 +4 -4
- data/app/controllers/concerns/saml_camel/saml_helpers.rb +18 -1
- data/app/controllers/saml_camel/saml_controller.rb +10 -4
- data/app/models/saml_camel/logging.rb +6 -0
- data/app/models/saml_camel/transaction.rb +0 -23
- data/app/views/saml_camel/saml/failure.html.erb +2 -0
- data/config/routes.rb +1 -0
- data/lib/saml_camel/version.rb +1 -1
- data/lib/tasks/saml_camel_tasks.rake +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9587f9aa4978c5bfc1ff83fd93490b77cfada4a0
|
4
|
+
data.tar.gz: d005f8ba385cd0443baeda86c668d002c7907857
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 012d8b91632f47e689f385cb1de8f82e7e99696579e11491ce94e54de0823f0b56f727bd25b5e748cc1c288db6debaf57f2aa5df3d7b83a3ffdc1a20514b779a
|
7
|
+
data.tar.gz: de3c6af5a1395e1a44502b9f85101f8e42d238362443ff7826037ec96d783712329ae028370365b2b514f4f338287e04247a3e906ae1b0dd04ac0e4bb8e2817e
|
@@ -7,7 +7,10 @@ module SamlCamel::SamlHelpers
|
|
7
7
|
|
8
8
|
#this generates a call to the idp, which will then be returned to the consume action the in saml_contorller
|
9
9
|
def saml_request(host_request)
|
10
|
+
relay_state = SecureRandom.base64.chomp.gsub( /\n/, '' ) #set relay state to secure against replay attack
|
11
|
+
session[:relay_state] = relay_state
|
10
12
|
request = OneLogin::RubySaml::Authrequest.new
|
13
|
+
|
11
14
|
secure_cookie = (Rails.env == "development" || Rails.env == "test") ? false : true
|
12
15
|
cookies.encrypted[:saml_camel_redirect] = {
|
13
16
|
value: host_request.url,
|
@@ -15,7 +18,21 @@ module SamlCamel::SamlHelpers
|
|
15
18
|
httponly: true
|
16
19
|
}
|
17
20
|
|
18
|
-
|
21
|
+
cookies.encrypted[:saml_camel_relay] = {
|
22
|
+
value: relay_state,
|
23
|
+
secure: secure_cookie,
|
24
|
+
httponly: true
|
25
|
+
}
|
26
|
+
|
27
|
+
saml_request = request.create(SamlCamel::Transaction.saml_settings) + "&RelayState=#{relay_state}"
|
28
|
+
redirect_to(saml_request)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def valid_relay_state(param_relay_state)
|
33
|
+
stored_relay = cookies.encrypted[:saml_camel_relay]
|
34
|
+
cookies.delete :saml_camel_relay
|
35
|
+
param_relay_state == stored_relay
|
19
36
|
end
|
20
37
|
|
21
38
|
|
@@ -13,7 +13,9 @@ module SamlCamel
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def consume
|
16
|
+
raise "Invalid RelayState" unless valid_relay_state(params[:RelayState])
|
16
17
|
redirect_path = cookies.encrypted[:saml_camel_redirect]
|
18
|
+
|
17
19
|
cookies.delete :saml_camel_redirect
|
18
20
|
response = OneLogin::RubySaml::Response.new(params[:SAMLResponse], :settings => saml_settings)
|
19
21
|
response.settings = saml_settings
|
@@ -38,7 +40,12 @@ module SamlCamel
|
|
38
40
|
rescue => e
|
39
41
|
session[:saml_success] = false
|
40
42
|
SamlCamel::Logging.auth_failure(e)
|
41
|
-
redirect_to
|
43
|
+
redirect_to action: "failure", locals:{errors: e}
|
44
|
+
end
|
45
|
+
|
46
|
+
def failure
|
47
|
+
@error = params[:locals][:errors]
|
48
|
+
# byebug
|
42
49
|
end
|
43
50
|
|
44
51
|
def logout
|
@@ -46,12 +53,11 @@ module SamlCamel
|
|
46
53
|
session[:saml_attributes] = nil
|
47
54
|
session[:sp_session] = nil
|
48
55
|
|
49
|
-
return_url = SamlCamel::Transaction.logout #this methods logs the user out of the IDP, and returns a url to be redirected to
|
50
|
-
redirect_to
|
56
|
+
# return_url = SamlCamel::Transaction.logout #this methods logs the user out of the IDP, and returns a url to be redirected to
|
57
|
+
redirect_to "https://shib.oit.duke.edu/cgi-bin/logout.pl"
|
51
58
|
end
|
52
59
|
|
53
60
|
def attr_check
|
54
|
-
|
55
61
|
end
|
56
62
|
|
57
63
|
|
@@ -7,16 +7,22 @@ module SamlCamel
|
|
7
7
|
def self.successfull_auth(saml_attrs)
|
8
8
|
logger = Logger.new("log/saml.log")
|
9
9
|
logger.info("#{saml_attrs[PRIMARY_ID]} has succesfully authenticated.")
|
10
|
+
rescue
|
11
|
+
logger.debug("Unknown Error During successfull_auth logging. Check PRIMARY_ID configured in settings.json and that user has attribute.")
|
10
12
|
end
|
11
13
|
|
12
14
|
def self.auth_failure(error_context)
|
13
15
|
logger = Logger.new("log/saml.log")
|
14
16
|
logger.error("An error occured during authentication. #{error_context}")
|
17
|
+
rescue
|
18
|
+
logger.debug("Unknown Error During auth_failure logging.")
|
15
19
|
end
|
16
20
|
|
17
21
|
def self.logout(saml_attrs)
|
18
22
|
logger = Logger.new("log/saml.log")
|
19
23
|
logger.info("#{saml_attrs[PRIMARY_ID]} has succesfully logged out.")
|
24
|
+
rescue
|
25
|
+
logger.debug("Unknown error logging user logout. Most likely anonymous user clicked a logout button.")
|
20
26
|
end
|
21
27
|
|
22
28
|
end
|
@@ -46,29 +46,6 @@ module SamlCamel
|
|
46
46
|
mapped_attributes
|
47
47
|
end
|
48
48
|
|
49
|
-
#currently duke specifc
|
50
|
-
#TODO use the regular idp based logout
|
51
|
-
#TODO httponly should always be set to true on cookies
|
52
|
-
#TODO securure should be set to true in non dev environments (ht
|
53
|
-
#TODO look at metadata file import,validate via cert
|
54
|
-
|
55
|
-
def self.logout
|
56
|
-
url = URI("https://shib.oit.duke.edu/cgi-bin/logout.pl")
|
57
|
-
|
58
|
-
http = Net::HTTP.new(url.host, url.port)
|
59
|
-
http.use_ssl = true
|
60
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
61
|
-
|
62
|
-
request = Net::HTTP::Post.new(url)
|
63
|
-
request["authorization"] = 'Basic c29hcC5pZG1zLm9pdDowRGFvdXU2Y1g4MEJ1Vkg2QlFaaA=='
|
64
|
-
request["content-type"] = 'application/x-www-form-urlencoded'
|
65
|
-
request["cache-control"] = 'no-cache'
|
66
|
-
request.body = "logoutWithoutPrompt=1"
|
67
|
-
|
68
|
-
response = http.request(request)
|
69
|
-
|
70
|
-
logout_return = SP_SETTINGS["settings"]["logout_return_url"]
|
71
|
-
end
|
72
49
|
|
73
50
|
end
|
74
51
|
end
|
data/config/routes.rb
CHANGED
data/lib/saml_camel/version.rb
CHANGED
@@ -10,6 +10,7 @@ namespace :saml_camel do
|
|
10
10
|
cert = generate_cert(key)
|
11
11
|
settings = generate_saml_settings.to_json
|
12
12
|
|
13
|
+
|
13
14
|
#TODO pull in specified idp certificate
|
14
15
|
# idp_cert = File.read("saml/idp_certs/#{ENV['idp']}.crt") if ENV['idp']
|
15
16
|
idp_cert = """MIIEWjCCA0KgAwIBAgIJAP1rB/FjRgy6MA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV
|
@@ -46,6 +47,7 @@ tA6SX0infqNRyPRNJK+bnQd1yOP4++tjD/lAPE+5tiD/waI3fArt43ZE/qp7pYMS
|
|
46
47
|
File.open("#{Rails.root}/saml/#{e}/saml_key.key","w+") {|f| f.write(key) }
|
47
48
|
File.open("#{Rails.root}/saml/#{e}/idp_certificate.crt","w+") {|f| f.write(idp_cert) }
|
48
49
|
File.open("#{Rails.root}/saml/#{e}/settings.json","w+") {|f| f.write(settings) }
|
50
|
+
File.open('.gitignore', 'a') { |f| f.write("saml/#{e}/saml_key.key\n") }
|
49
51
|
end
|
50
52
|
else
|
51
53
|
dir = "#{Rails.root}/saml/#{specified_env}"
|
@@ -54,6 +56,7 @@ tA6SX0infqNRyPRNJK+bnQd1yOP4++tjD/lAPE+5tiD/waI3fArt43ZE/qp7pYMS
|
|
54
56
|
File.open("#{Rails.root}/saml/#{specified_env}/saml_key.key","w+") {|f| f.write(key) }
|
55
57
|
File.open("#{Rails.root}/saml/#{specified_env}/idp_certificate.crt","w+") {|f| f.write(idp_cert) }
|
56
58
|
File.open("#{Rails.root}/saml/#{specified_env}/settings.json","w+") {|f| f.write(settings) }
|
59
|
+
File.open('.gitignore', 'a') { |f| f.write("saml/#{specified_env}/saml_key.key") }
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saml_camel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 'Danai Adkisson '
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- app/models/saml_camel/transaction.rb
|
92
92
|
- app/views/layouts/saml_camel/application.html.erb
|
93
93
|
- app/views/saml_camel/saml/attr_check.html.erb
|
94
|
+
- app/views/saml_camel/saml/failure.html.erb
|
94
95
|
- config/routes.rb
|
95
96
|
- lib/saml_camel.rb
|
96
97
|
- lib/saml_camel/engine.rb
|