saml_camel 1.0.0 → 1.0.1

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,36 @@
1
+ {
2
+ "_comment": "note you will need to restart the application when you make changes to this file",
3
+ "settings": {
4
+ "acs": "http://localhost:3000/saml/consumeSaml",
5
+ "raw_response_acs": "http://localhost:3000/saml/consumeSaml/rawResponse",
6
+ "entity_id": "https://dummycamel.com",
7
+ "sso_url": "https://shib.oit.duke.edu/idp/profile/SAML2/Redirect/SSO",
8
+ "logout_url": "https://shib.oit.duke.edu/cgi-bin/logout.pl",
9
+ "primary_id": "eduPersonPrincipalName",
10
+ "sp_session_timeout": 1,
11
+ "sp_session_lifetime": 8,
12
+ "test_auth_path": true,
13
+ "saml_logging": true,
14
+ "debug": false
15
+ },
16
+ "attribute_map": {
17
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.9": "eduPersonScopedAffiliation",
18
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.6": "eduPersonPrincipalName",
19
+ "urn:oid:2.5.4.3": "cn",
20
+ "urn:oid:0.9.2342.19200300.100.1.1": "uid",
21
+ "urn:oid:0.9.2342.19200300.100.1.3": "mail",
22
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.5": "eduPersonPrimaryAffiliation",
23
+ "urn:oid:2.16.840.1.113730.3.1.241": "displayName",
24
+ "urn:mace:duke.edu:idms:unique-id": "duDukeID",
25
+ "urn:mace:duke.edu:idms:dku-id": "dku-id",
26
+ "urn:oid:1.3.6.1.4.1.5923.1.5.1.1": "isMemberOf",
27
+ "urn:oid:2.5.4.42": "givenName",
28
+ "urn:oid:2.5.4.4": "sn",
29
+ "urn:oid:2.5.4.11": "ou",
30
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.1": "eduPersonAffiliation",
31
+ "urn:oid:2.5.4.20": "telephoneNumber",
32
+ "urn:oid:2.5.4.12": "title",
33
+ "urn:mace:duke.edu:idms:middle-name1": "duMiddleName1",
34
+ "urn:mace:duke.edu:idms:proxy-token": "duProxyToken"
35
+ }
36
+ }
@@ -0,0 +1,25 @@
1
+ MIIEWjCCA0KgAwIBAgIJAP1rB/FjRgy6MA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV
2
+ BAYTAlVTMRcwFQYDVQQIEw5Ob3J0aCBDYXJvbGluYTEPMA0GA1UEBxMGRHVyaGFt
3
+ MRgwFgYDVQQKEw9EdWtlIFVuaXZlcnNpdHkxDDAKBgNVBAsTA09JVDEaMBgGA1UE
4
+ AxMRc2hpYi5vaXQuZHVrZS5lZHUwHhcNMTAwOTA5MTI0NDU1WhcNMjgwOTA0MTI0
5
+ NDU1WjB7MQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzAN
6
+ BgNVBAcTBkR1cmhhbTEYMBYGA1UEChMPRHVrZSBVbml2ZXJzaXR5MQwwCgYDVQQL
7
+ EwNPSVQxGjAYBgNVBAMTEXNoaWIub2l0LmR1a2UuZWR1MIIBIjANBgkqhkiG9w0B
8
+ AQEFAAOCAQ8AMIIBCgKCAQEAt+hnl6gSRi0Y8VuNl6PCPYejj7VfVs/y8bRa5zAY
9
+ RHwb75+vBSs2j1yeUcSore9Ba5Ni7v947V34afRMGRPOqr4TEDZxU+1Bg0zAvSrR
10
+ n4Y8B+zyJuhtOpmOZzTwE9o/Oc+CB4kYV/K0woKZdcoxHJm8TbqBqdxU4fFYUlNU
11
+ o4Dr5jRdCSr9MHBOqGWXtQMg16qYNB7StNk4twY29FNnpZwkVTfsE76uVsRMkG8i
12
+ 6/RiHpXZ/ioOOqndptbEGdsOIE3ivAJOZdvYwnDe5NnTH06P01HsxH3OOnYqhuG2
13
+ J6qdhqoelGeHRG+jfl8YkYXCcKQvja2tJ5G+6iqSN7DP6QIDAQABo4HgMIHdMB0G
14
+ A1UdDgQWBBQHYXwB6otkfyMOmUI59j8823hFRDCBrQYDVR0jBIGlMIGigBQHYXwB
15
+ 6otkfyMOmUI59j8823hFRKF/pH0wezELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5v
16
+ cnRoIENhcm9saW5hMQ8wDQYDVQQHEwZEdXJoYW0xGDAWBgNVBAoTD0R1a2UgVW5p
17
+ dmVyc2l0eTEMMAoGA1UECxMDT0lUMRowGAYDVQQDExFzaGliLm9pdC5kdWtlLmVk
18
+ dYIJAP1rB/FjRgy6MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG7q
19
+ wJpiSLJbx2gj/cGDYeuBW/CeRGNghjQ/mb076P3WXsRNPAimcXulSUbQkS6eDH4t
20
+ Ifvsa0jf4FRsEOwH/x8354/0wyv4RwuavX25kjpmoFn3O+eKokyzsc7/Q2gsm0mv
21
+ V8XQo+5b+4we8AFYlAVp26nLeIqAiJM8xZJ9yHuzVL1O4yxIWIKECWHLqY5+1nas
22
+ XNiLURrHhsK5pZUPLuhzJFgZuJT62TtnrjJXlrRhJ389VSkh6R64C6ncjNkg6/Cu
23
+ tA6SX0infqNRyPRNJK+bnQd1yOP4++tjD/lAPE+5tiD/waI3fArt43ZE/qp7pYMS
24
+ 9TEfyQ5QpfRYAUFWXBc=
25
+
@@ -0,0 +1,28 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEuTCCA6GgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBnTELMAkGA1UEBhMCVVMx
3
+ FzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQHDAZEdXJoYW0xGDAWBgNV
4
+ BAoMD0R1a2UgVW5pdmVyc2l0eTEMMAoGA1UECwwDT0lUMR0wGwYDVQQDDBRzYW1s
5
+ IGNhbWVsIGR1bW15IGFwcDEdMBsGCSqGSIb3DQEJARYOZGExMjlAZHVrZS5lZHUw
6
+ HhcNMTgwNTIyMTcxMDMwWhcNMTkwNTIyMTcxMDMwWjCBnTELMAkGA1UEBhMCVVMx
7
+ FzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQHDAZEdXJoYW0xGDAWBgNV
8
+ BAoMD0R1a2UgVW5pdmVyc2l0eTEMMAoGA1UECwwDT0lUMR0wGwYDVQQDDBRzYW1s
9
+ IGNhbWVsIGR1bW15IGFwcDEdMBsGCSqGSIb3DQEJARYOZGExMjlAZHVrZS5lZHUw
10
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+OHs74gT5AmdSsLgHETvX
11
+ 50+S0NgWp5dcovfuMYFV+1CFX1MhgjhBQSwkA9U/0pfKf/eoU18O2gI2y46OK8j2
12
+ e5oyUuKv1UQWe2RHKvxvNrwvvUVcLY4mJDZf0d4q6EyTVo2aWHwoskxnQpjbusgp
13
+ Vq178Jfaeu/QaiBtq82vPlu0tfCeOXIyEdyRiOyc2bQvS5MW6FvzWtgatiNUnJJe
14
+ sBM/JUiFOvf3qG7LHEzpaIBmoHBwxG5b3yjrGgGTdw+5gyXdPEwEeiTddMvYlXWM
15
+ t+VMoTmsaBxrXRJBvpLxGWHZRb0VcoVTqWjcKVD/hR0A7H6ogaoOatHDWM41b3ZL
16
+ AgMBAAGjggEAMIH9MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFGh/Y36w7wcL
17
+ nLXFC0dUpboAAV+ZMIHKBgNVHSMEgcIwgb+AFGh/Y36w7wcLnLXFC0dUpboAAV+Z
18
+ oYGjpIGgMIGdMQswCQYDVQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmEx
19
+ DzANBgNVBAcMBkR1cmhhbTEYMBYGA1UECgwPRHVrZSBVbml2ZXJzaXR5MQwwCgYD
20
+ VQQLDANPSVQxHTAbBgNVBAMMFHNhbWwgY2FtZWwgZHVtbXkgYXBwMR0wGwYJKoZI
21
+ hvcNAQkBFg5kYTEyOUBkdWtlLmVkdYIBADANBgkqhkiG9w0BAQsFAAOCAQEAFE/X
22
+ DPipapLFDnu2jCMR4lhDeEF2Pm1DIibiy6ZvmzCstj++MYOI7gKkUgeUUhFTEQIV
23
+ fZIo5gIWkyoPVOwGALLTme01Tdk3Mul4pV0iqMn4k3F9NsC9wRy4WR2yPF9GYa/e
24
+ ktK+ZBYt/2SZA4vS5q63jsMC0TjkrTGJokXohwScWDc4kIFfvU6biWW7zBCVfpaa
25
+ YfsLYNBTbZ7VqEVFzcpYv8LBTOYoToAS5+yuAwrIdPEfqx3R4tIwGCik4tSByQFO
26
+ i/VvEL5rTWhmUrKPh1hriPVYZ9gW2Mk87Snlyswsqv5d8+ITVgF+RL+cutUA29C+
27
+ moSLPLaWINlhqvuRXw==
28
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEogIBAAKCAQEAvjh7O+IE+QJnUrC4BxE71+dPktDYFqeXXKL37jGBVftQhV9T
3
+ IYI4QUEsJAPVP9KXyn/3qFNfDtoCNsuOjivI9nuaMlLir9VEFntkRyr8bza8L71F
4
+ XC2OJiQ2X9HeKuhMk1aNmlh8KLJMZ0KY27rIKVate/CX2nrv0GogbavNrz5btLXw
5
+ njlyMhHckYjsnNm0L0uTFuhb81rYGrYjVJySXrATPyVIhTr396huyxxM6WiAZqBw
6
+ cMRuW98o6xoBk3cPuYMl3TxMBHok3XTL2JV1jLflTKE5rGgca10SQb6S8Rlh2UW9
7
+ FXKFU6lo3ClQ/4UdAOx+qIGqDmrRw1jONW92SwIDAQABAoIBAHZpuKU9fPT5/xHl
8
+ upmDq+oqL0nowivQJhRfytE3dhjtOmHcRma8poJQrMa6sBxr31wKr0PUqn8XTXuI
9
+ 2fQ843w003dyS3VD4H/STklTRBODUkCxpSTNowixUDvz7EZvl4O8xKeJX7kBzTgW
10
+ qAtYydOaBqL50b4K+5CVEBzVb1Qf/DKhCbBeYvnwAcUVT+t5lDGUh+54pLTHmeGZ
11
+ 2as+1MeBWLMR/ynMDziVVR3XIM02+pHPEwiI9ZTazUAKRJnskb5gBpHqtGiZSijC
12
+ zQq+GSnnBPvvc0gtjqf+KF/6NLy/zDGmpF1e+blCnnLPUQGPTkClq59EHdn8jedO
13
+ YyRrWmkCgYEA9VqRMziTAi79yP2rLqE7cMKPDtrOilHK8fDk5N2xxzEsVoKUsotq
14
+ x384sfmrA3oVSNQsPi/DF16eH1cLaQL86rTaUKl4DqO6rLBPhQVjrmuwdWgnKKGn
15
+ 9XMEp8lBC7KwAnaQKP7c83WarU/FbF08BbPkHob1wuAyMrD7wRv2XDcCgYEAxnl8
16
+ SuHwIooIyiW2/oDjoqCrdtgOLXzdOK2OSDcY+jARVkOA8N0ingPOb18RLOTmjGk5
17
+ KZDHa8xZzdd0Bt7xz3WV2FipYxnkkY7sJosJpMrY8k/QUip9i2D04uLypwVBfT7P
18
+ q3GOgOrP+nvRya8HLHKm0rf7+sU2mGIsSrVYtI0CgYBzQUIoL5FPW0e4XQFG/FJx
19
+ 29NcBQk1DMsq8CB2KnZSvhS35st3O+rDIE4/vKrLDVRmS9UkuUcJ+VaKHler0s2A
20
+ a8iKT7GoHt2YNZKFSEzVKJ1R6cVLXvUJZihvsSivGBd6cLuzplWgwEQS2gBBsWJ6
21
+ w1CLzpYwHyU1jtIUmtAV7QKBgCtC3bnAx8PvjHzrfZi55WRUWyt7apO1rM6m3eWV
22
+ xOb7xTulWRynRt1kfQG/mhHMDwi6AtCxkxZHI6f/d3Xr8I9E1RWkNb+5LB4iJg08
23
+ ryxxXppqlUDjrBvOVXKC/1syhRTUtRVsmiA1joHNrWulsA2bLAuwOMdvZzgN5hOe
24
+ tagdAoGAP7kdbprmkT/7xX8puX6WD4MXQ+dgyb3FvpCIfQT8x0t/ndMI2wMc4keg
25
+ woD2L56tjtVyFH8LQz1sU7LroSc8XF2joZOdQePrnyTVUISoMiTqaXMPIO6l6pez
26
+ x7g1PP3ey5LOoX7LG5ule/6qNMtRhVOFok0vA9ZuuIIkkmYSo1c=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ {"_comment":"note you will need to restart the application when you make changes to this file","settings":{"acs":"http://localhost:3000/saml/consumeSaml","raw_response_acs":"http://localhost:3000/saml/consumeSaml/rawResponse","entity_id":"https://your-entity-id.com","sso_url":"https://shib.oit.duke.edu/idp/profile/SAML2/Redirect/SSO","logout_url":"https://shib.oit.duke.edu/cgi-bin/logout.pl","primary_id":"eduPersonPrincipalName","sp_session_timeout":1,"sp_session_lifetime":8,"saml_logging":true,"debug":false},"attribute_map":{"urn:oid:1.3.6.1.4.1.5923.1.1.1.9":"eduPersonScopedAffiliation","urn:oid:1.3.6.1.4.1.5923.1.1.1.6":"eduPersonPrincipalName","urn:oid:2.5.4.3":"cn","urn:oid:0.9.2342.19200300.100.1.1":"uid","urn:oid:0.9.2342.19200300.100.1.3":"mail","urn:oid:1.3.6.1.4.1.5923.1.1.1.5":"eduPersonPrimaryAffiliation","urn:oid:2.16.840.1.113730.3.1.241":"displayName","urn:mace:duke.edu:idms:unique-id":"duDukeID","urn:mace:duke.edu:idms:dku-id":"dku-id","urn:oid:1.3.6.1.4.1.5923.1.5.1.1":"isMemberOf","urn:oid:2.5.4.42":"givenName","urn:oid:2.5.4.4":"sn","urn:oid:2.5.4.11":"ou","urn:oid:1.3.6.1.4.1.5923.1.1.1.1":"eduPersonAffiliation","urn:oid:2.5.4.20":"telephoneNumber","urn:oid:2.5.4.12":"title","urn:mace:duke.edu:idms:middle-name1":"duMiddleName1","urn:mace:duke.edu:idms:proxy-token":"duProxyToken"}}
@@ -0,0 +1,25 @@
1
+ MIIEWjCCA0KgAwIBAgIJAP1rB/FjRgy6MA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV
2
+ BAYTAlVTMRcwFQYDVQQIEw5Ob3J0aCBDYXJvbGluYTEPMA0GA1UEBxMGRHVyaGFt
3
+ MRgwFgYDVQQKEw9EdWtlIFVuaXZlcnNpdHkxDDAKBgNVBAsTA09JVDEaMBgGA1UE
4
+ AxMRc2hpYi5vaXQuZHVrZS5lZHUwHhcNMTAwOTA5MTI0NDU1WhcNMjgwOTA0MTI0
5
+ NDU1WjB7MQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzAN
6
+ BgNVBAcTBkR1cmhhbTEYMBYGA1UEChMPRHVrZSBVbml2ZXJzaXR5MQwwCgYDVQQL
7
+ EwNPSVQxGjAYBgNVBAMTEXNoaWIub2l0LmR1a2UuZWR1MIIBIjANBgkqhkiG9w0B
8
+ AQEFAAOCAQ8AMIIBCgKCAQEAt+hnl6gSRi0Y8VuNl6PCPYejj7VfVs/y8bRa5zAY
9
+ RHwb75+vBSs2j1yeUcSore9Ba5Ni7v947V34afRMGRPOqr4TEDZxU+1Bg0zAvSrR
10
+ n4Y8B+zyJuhtOpmOZzTwE9o/Oc+CB4kYV/K0woKZdcoxHJm8TbqBqdxU4fFYUlNU
11
+ o4Dr5jRdCSr9MHBOqGWXtQMg16qYNB7StNk4twY29FNnpZwkVTfsE76uVsRMkG8i
12
+ 6/RiHpXZ/ioOOqndptbEGdsOIE3ivAJOZdvYwnDe5NnTH06P01HsxH3OOnYqhuG2
13
+ J6qdhqoelGeHRG+jfl8YkYXCcKQvja2tJ5G+6iqSN7DP6QIDAQABo4HgMIHdMB0G
14
+ A1UdDgQWBBQHYXwB6otkfyMOmUI59j8823hFRDCBrQYDVR0jBIGlMIGigBQHYXwB
15
+ 6otkfyMOmUI59j8823hFRKF/pH0wezELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5v
16
+ cnRoIENhcm9saW5hMQ8wDQYDVQQHEwZEdXJoYW0xGDAWBgNVBAoTD0R1a2UgVW5p
17
+ dmVyc2l0eTEMMAoGA1UECxMDT0lUMRowGAYDVQQDExFzaGliLm9pdC5kdWtlLmVk
18
+ dYIJAP1rB/FjRgy6MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG7q
19
+ wJpiSLJbx2gj/cGDYeuBW/CeRGNghjQ/mb076P3WXsRNPAimcXulSUbQkS6eDH4t
20
+ Ifvsa0jf4FRsEOwH/x8354/0wyv4RwuavX25kjpmoFn3O+eKokyzsc7/Q2gsm0mv
21
+ V8XQo+5b+4we8AFYlAVp26nLeIqAiJM8xZJ9yHuzVL1O4yxIWIKECWHLqY5+1nas
22
+ XNiLURrHhsK5pZUPLuhzJFgZuJT62TtnrjJXlrRhJ389VSkh6R64C6ncjNkg6/Cu
23
+ tA6SX0infqNRyPRNJK+bnQd1yOP4++tjD/lAPE+5tiD/waI3fArt43ZE/qp7pYMS
24
+ 9TEfyQ5QpfRYAUFWXBc=
25
+
@@ -0,0 +1,28 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEuTCCA6GgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBnTELMAkGA1UEBhMCVVMx
3
+ FzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQHDAZEdXJoYW0xGDAWBgNV
4
+ BAoMD0R1a2UgVW5pdmVyc2l0eTEMMAoGA1UECwwDT0lUMR0wGwYDVQQDDBRzYW1s
5
+ IGNhbWVsIGR1bW15IGFwcDEdMBsGCSqGSIb3DQEJARYOZGExMjlAZHVrZS5lZHUw
6
+ HhcNMTgwNTIyMTcxMDMwWhcNMTkwNTIyMTcxMDMwWjCBnTELMAkGA1UEBhMCVVMx
7
+ FzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQHDAZEdXJoYW0xGDAWBgNV
8
+ BAoMD0R1a2UgVW5pdmVyc2l0eTEMMAoGA1UECwwDT0lUMR0wGwYDVQQDDBRzYW1s
9
+ IGNhbWVsIGR1bW15IGFwcDEdMBsGCSqGSIb3DQEJARYOZGExMjlAZHVrZS5lZHUw
10
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+OHs74gT5AmdSsLgHETvX
11
+ 50+S0NgWp5dcovfuMYFV+1CFX1MhgjhBQSwkA9U/0pfKf/eoU18O2gI2y46OK8j2
12
+ e5oyUuKv1UQWe2RHKvxvNrwvvUVcLY4mJDZf0d4q6EyTVo2aWHwoskxnQpjbusgp
13
+ Vq178Jfaeu/QaiBtq82vPlu0tfCeOXIyEdyRiOyc2bQvS5MW6FvzWtgatiNUnJJe
14
+ sBM/JUiFOvf3qG7LHEzpaIBmoHBwxG5b3yjrGgGTdw+5gyXdPEwEeiTddMvYlXWM
15
+ t+VMoTmsaBxrXRJBvpLxGWHZRb0VcoVTqWjcKVD/hR0A7H6ogaoOatHDWM41b3ZL
16
+ AgMBAAGjggEAMIH9MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFGh/Y36w7wcL
17
+ nLXFC0dUpboAAV+ZMIHKBgNVHSMEgcIwgb+AFGh/Y36w7wcLnLXFC0dUpboAAV+Z
18
+ oYGjpIGgMIGdMQswCQYDVQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmEx
19
+ DzANBgNVBAcMBkR1cmhhbTEYMBYGA1UECgwPRHVrZSBVbml2ZXJzaXR5MQwwCgYD
20
+ VQQLDANPSVQxHTAbBgNVBAMMFHNhbWwgY2FtZWwgZHVtbXkgYXBwMR0wGwYJKoZI
21
+ hvcNAQkBFg5kYTEyOUBkdWtlLmVkdYIBADANBgkqhkiG9w0BAQsFAAOCAQEAFE/X
22
+ DPipapLFDnu2jCMR4lhDeEF2Pm1DIibiy6ZvmzCstj++MYOI7gKkUgeUUhFTEQIV
23
+ fZIo5gIWkyoPVOwGALLTme01Tdk3Mul4pV0iqMn4k3F9NsC9wRy4WR2yPF9GYa/e
24
+ ktK+ZBYt/2SZA4vS5q63jsMC0TjkrTGJokXohwScWDc4kIFfvU6biWW7zBCVfpaa
25
+ YfsLYNBTbZ7VqEVFzcpYv8LBTOYoToAS5+yuAwrIdPEfqx3R4tIwGCik4tSByQFO
26
+ i/VvEL5rTWhmUrKPh1hriPVYZ9gW2Mk87Snlyswsqv5d8+ITVgF+RL+cutUA29C+
27
+ moSLPLaWINlhqvuRXw==
28
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEogIBAAKCAQEAvjh7O+IE+QJnUrC4BxE71+dPktDYFqeXXKL37jGBVftQhV9T
3
+ IYI4QUEsJAPVP9KXyn/3qFNfDtoCNsuOjivI9nuaMlLir9VEFntkRyr8bza8L71F
4
+ XC2OJiQ2X9HeKuhMk1aNmlh8KLJMZ0KY27rIKVate/CX2nrv0GogbavNrz5btLXw
5
+ njlyMhHckYjsnNm0L0uTFuhb81rYGrYjVJySXrATPyVIhTr396huyxxM6WiAZqBw
6
+ cMRuW98o6xoBk3cPuYMl3TxMBHok3XTL2JV1jLflTKE5rGgca10SQb6S8Rlh2UW9
7
+ FXKFU6lo3ClQ/4UdAOx+qIGqDmrRw1jONW92SwIDAQABAoIBAHZpuKU9fPT5/xHl
8
+ upmDq+oqL0nowivQJhRfytE3dhjtOmHcRma8poJQrMa6sBxr31wKr0PUqn8XTXuI
9
+ 2fQ843w003dyS3VD4H/STklTRBODUkCxpSTNowixUDvz7EZvl4O8xKeJX7kBzTgW
10
+ qAtYydOaBqL50b4K+5CVEBzVb1Qf/DKhCbBeYvnwAcUVT+t5lDGUh+54pLTHmeGZ
11
+ 2as+1MeBWLMR/ynMDziVVR3XIM02+pHPEwiI9ZTazUAKRJnskb5gBpHqtGiZSijC
12
+ zQq+GSnnBPvvc0gtjqf+KF/6NLy/zDGmpF1e+blCnnLPUQGPTkClq59EHdn8jedO
13
+ YyRrWmkCgYEA9VqRMziTAi79yP2rLqE7cMKPDtrOilHK8fDk5N2xxzEsVoKUsotq
14
+ x384sfmrA3oVSNQsPi/DF16eH1cLaQL86rTaUKl4DqO6rLBPhQVjrmuwdWgnKKGn
15
+ 9XMEp8lBC7KwAnaQKP7c83WarU/FbF08BbPkHob1wuAyMrD7wRv2XDcCgYEAxnl8
16
+ SuHwIooIyiW2/oDjoqCrdtgOLXzdOK2OSDcY+jARVkOA8N0ingPOb18RLOTmjGk5
17
+ KZDHa8xZzdd0Bt7xz3WV2FipYxnkkY7sJosJpMrY8k/QUip9i2D04uLypwVBfT7P
18
+ q3GOgOrP+nvRya8HLHKm0rf7+sU2mGIsSrVYtI0CgYBzQUIoL5FPW0e4XQFG/FJx
19
+ 29NcBQk1DMsq8CB2KnZSvhS35st3O+rDIE4/vKrLDVRmS9UkuUcJ+VaKHler0s2A
20
+ a8iKT7GoHt2YNZKFSEzVKJ1R6cVLXvUJZihvsSivGBd6cLuzplWgwEQS2gBBsWJ6
21
+ w1CLzpYwHyU1jtIUmtAV7QKBgCtC3bnAx8PvjHzrfZi55WRUWyt7apO1rM6m3eWV
22
+ xOb7xTulWRynRt1kfQG/mhHMDwi6AtCxkxZHI6f/d3Xr8I9E1RWkNb+5LB4iJg08
23
+ ryxxXppqlUDjrBvOVXKC/1syhRTUtRVsmiA1joHNrWulsA2bLAuwOMdvZzgN5hOe
24
+ tagdAoGAP7kdbprmkT/7xX8puX6WD4MXQ+dgyb3FvpCIfQT8x0t/ndMI2wMc4keg
25
+ woD2L56tjtVyFH8LQz1sU7LroSc8XF2joZOdQePrnyTVUISoMiTqaXMPIO6l6pez
26
+ x7g1PP3ey5LOoX7LG5ule/6qNMtRhVOFok0vA9ZuuIIkkmYSo1c=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,36 @@
1
+ {
2
+ "_comment": "note you will need to restart the application when you make changes to this file",
3
+ "settings": {
4
+ "acs": "http://localhost:3000/saml/consumeSaml",
5
+ "raw_response_acs": "http://localhost:3000/saml/consumeSaml/rawResponse",
6
+ "entity_id": "https://dummycamel.com",
7
+ "sso_url": "https://shib.oit.duke.edu/idp/profile/SAML2/Redirect/SSO",
8
+ "logout_url": "https://shib.oit.duke.edu/cgi-bin/logout.pl",
9
+ "primary_id": "eduPersonPrincipalName",
10
+ "sp_session_timeout": 1,
11
+ "sp_session_lifetime": 8,
12
+ "test_auth_path": true,
13
+ "saml_logging": true,
14
+ "debug": false
15
+ },
16
+ "attribute_map": {
17
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.9": "eduPersonScopedAffiliation",
18
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.6": "eduPersonPrincipalName",
19
+ "urn:oid:2.5.4.3": "cn",
20
+ "urn:oid:0.9.2342.19200300.100.1.1": "uid",
21
+ "urn:oid:0.9.2342.19200300.100.1.3": "mail",
22
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.5": "eduPersonPrimaryAffiliation",
23
+ "urn:oid:2.16.840.1.113730.3.1.241": "displayName",
24
+ "urn:mace:duke.edu:idms:unique-id": "duDukeID",
25
+ "urn:mace:duke.edu:idms:dku-id": "dku-id",
26
+ "urn:oid:1.3.6.1.4.1.5923.1.5.1.1": "isMemberOf",
27
+ "urn:oid:2.5.4.42": "givenName",
28
+ "urn:oid:2.5.4.4": "sn",
29
+ "urn:oid:2.5.4.11": "ou",
30
+ "urn:oid:1.3.6.1.4.1.5923.1.1.1.1": "eduPersonAffiliation",
31
+ "urn:oid:2.5.4.20": "telephoneNumber",
32
+ "urn:oid:2.5.4.12": "title",
33
+ "urn:mace:duke.edu:idms:middle-name1": "duMiddleName1",
34
+ "urn:mace:duke.edu:idms:proxy-token": "duProxyToken"
35
+ }
36
+ }
@@ -1,13 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'onelogin/ruby-saml'
3
-
4
5
  module SamlCamel
