maestrano-rails 1.0.0 → 1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +43 -38
- data/README.md +4 -7
- data/lib/generators/maestrano/templates/maestrano.rb +6 -139
- data/lib/maestrano/rails/routing/routes.rb +1 -9
- data/maestrano-rails.gemspec +8 -9
- data/test/dummy_activerecord/config/initializers/maestrano.rb +7 -85
- data/test/dummy_activerecord/log/test.log +2947 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/1Y/1YNesTg9JO8EmKnsQ5o2QuHPY1_SoBI4IzPgjGbNDtg.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/2E/2EMDck6E8hnJgftO6NKYnFBF3I7OY1XxmBhGYJx9hVU.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/2J/2JXGkjZ38teJKsoxInZDvaepp3CkHBoDSogY8mrjnz4.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/2y/2yOKmCmlo43TKFToC7sDi79zv1sEaKuRhPT-9RwLexo.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/5g/5g7dhxVp4YbZmFw_-T3aU2oYq2Z9Jgtps0CKneXYSS0.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/6C/6CJDEgEqVZ6WWB28_UrOgZXJ7imhTkyPfJCnjZaeHQo.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/9v/9vZgtlozMnArb7R4KXZgyLUlc2hAKYMVeczENURRLfk.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/BD/BD9vS-VA_G0ByKRS5cM8hNg17DhxAUCnbjirsC7QZT8.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/BQ/BQtyJR3ccqed7_s43p3BPj3IL18LWu1Fo1ZnzWC3qcc.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Br/BrPxwjWI-O7aKFPR9IHgVHTz--0ve7HgO1xAHOSorxw.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/D0/D0oQIDvZMxs7K1-bwAjXYaRTXNnKIB-vk4wDO3Mw3d4.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Eg/Eg9dsjuoufOcT1ojGffj56kcFY4ujQHBl4iBxaHNywQ.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/GN/GN7EpxkaiDaaLFjlptcIZ0BjIwz4SQv-J6Si_qHNtRQ.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/GX/GXBrspUeZnBiwFADWDaNmSYt9wkavup0id1nDW51SwI.cache +3 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/J7/J7Oklw3hOELd9594tXtFa2w66T4_zffVHzJ8TfX9uwc.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Lg/LgG4iMjI9pzWwqLjXp3JvB3xs8j14SUJzG4eRCYOWrU.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/MJ/MJ2lcrIryOfzt2cWGx3d8LeFOJoLuIAlrL7SCdGMaik.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Oa/OaJik9XhKBzY7AT4At2irZpA2GTHO3p4_hUa1ORSzjc.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/PJ/PJU52zcAkrMbEOmlo13u_i04nf-PXPCL_i6_ybo2AYo.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/VN/VNCapNKJLeponthNeFJhaBYs92UBT3P8PugENHP0474.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/VO/VOqmZhoZgNGgBPBfKq2xsc37yyNBBqntTUWteHs1VVc.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Vl/VlVHSjm74GkjWDuZlfcI6KAaQ9xjg8meWAssVwt-YMI.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Vt/VtysXvEqJf4LwL6kuKUSWHZbeR_jKoYj_z1L99d5Yzk.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/W1/W1I750hXtFauIXfdF_h8f0H6Eh9fPjn1nb3WDnJGJ_0.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/W_/W_AqS_Ihb1uBTP5eubT7Ep7vc3CcoUzol5J0T4xQsL0.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/Yc/YcfvUdqaxEInuhPH8QMPNyhWsGLwtIx76o-tR_VUc_0.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/_S/_SiC-nT_xG9vCIPkHUmC7GfAGNufVJLYqHQ4vQLOjvs.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/_m/_m7Yy9Dl3hfylyoF91XSCvlOZ3762vGWH_ZhkTvreMU.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/ak/akBxy_qeJ5hlUAP5G80qm_ZsKBlpXViO9rGg95rWx8U.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/b7/b7lBpkBxQaCxHBBRf-QF0CiQKnRE8kYGLUzgAPTjf_k.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/c2/c2LxqcKRpYH4PIKJj0RIMbpQeONqcvmk8zRZ3qAd4no.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/dp/dplQ3jBb_bBGoJ4xMRKxYbJR5YoZjuyamwFopJb07Xo.cache +3 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/eZ/eZWyKd8Y-LcqrovIoB-YJiklulQC0CGG0d22eCJcYuU.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/em/emPaz2829mOOQZolLXyEoXP73X44t4p-YUUA763b_1k.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/fk/fkliCI8v5fyy_CObCj5Va9hEnO4JqIPX6WBhUYUJS4k.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/hk/hkWnysQ9aaUtcEVLGt9gkfzIPrFfFqnR1P4LlriYD40.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/j3/j3F-bQu56g8H580zxIStr369Vt2DEbb0BQJ21ie2eoI.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/jK/jK6-bONOghUmAYu3DkuJ2MLIlLa8P9kbTE3tc1wBheg.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/jm/jmJh54mguyD0TmNGQ4ExIqEW4jR1jQeJcO5mhggpfMs.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/jt/jtrPJEzuZbLsfLK4SZphEu2PPyopSCtRfXQwj2AyAZg.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/kQ/kQZfXHFhuNUcLTvh4QzLL6fKDZc-8XkwCwT8eMIW8ns.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/l_/l_tJ9WwBL9Q8XjxQN56nGuGtCrP7kGBvE8e76g8tRC0.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/my/mybo3dsRj5MFU0orUFY47lfsYuIuBB_KL1Z4aNANxYI.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/qo/qob9eyRuMnynEh3V1dqTC-rEE-j5mOlG7t6EamNVBFY.cache +3 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/rf/rfsxw1dZNQvrAvAmqFP8bFeBcVIAPuvqozFzw80eS-4.cache +0 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/rm/rmsobLUxsQY2_hRp-ygb9dlbdoHpFlV6FMPnhxqpA1k.cache +3 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/sm/sm0X5aOvu10an00TtKAEtdF3Wpi08DQrHKEe3XXNHtk.cache +1 -0
- data/test/dummy_activerecord/tmp/cache/assets/sprockets/v3.0/x_/x_ZYCJrtiH6rATOiHF1QuxobPhpt7IRQUwciwGdXOxo.cache +0 -0
- data/test/dummy_mongoid/config/initializers/maestrano.rb +7 -85
- data/test/tmp/app/controllers/maestrano/account/group_users_controller.rb +27 -0
- data/test/tmp/app/controllers/maestrano/account/groups_controller.rb +37 -0
- data/test/tmp/app/controllers/maestrano/auth/saml_controller.rb +57 -0
- data/test/tmp/config/initializers/maestrano.rb +7 -0
- data/test/tmp/config/routes.rb +60 -0
- metadata +99 -10
- data/app/controllers/maestrano/rails/metadata_controller.rb +0 -10
- data/test/controllers/metadata_controller_test.rb +0 -24
- data/test/tmp/app/models/monster.rb +0 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/javascripts/application.js?type=application/javascript&id=4956bec4bde2ef41030bd0fc3f486fb445d4669c08c2c7e154556a27b99a7202:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%C6������ܦ�M=��Qu���/�,"c�5u
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"}app/assets/stylesheets/application.css?type=text/css&id=b1b22d0cea5648ce45803371c746c2bcf79bd3db02e23763ea1a035b24e22ea5:ET
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%xJ�g&k��"��U���m��X�V�;Fj
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
[o:Set:
|
|
2
|
+
@hash{
|
|
3
|
+
I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"ofile-digest:///home/bruno/.rvm/gems/ruby-2.2.5/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery.js;TT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"}app/assets/stylesheets/application.css?type=text/css&id=6c90dbc7aa88f45057b3068ff27f73ede5b0901db39f36077794d52f683425af:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�/home/bruno/.rvm/gems/ruby-2.3.1/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery.js?type=application/javascript&pipeline=self&id=03f3de24261a7de4de17340cd6b747bc40433856d7aaed331b2bec91e2d62ad4:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�/home/bruno/.rvm/gems/ruby-2.2.5/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery_ujs.js?type=application/javascript&pipeline=self&id=3b627ce5e981d0d20ac62579499caa5da37fc717e6e33e34e7c2ea3e1cd06ec4:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/stylesheets/pages.css?type=text/css&pipeline=self&id=5fe282f8c041cf39665bcf1bd06160801627a49dffe5e1773965debafd14a276:ET
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�/home/bruno/.rvm/gems/ruby-2.2.5/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery.js?type=application/javascript&pipeline=self&id=a1edac6d7059f4ba0b20a4599c371db9e970344f618f697f87c851bdd148296d:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%uW��l��j��Z�xU��>�?]��pc��s
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=89d26aa586cfb648307c87b23ccf13971251f6b71ba3cdf5933aa7d2b52d3913:ET
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=47bec25081299e8e51978cb97cde72312cf393ba7acf9a7a324d075126fbb502:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�/home/bruno/.rvm/gems/ruby-2.3.1/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery_ujs.js?type=application/javascript&pipeline=self&id=df1277523069abfa5b1557a89d84fb9b79f764ee30a903349a3aba4b1a05394b:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=44c544dfd20ea18f6046d68133ce04e2fc422cde45bbef6c3118e5f4afd0ed6e:ET
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
[o:Set:
|
|
2
|
+
@hash}
|
|
3
|
+
I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"sfile-digest:///home/bruno/.rvm/gems/ruby-2.3.1/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery_ujs.js;TTF
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%uW��l��j��Z�xU��>�?]��pc��s
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/javascripts/pages.js?type=application/javascript&pipeline=self&id=bc521424c58698c5a076e1bd49d89b228caa78a9a19e75b130af073584b06308:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%xJ�g&k��"��U���m��X�V�;Fj
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/stylesheets/pages.css?type=text/css&pipeline=self&id=d5611ecf8d9cf969495e33b9d646463e0eb0a408225c0db609a31c9f7ae2ef69:ET
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/javascripts/pages.js?type=application/javascript&pipeline=self&id=4ff005ba9515424185c5dc3160f65b4c72e6b062da2166461aa362ce12ef44bf:ET
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%C6������ܦ�M=��Qu���/�,"c�5u
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=a61a07e813e5b61cacad673b337b2325af07bc3b4a9f430760eb98fbcff2b45f:ET
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
[o:Set:
|
|
2
|
+
@hash}
|
|
3
|
+
I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"ofile-digest:///home/bruno/.rvm/gems/ruby-2.3.1/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery.js;TTF
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
[o:Set:
|
|
2
|
+
@hash{
|
|
3
|
+
I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"sfile-digest:///home/bruno/.rvm/gems/ruby-2.2.5/gems/jquery-rails-4.2.2/vendor/assets/javascripts/jquery_ujs.js;TT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�app/assets/javascripts/application.js?type=application/javascript&id=463aa6f05a83fffc5766a6d1b3836129b43711061d2d4f16f2aabaa64127fa42:ET
|
|
Binary file
|
|
@@ -1,85 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# will be made to maestrano.com
|
|
9
|
-
# If set to 'test' then requests will be made to api-sandbox.maestrano.io
|
|
10
|
-
# The api-sandbox allows you to easily test integration scenarios.
|
|
11
|
-
# More details on http://api-sandbox.maestrano.io
|
|
12
|
-
config.environment = Rails.env.production? ? 'production' : 'test'
|
|
13
|
-
|
|
14
|
-
# ==> App ID & API key
|
|
15
|
-
# Your application App ID and API key which you can retrieve on http://maestrano.com
|
|
16
|
-
# via your cloud partner dashboard.
|
|
17
|
-
# For testing you can retrieve/generate an api_key from the API Sandbox directly
|
|
18
|
-
# on http://api-sandbox.maestrano.io
|
|
19
|
-
config.app_id = Rails.env.production? ? 'prod_app_id' : 'sandbox_app_id'
|
|
20
|
-
config.api_key = Rails.env.production? ? 'prod_api_key' : 'sandbox_api_key'
|
|
21
|
-
|
|
22
|
-
# ==> Single Sign-On activation
|
|
23
|
-
# Enable/Disable single sign-on. When troubleshooting authentication issues
|
|
24
|
-
# you might want to disable SSO temporarily
|
|
25
|
-
config.sso_enabled = true
|
|
26
|
-
|
|
27
|
-
# ==> Application host
|
|
28
|
-
# This is your application host (e.g: mysuperapp.com) which is ultimately
|
|
29
|
-
# used to redirect users to the right SAML url during SSO handshake.
|
|
30
|
-
config.app_host = Rails.env.production? ? 'https://my-production-app.com' : 'http://localhost::3000'
|
|
31
|
-
|
|
32
|
-
# ==> SSO Initialization endpoint
|
|
33
|
-
# This is your application path to the SAML endpoint that allows users to
|
|
34
|
-
# initialize SSO authentication. Upon reaching this endpoint users your
|
|
35
|
-
# application will automatically create a SAML request and redirect the user
|
|
36
|
-
# to Maestrano. Maestrano will then authenticate and authorize the user. Upon
|
|
37
|
-
# authorization the user gets redirected to your application consumer endpoint
|
|
38
|
-
# (see below) for initial setup and/or login.
|
|
39
|
-
# The controller for this path is automatically
|
|
40
|
-
# generated when you run 'rake maestrano:install' and is available at
|
|
41
|
-
# <rails_root>/app/controllers/maestrano/auth/saml.rb
|
|
42
|
-
config.sso_app_init_path = '/maestrano/auth/saml/init'
|
|
43
|
-
|
|
44
|
-
# ==> SSO Consumer endpoint
|
|
45
|
-
# This is your application path to the SAML endpoint that allows users to
|
|
46
|
-
# finalize SSO authentication. During the 'consume' action your application
|
|
47
|
-
# sets users (and associated group) up and/or log them in.
|
|
48
|
-
# The controller for this path is automatically
|
|
49
|
-
# generated when you run 'rake maestrano:install' and is available at
|
|
50
|
-
# <rails_root>/app/controllers/maestrano/auth/saml.rb
|
|
51
|
-
config.sso_app_consume_path = '/maestrano/auth/saml/consume'
|
|
52
|
-
|
|
53
|
-
# ==> SSO User creation mode
|
|
54
|
-
# !IMPORTANT
|
|
55
|
-
# On Maestrano users can take several "instances" of your service. You can consider
|
|
56
|
-
# each "instance" as 1) a billing entity and 2) a collaboration group (this is
|
|
57
|
-
# equivalent to a 'customer account' in a commercial world). When users login to
|
|
58
|
-
# your application via single sign-on they actually login via a specific group which
|
|
59
|
-
# is then supposed to determine which data they have access to inside your application.
|
|
60
|
-
#
|
|
61
|
-
# E.g: John and Jack are part of group 1. They should see the same data when they login to
|
|
62
|
-
# your application (employee info, analytics, sales etc..). John is also part of group 2
|
|
63
|
-
# but not Jack. Therefore only John should be able to see the data belonging to group 2.
|
|
64
|
-
#
|
|
65
|
-
# In most application this is done via collaboration/sharing/permission groups which is
|
|
66
|
-
# why a group is required to be created when a new user logs in via a new group (and
|
|
67
|
-
# also for billing purpose - you charge a group, not a user directly).
|
|
68
|
-
#
|
|
69
|
-
# == mode: 'real'
|
|
70
|
-
# In an ideal world a user should be able to belong to several groups in your application.
|
|
71
|
-
# In this case you would set the 'sso.creation_mode' to 'real' which means that the uid
|
|
72
|
-
# and email we pass to you are the actual user email and maestrano universal id.
|
|
73
|
-
#
|
|
74
|
-
# == mode: 'virtual'
|
|
75
|
-
# Now let's say that due to technical constraint your application cannot authorize a user
|
|
76
|
-
# to belong to several groups. Well next time John logs in via a different group there will
|
|
77
|
-
# be a problem: the user already exists (based on uid or email) and cannot be assigned
|
|
78
|
-
# to a second group. To fix this you can set the 'sso.creation_mode' to 'virtual'. In this
|
|
79
|
-
# mode users get assigned a truly unique uid and email across groups. So next time John logs
|
|
80
|
-
# in a whole new user account can be created for him without any validation problem. In this
|
|
81
|
-
# mode the email we assign to him looks like "usr-sdf54.cld-45aa2@mail.maestrano.com". But don't
|
|
82
|
-
# worry we take care of forwarding any email you would send to this address
|
|
83
|
-
#
|
|
84
|
-
config.sso.creation_mode = 'virtual' # or 'real'
|
|
85
|
-
end
|
|
1
|
+
if Rails.env.test?
|
|
2
|
+
Maestrano.configure do |config|
|
|
3
|
+
config.environment = 'local'
|
|
4
|
+
end
|
|
5
|
+
else
|
|
6
|
+
Maestrano.auto_configure
|
|
7
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class Maestrano::Account::GroupUsersController < Maestrano::Rails::WebHookController
|
|
2
|
+
|
|
3
|
+
# DELETE /maestrano/account/groups/cld-1/users/usr-1/:tenant
|
|
4
|
+
# Remove a user from a group
|
|
5
|
+
def destroy
|
|
6
|
+
# Set the right uid based on Maestrano.param('sso.creation_mode')
|
|
7
|
+
user_uid = Maestrano.mask_user(params[:id],params[:group_id])
|
|
8
|
+
group_uid = params[:group_id]
|
|
9
|
+
tenant = params[:tenant]
|
|
10
|
+
|
|
11
|
+
# Perform association deletion steps here
|
|
12
|
+
# --
|
|
13
|
+
# If Maestrano.param('sso.creation_mode') is set to virtual
|
|
14
|
+
# then you might want to just delete/cancel/block the user
|
|
15
|
+
#
|
|
16
|
+
# E.g
|
|
17
|
+
# user = User.find_by_tenant_and_uid(tenant, user_uid)
|
|
18
|
+
# organization = Organization.find_by_tenant_and_uid(tenant ,group_uid)
|
|
19
|
+
#
|
|
20
|
+
# if Maestrano.param('sso.creation_mode') == 'virtual'
|
|
21
|
+
# user.destroy
|
|
22
|
+
# else
|
|
23
|
+
# organization.remove_user(user)
|
|
24
|
+
# user.block_access! if user.reload.organizations.empty?
|
|
25
|
+
# end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class Maestrano::Account::GroupsController < Maestrano::Rails::WebHookController
|
|
2
|
+
|
|
3
|
+
# DELETE /maestrano/account/groups/cld-1/:tenant
|
|
4
|
+
# Delete an entire group
|
|
5
|
+
def destroy
|
|
6
|
+
group_uid = params[:id]
|
|
7
|
+
tenant = params[:tenant]
|
|
8
|
+
|
|
9
|
+
# Perform deletion steps here
|
|
10
|
+
# --
|
|
11
|
+
# If you need to perform a final checkout
|
|
12
|
+
# then you can call Maestrano::Account::Bill.create({.. final checkout details ..})
|
|
13
|
+
# --
|
|
14
|
+
# If Maestrano.param('sso.creation_mode') is set to virtual
|
|
15
|
+
# then you might want to delete/cancel/block all users under
|
|
16
|
+
# that group
|
|
17
|
+
# --
|
|
18
|
+
# E.g:
|
|
19
|
+
# organization = Organization.find_by_tenant_and_uid(tenant, group_uid)
|
|
20
|
+
#
|
|
21
|
+
# amount_cents = organization.calculate_total_due_remaining
|
|
22
|
+
# Maestrano::Account::Bill.create({
|
|
23
|
+
# group_id: group_uid,
|
|
24
|
+
# price_cents: amount_cents,
|
|
25
|
+
# description: "Final Payout"
|
|
26
|
+
# })
|
|
27
|
+
#
|
|
28
|
+
# if Maestrano.param('sso.creation_mode') == 'virtual'
|
|
29
|
+
# organization.members.where(provider:'maestrano').each do |user|
|
|
30
|
+
# user.destroy
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
33
|
+
# organization.destroy
|
|
34
|
+
# render json: {success: true}
|
|
35
|
+
#
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
class Maestrano::Auth::SamlController < Maestrano::Rails::SamlBaseController
|
|
2
|
+
|
|
3
|
+
#== POST '/maestrano/auth/saml/consume/:tenant'
|
|
4
|
+
# Final phase of the Single Sign-On handshake. Find or create
|
|
5
|
+
# the required resources (user and group) and sign the user
|
|
6
|
+
# in
|
|
7
|
+
#
|
|
8
|
+
# This action is left to you to customize based on your application
|
|
9
|
+
# requirements. Below is presented a potential way of writing
|
|
10
|
+
# the action.
|
|
11
|
+
#
|
|
12
|
+
# Assuming you have enabled maestrano on a user model
|
|
13
|
+
# called 'User' and a group model called 'Organization'
|
|
14
|
+
# the action could be written the following way
|
|
15
|
+
def consume
|
|
16
|
+
### 1)Find or create the user and the group
|
|
17
|
+
### --
|
|
18
|
+
### The class method 'find_or_create_for_maestrano' is provided
|
|
19
|
+
### by the maestrano-rails gem on the model you have maestrano-ized.
|
|
20
|
+
### The method uses the mapping defined in the model 'maestrano_*_via'
|
|
21
|
+
### block to create the resource if it does not exist
|
|
22
|
+
### The 'user_auth_hash' and 'group_auth_hash' methods are provided
|
|
23
|
+
### by the controller.
|
|
24
|
+
### --
|
|
25
|
+
# user = User.find_or_create_for_maestrano(user_auth_hash)
|
|
26
|
+
# organization = Organization.find_or_create_for_maestrano(group_auth_hash)
|
|
27
|
+
#
|
|
28
|
+
# user.tenant = params[:tenant]
|
|
29
|
+
# user.save
|
|
30
|
+
# organization.tenant = params[:tenant]
|
|
31
|
+
# organization.save
|
|
32
|
+
#
|
|
33
|
+
#
|
|
34
|
+
### 2) Add the user to the group if not already a member
|
|
35
|
+
### --
|
|
36
|
+
### The 'user_group_rel_hash' method is provided by the controller.
|
|
37
|
+
### The role attribute provided by maestrano is one of the following:
|
|
38
|
+
### 'Member', 'Power User', 'Admin', 'Super Admin'
|
|
39
|
+
### The 'member_of?' and 'add_member' methods are not provided by
|
|
40
|
+
### maestrano and are left to you to implement on your models
|
|
41
|
+
### --
|
|
42
|
+
# unless user.member_of?(organization)
|
|
43
|
+
# organization.add_member(user,role: user_group_rel_hash[:role])
|
|
44
|
+
# end
|
|
45
|
+
#
|
|
46
|
+
#
|
|
47
|
+
### Sign the user in and redirect to application root
|
|
48
|
+
### --
|
|
49
|
+
### The 'sign_in' method is not provided by maestrano but should already
|
|
50
|
+
### be there if you are using an authentication framework like Devise
|
|
51
|
+
### --
|
|
52
|
+
# sign_in(user)
|
|
53
|
+
# redirect_to root_path
|
|
54
|
+
|
|
55
|
+
raise NotImplemented.new("The consume action should be customized to fit your application needs")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
Dummy::Application.routes.draw do
|
|
2
|
+
maestrano_routes
|
|
3
|
+
|
|
4
|
+
# The priority is based upon order of creation:
|
|
5
|
+
# first created -> highest priority.
|
|
6
|
+
|
|
7
|
+
# Sample of regular route:
|
|
8
|
+
# match 'products/:id' => 'catalog#view'
|
|
9
|
+
# Keep in mind you can assign values other than :controller and :action
|
|
10
|
+
|
|
11
|
+
# Sample of named route:
|
|
12
|
+
# match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
|
|
13
|
+
# This route can be invoked with purchase_url(:id => product.id)
|
|
14
|
+
|
|
15
|
+
# Sample resource route (maps HTTP verbs to controller actions automatically):
|
|
16
|
+
# resources :products
|
|
17
|
+
|
|
18
|
+
# Sample resource route with options:
|
|
19
|
+
# resources :products do
|
|
20
|
+
# member do
|
|
21
|
+
# get 'short'
|
|
22
|
+
# post 'toggle'
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# collection do
|
|
26
|
+
# get 'sold'
|
|
27
|
+
# end
|
|
28
|
+
# end
|
|
29
|
+
|
|
30
|
+
# Sample resource route with sub-resources:
|
|
31
|
+
# resources :products do
|
|
32
|
+
# resources :comments, :sales
|
|
33
|
+
# resource :seller
|
|
34
|
+
# end
|
|
35
|
+
|
|
36
|
+
# Sample resource route with more complex sub-resources
|
|
37
|
+
# resources :products do
|
|
38
|
+
# resources :comments
|
|
39
|
+
# resources :sales do
|
|
40
|
+
# get 'recent', :on => :collection
|
|
41
|
+
# end
|
|
42
|
+
# end
|
|
43
|
+
|
|
44
|
+
# Sample resource route within a namespace:
|
|
45
|
+
# namespace :admin do
|
|
46
|
+
# # Directs /admin/products/* to Admin::ProductsController
|
|
47
|
+
# # (app/controllers/admin/products_controller.rb)
|
|
48
|
+
# resources :products
|
|
49
|
+
# end
|
|
50
|
+
|
|
51
|
+
# You can have the root of your site routed with "root"
|
|
52
|
+
# just remember to delete public/index.html.
|
|
53
|
+
# root :to => 'welcome#index'
|
|
54
|
+
|
|
55
|
+
# See how all your routes lay out with "rake routes"
|
|
56
|
+
|
|
57
|
+
# This is a legacy wild controller route that's not recommended for RESTful applications.
|
|
58
|
+
# Note: This route will make all actions in every controller accessible via GET requests.
|
|
59
|
+
# match ':controller(/:action(/:id))(.:format)'
|
|
60
|
+
end
|