6
+ # engine definition
5
7
  class Engine < ::Rails::Engine
6
8
  isolate_namespace SamlCamel
7
-
8
9
  config.to_prepare do
9
10
  ActionController::Base.include SamlCamel::SamlService
10
11
  end
11
-
12
12
  end
13
13
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SamlCamel
2
- VERSION = '1.0.0'
4
+ VERSION = '1.0.1'
3
5
  end
data/lib/saml_camel.rb CHANGED
@@ -1,41 +1,49 @@
1
- require "saml_camel/engine"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'saml_camel/engine'
4
+
5
+ # main logic for non initialized SAML camel methods
3
6
  module SamlCamel
4
7
  begin
5
8
  SP_SETTINGS = JSON.parse(File.read("config/saml/#{Rails.env}/settings.json"))
6
- rescue
7
- #rescue othewise the generator fails
9
+ SP_DEBUG = SP_SETTINGS['settings']['debug']
10
+ rescue StandardError # rubocop:disable Lint/HandleExceptions
11
+ # rescue othewise the generator fails
8
12
  end
9
13
 
10
-
14
+ # builds saml requests and decrypts saml responses
11
15
  module Transaction
12
16
  begin
13
17
  IDP_CERT = File.read("config/saml/#{Rails.env}/idp_certificate.crt")
14
18
  SP_CERT = File.read("config/saml/#{Rails.env}/saml_certificate.crt")
15
19
  SP_KEY = File.read("config/saml/#{Rails.env}/saml_key.key")
16
- rescue
17
- #rescue othewise the generator fails
20
+ rescue StandardError # rubocop:disable Lint/HandleExceptions
21
+ # rescue othewise the generator fails
18
22
  end
19
23
 
20
24
  def self.map_attributes(sp_attributes)
21
- attr_map = SP_SETTINGS["attribute_map"]
25
+ attr_map = SP_SETTINGS['attribute_map']
22
26
  mapped_attributes = {}
23
27
 
24
- sp_attributes.each do |sp_attribute,value|
28
+ sp_attributes.each do |sp_attribute, value|
25
29
  sp_attribute = attr_map[sp_attribute] || value
26
30
  mapped_attributes[sp_attribute] = value
27
31
  end
28
32
  mapped_attributes
29
33
  end
30
34
 
31
- def self.saml_settings
32
- sp_settings = SP_SETTINGS["settings"]
35
+ def self.saml_settings(raw_response: false)
36
+ sp_settings = SP_SETTINGS['settings']
33
37
 
34
38
  settings = OneLogin::RubySaml::Settings.new
35
- settings.assertion_consumer_service_url = sp_settings["acs"]
36
-
37
- settings.issuer = sp_settings["entity_id"]
38
- settings.idp_sso_target_url = sp_settings["sso_url"]
39
+ if raw_response
40
+ settings.assertion_consumer_service_url = sp_settings['raw_response_acs']
41
+ settings.force_authn = '1'
42
+ else
43
+ settings.assertion_consumer_service_url = sp_settings['acs']
44
+ end
45
+ settings.issuer = sp_settings['entity_id']
46
+ settings.idp_sso_target_url = sp_settings['sso_url']
39
47
 
40
48
  # certificate to register with IDP and key to decrypt
41
49
  settings.certificate = SP_CERT
@@ -46,57 +54,77 @@ module SamlCamel
46
54
  # certificate to verify IDP signature
47
55
  settings.idp_cert = IDP_CERT
48
56
 
57
+ # inidcates SP wants assertions to be signed
58
+ settings.security[:want_responses_signed] = true
59
+
49
60
  settings
50
61
  end
51
62
  end
52
63
 
53
-
64
+ # handles logging throughout SP
54
65
  module Logging
55
66
  begin
56
- PRIMARY_ID = SP_SETTINGS["settings"]["primary_id"]
57
- SHOULD_LOG = SP_SETTINGS["settings"]["saml_logging"]
58
- LOGGER = Logger.new("log/saml.log")
59
- rescue
60
- #rescue othewise the generator fails
67
+ PRIMARY_ID = SP_SETTINGS['settings']['primary_id']
68
+ SHOULD_LOG = SP_SETTINGS['settings']['saml_logging']
69
+ LOGGER = Logger.new('log/saml.log')
70
+ rescue StandardError # rubocop:disable Lint/HandleExceptions
71
+ # rescue othewise the generator fails
61
72
  end
62
73
 
74
+ def self.auth_failure(error_context)
75
+ LOGGER.error("An error occured during authentication. #{error_context}") if SHOULD_LOG
76
+ LOGGER.error("Backtrace: \n\t\t#{error_context.backtrace.join("\n\t\t")}") if SHOULD_LOG
77
+ rescue StandardError
78
+ LOGGER.debug('Unknown Error During auth_failure logging.') if SHOULD_LOG
79
+ end
63
80
 
64
- def self.auth_failure(error_context)
65
- LOGGER.error("An error occured during authentication. #{error_context}") if SHOULD_LOG
66
- LOGGER.error("Backtrace: \n\t\t#{error_context.backtrace.join("\n\t\t")}") if SHOULD_LOG
67
- rescue
68
- LOGGER.debug("Unknown Error During auth_failure logging.") if SHOULD_LOG
69
- end
70
-
71
- def self.bad_ip(saml_attrs,request_ip,current_ip)
72
- LOGGER.info("Bad IP address for #{saml_attrs[PRIMARY_ID]}. IP at SAML request #{request_ip} | IP presented #{current_ip}") if SHOULD_LOG
73
- rescue
74
- LOGGER.debug("Unknown Error During relay state logging. IP check") if SHOULD_LOG
75
- end
76
-
77
- def self.expired_session(saml_attrs)
78
- LOGGER.info("Session Expired for #{saml_attrs[PRIMARY_ID]}") if SHOULD_LOG
79
- rescue
80
- LOGGER.debug("Unknown Error During relay state logging. Expired session check") if SHOULD_LOG
81
- end
82
-
83
- def self.logout(saml_attrs)
84
- LOGGER.info("#{saml_attrs[PRIMARY_ID]} has succesfully logged out.") if SHOULD_LOG
85
- rescue
86
- LOGGER.debug("Unknown error logging user logout. Most likely anonymous user clicked a logout button.") if SHOULD_LOG
87
- end
88
-
89
- def self.saml_state(data)
90
- LOGGER.info("Stored Relay: #{data[:stored_relay]} | RequestRelay: #{data[:request_relay]} | Stored IP: #{data[:stored_ip]} RemoteIP: #{data[:remote_ip]}") if SHOULD_LOG
91
- rescue
92
- LOGGER.debug("Unknown Error During relay state logging. Saml state check") if SHOULD_LOG
93
- end
81
+ def self.bad_ip(saml_attrs, request_ip, current_ip)
82
+ if SHOULD_LOG
83
+ LOGGER.info("Bad IP address for #{saml_attrs[PRIMARY_ID]}. IP at SAML
84
+ request #{request_ip} | IP presented #{current_ip}")
85
+ end
86
+ rescue StandardError
87
+ LOGGER.debug('Unknown Error During relay state logging. IP check') if SHOULD_LOG
88
+ end
89
+
90
+ def self.debug(message)
91
+ LOGGER.debug(message) if SHOULD_LOG
92
+ rescue StandardError
93
+ LOGGER.debug('Unknown Error During Debug') if SHOULD_LOG
94
+ end
95
+
96
+ def self.expired_session(saml_attrs)
97
+ LOGGER.info("Session Expired for #{saml_attrs[PRIMARY_ID]}") if SHOULD_LOG
98
+ rescue StandardError
99
+ LOGGER.debug('Unknown Error During relay state logging. Expired session check') if SHOULD_LOG
100
+ end
101
+
102
+ def self.logout(saml_attrs)
103
+ LOGGER.info("#{saml_attrs[PRIMARY_ID]} has succesfully logged out.") if SHOULD_LOG
104
+ rescue StandardError
105
+ if SHOULD_LOG
106
+ LOGGER.debug('Unknown error logging user logout.
107
+ Most likely anonymous user clicked a logout button.')
108
+ end
109
+ end
110
+
111
+ def self.saml_state(data)
112
+ if SHOULD_LOG
113
+ LOGGER.info("Stored Relay: #{data[:stored_relay]} |
114
+ RequestRelay: #{data[:request_relay]} |
115
+ Stored IP: #{data[:stored_ip]} RemoteIP: #{data[:remote_ip]}")
116
+ end
117
+ rescue StandardError
118
+ LOGGER.debug('Unknown Error During relay state logging. Saml state check') if SHOULD_LOG
119
+ end
94
120
 
95
121
  def self.successful_auth(saml_attrs)
96
122
  LOGGER.info("#{saml_attrs[PRIMARY_ID]} has succesfully authenticated.") if SHOULD_LOG
97
- rescue
98
- LOGGER.debug("Unknown Error During successful_auth logging. Check PRIMARY_ID configured in settings.json and that user has attribute.") if SHOULD_LOG
123
+ rescue StandardError
124
+ if SHOULD_LOG
125
+ LOGGER.debug('Unknown Error During successful_auth logging.
126
+ Check PRIMARY_ID configured in settings.json and that user has attribute.')
127
+ end
99
128
  end
100
129
  end
101
-
102
130
  end