maestrano-rails 0.12.0 → 0.13.0

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.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +86 -64
  4. data/app/controllers/maestrano/rails/saml_base_controller.rb +0 -2
  5. data/lib/generators/active_record/maestrano_group_generator.rb +1 -0
  6. data/lib/generators/active_record/maestrano_user_generator.rb +1 -0
  7. data/lib/generators/maestrano/initializer_generator.rb +12 -0
  8. data/lib/generators/maestrano/install_generator.rb +8 -6
  9. data/lib/generators/maestrano/orm_helpers.rb +2 -2
  10. data/lib/generators/maestrano/templates/group_users_controller.rb +4 -3
  11. data/lib/generators/maestrano/templates/groups_controller.rb +3 -2
  12. data/lib/generators/maestrano/templates/maestrano.rb +9 -4
  13. data/lib/generators/maestrano/templates/saml_controller.rb +6 -1
  14. data/lib/generators/mongoid/maestrano_group_generator.rb +1 -0
  15. data/lib/generators/mongoid/maestrano_user_generator.rb +1 -0
  16. data/lib/maestrano/rails/models/maestrano_auth_resource.rb +13 -10
  17. data/lib/maestrano/rails/routing/routes.rb +27 -8
  18. data/maestrano-rails.gemspec +9 -8
  19. data/test/dummy/db/test.sqlite3 +0 -0
  20. data/test/dummy_activerecord/app/models/mno_crew.rb +1 -1
  21. data/test/dummy_activerecord/app/models/mno_monster.rb +1 -1
  22. data/test/dummy_activerecord/db/migrate/20140526144828_create_mno_monsters.rb +1 -0
  23. data/test/dummy_activerecord/db/migrate/20140526151139_create_mno_crews.rb +1 -0
  24. data/test/dummy_activerecord/db/schema.rb +16 -14
  25. data/test/dummy_activerecord/db/test.sqlite3 +0 -0
  26. data/test/dummy_activerecord/log/test.log +12406 -1412
  27. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/{b0eaab2bc50e2e3547e318f8b43a941e → 070df203a09a9d4a368db8396165a105} +0 -0
  28. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  29. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/{776374354bf36d24e442115e63b9a735 → 2a43a943daba23e5e37e8edf97cb0bdb} +0 -0
  30. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  31. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  32. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/{cc70cce011a969eca12cb127583c2cd6 → 4d062bee73f43586c17d29a175f6243e} +0 -0
  33. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/58e369b37e5157ea746a485eea17e9f7 +0 -0
  34. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/7ae10239eda2588a95fdcc7d871bef52 +0 -0
  35. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/8d5d60255600aa010a32e1d1a9bc6db6 +0 -0
  36. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/b3d9b0e88cdded276ebdce333e338a85 +0 -0
  37. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  38. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  39. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/{9620fb848d554874d4f20b7f0d60f35d → e6e7b55d41c79514c44c3c8a45c17c60} +0 -0
  40. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  41. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/7Epn_PknptysV9qbt8psqZYuMkJ3cRQvbM5MRGmIoiM.cache → sprockets/v3.0/0sUVkLi2-TZrZ_FT_mDeGoWMwGpS48yEfEYxihy5nmI.cache} +0 -0
  42. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/s79F8WSoX84q4jW1ddfSi4dIy-lhWcJDPWw4asKPmMs.cache → sprockets/v3.0/2-0w2lrUYGJTWSS8ctq_qa38uSr88P2L-iV2bXyyGuA.cache} +0 -0
  43. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/DCFIDkbToSiICA4sBCKWvjY-H4gEV-F6c_uICFSEpyE.cache → sprockets/v3.0/38HqlC3fOtaqYgpSbnmBJox6dlNY7sjNBTzMNCFx4Mc.cache} +1 -1
  44. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/43SLVxa0HLJIPQPZDlXpd9_dnIUqeCXVwOA2A9V0Vsc.cache +0 -0
  45. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/5g7dhxVp4YbZmFw_-T3aU2oYq2Z9Jgtps0CKneXYSS0.cache +0 -0
  46. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/XGC8yjqErVk2OqXhCQ6xaSttX62JVKhceqwp6GNA57I.cache → sprockets/v3.0/7dUbHTwNQg5wkMpfSRWE_RDbzc7O3Kwh7s07ubAzXxY.cache} +1 -1
  47. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/9j4Cn3Bg7rj2--N8lWHQ-aSIKt0CZxl7GNjlSaHb7L0.cache +0 -0
  48. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/B5aB2pc11WJxcU-HyLFLnLC96fMFlug6Amz8hS7jDj0.cache +0 -0
  49. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/BQtyJR3ccqed7_s43p3BPj3IL18LWu1Fo1ZnzWC3qcc.cache +0 -0
  50. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/CLp73dIq-CQDXyYTsWbjSxI4NqvVR1Uci51S3Rt83yc.cache +1 -0
  51. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/mOquqR85EYU-k_BoZjuqfR9xrhR4yQUUWCi_3Y3f_u4.cache → sprockets/v3.0/F7q3Bp8Hvzh5mn9AJr9g9uo5GfbZkigepPO5ZXkTzGY.cache} +0 -0
  52. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/GBhwl-B9glhyk8ElvTWqe6I65UKde5wR9fVxPwwJ2Hg.cache +1 -0
  53. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/GDQMRgyhp21p2xg_ITm3PdEDJXU-mgllQ2Mij3aSig4.cache +1 -0
  54. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/Scwp43xGik78ndWSr7A_SyvfrES8ecFKFav7VJe3HFw.cache → sprockets/v3.0/HmDZuiDF0OtgSoq7e2rtPrN16sGrNzJO1GrvmJBFqYs.cache} +0 -0
  55. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/IXVtyHRBEhzVHqrNmcus7pvHXuNfpReCzYzxhB7bBPA.cache +0 -0
  56. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/IgIskv_-aTzPU_wM_Xr1bhk_nLAf8zYrjJonfNtAv6E.cache +1 -0
  57. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/SYzPyxJETf8U18Qget3u80KmztRl2iih2m4te76sQxs.cache → sprockets/v3.0/IrC3CI4UK9epEnLL0YUsgNBcThnYcTbaNjMC5uPv1Uo.cache} +0 -0
  58. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/K_kmfMGNdm_wfvEnsfYglN-C8fj94rbCQJSnAI03mNU.cache +1 -0
  59. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/UDEx_cN4FPO4_mm7ccGeHKEBLb_Mh1EwZpX4n8A-N6w.cache → sprockets/v3.0/KzZa0OWunZJvtU11r_4UKZgCItVQkohjptcFbJ570cU.cache} +0 -0
  60. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/LN4-PLL3b8DkfopaNEJ8U-nu9FuSHjEL4nELYoYCub8.cache +0 -0
  61. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/LniLozFK0AHveFRcKmFzbr_tFBteoecaWgVBQbJwaL0.cache +1 -0
  62. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/M0WOwkZpyk3ShmXHNFhdl4BgfEyvgZuzn40Fww00RYM.cache +1 -0
  63. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/W1I750hXtFauIXfdF_h8f0H6Eh9fPjn1nb3WDnJGJ_0.cache → sprockets/v3.0/M6sHCm5v32qRTBidHBsrTORDxaA9SCVgH3jnRn8iNLk.cache} +1 -1
  64. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/N6i2RwsdhSsA60KxpXlF7RYb3gLVu2mOQlWzPTMcNw4.cache +1 -0
  65. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/POVOiJI4HFOnKUqmwmHBWI-64koorns1IzsUwQdJwL0.cache +0 -0
  66. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/xNScSuE8jYRa2F41anynskx2xa5avSWkYLFAH2l95Ic.cache → sprockets/v3.0/TM6G95HBN6Kv_sF1SaADJyoSpQQSLmMnUXVn2f1jlnY.cache} +0 -0
  67. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/TsyULHo-Ep-IDDhu6nN9frFLJNe7hg_op-o6g3Ycp48.cache +0 -0
  68. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/VNCapNKJLeponthNeFJhaBYs92UBT3P8PugENHP0474.cache +0 -0
  69. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/W1I750hXtFauIXfdF_h8f0H6Eh9fPjn1nb3WDnJGJ_0.cache +0 -0
  70. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/WHb_lDwqFJu6BaJF8_AHwWMmgY9AIS0RUjJZATvHGy8.cache +0 -0
  71. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/SBwQFRWeGZwRAHnGVCZGOamm432tMyKa18m-p6TWU6Q.cache → sprockets/v3.0/WkKqqsOutgzMPu_Ym1AolTwC2_fRzqxbvRFpO9Lgh5s.cache} +0 -0
  72. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/Wo3dLIbJvLLO5QrL7Lxqf8CcxQPjTVgZjmAHci0eYlg.cache +1 -0
  73. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/aAuuIrhNOw2g3r2XWyh_9bURa6E2xn_5BCVi43ab-Ps.cache +0 -0
  74. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/aFlSrtCQNya8JILRa5652nUEY0ACPTd_pGU3yXuOx9o.cache +2 -0
  75. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/b7lBpkBxQaCxHBBRf-QF0CiQKnRE8kYGLUzgAPTjf_k.cache +0 -0
  76. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/c5Auc2IFYhhN0woGElqbdz3HoROtMJX4TmUNekopcik.cache +1 -0
  77. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/degszJUXEQsWvjrjcbxJNLqH6tFybiuIClFdPT8qgyE.cache +0 -0
  78. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/sn7tMYj6vUxaFXG7SQe4O79d5oMoqJydwx33q9-308E.cache → sprockets/v3.0/elwOvgAJ85O6bhimWI8AJJbAOJO-_oUSslLhr9GEfFc.cache} +0 -0
  79. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/7rKh4lG5ceEUlcKp6PKkbPdRZ-l2F_u-ZeykbRhaK2I.cache → sprockets/v3.0/f8WWrWAptfo1qSmHsTYrCJzb_vYG0wpQ9xvPvb0F6yI.cache} +0 -0
  80. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/hcPk5eM7VJPi2ZM7DxeJRgnl-LSUUd_GrYrFi2mj0Yc.cache +1 -0
  81. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/kw00uOxe2W3DagBUVa0aLGOXTAH8i5-PNNpxyDJXkR0.cache +1 -0
  82. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/l_tJ9WwBL9Q8XjxQN56nGuGtCrP7kGBvE8e76g8tRC0.cache +0 -0
  83. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/neudolVI7_nIBYKcEI1npz278d2-LSi4Y8fK5Z2ctTY.cache +1 -0
  84. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/EEUTqiyEo6nmDZZeHMwO1r9cKT3LhciUYFSoHU0iGcE.cache → sprockets/v3.0/qY82QbvY3JrynAsb6pAVt8teuBrKIkOQ4Yw25pqPvE0.cache} +0 -0
  85. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/qg_wftmO7jS_a89vOJgaK0THZaNR8KUscoQjo9oWPVU.cache +1 -0
  86. data/test/dummy_activerecord/tmp/cache/{assets/test/sprockets/v3.0/6aJwp38vBSXdtink_SgOtnqUqp8Z8okHEs08vGkZ0ec.cache → sprockets/v3.0/rjZFcBcZBcZzhVbfMwVzSmiPIhOG3lI-TPXRAVtpN6I.cache} +0 -0
  87. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/smkGipMoyg_yBW7rvwuP9Ci_fdWK1w68wbhDgjEjHcw.cache +0 -0
  88. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/smpyMrlMLm6NqLzR4-8kAty0B7CHGePCuc4KKNIU43Y.cache +1 -0
  89. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/spcLVj7sWjAbzSoM2eka7e_jHpvNnVKRzuuDwd0m-pQ.cache +1 -0
  90. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/uESU-1lgcxaDZ5lrTLLAlg8GUd-Igwr2gRavnaveWXU.cache +0 -0
  91. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/y66z-kCCKl0cyGdSI_hQzkRNjxRApQedRgJVTu3BuRo.cache +2 -0
  92. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/yJMqE54-t1my_dumhIg6mamMyRx0qADs7nY7cks0l-Q.cache +1 -0
  93. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/ypxuZOcRS1MWu4o3mfAWRIDDdEl4uWHuDdXkvQoohc4.cache +1 -0
  94. data/test/dummy_activerecord/tmp/cache/sprockets/v3.0/zcBfaDXG5wGN1mPgJL8V1Y7f3VJ7zCZzS4q4zY6CkEM.cache +1 -0
  95. data/test/models/maestrano_group_via_test.rb +2 -2
  96. data/test/models/maestrano_user_via_test.rb +2 -2
  97. data/test/tmp/app/controllers/maestrano/account/group_users_controller.rb +27 -0
  98. data/test/tmp/app/controllers/maestrano/account/groups_controller.rb +37 -0
  99. data/test/tmp/app/controllers/maestrano/auth/saml_controller.rb +57 -0
  100. data/test/tmp/config/routes.rb +60 -0
  101. metadata +130 -86
  102. data/test/dummy/db/development.sqlite3 +0 -0
  103. data/test/dummy_activerecord/db/development.sqlite3 +0 -0
  104. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/-uA6cy-2nKd6XkeWcJhr8X3v3yZ5oViPiHRlvne99W0.cache +0 -2
  105. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/04Ki0BXgfOJJaUw5um_GT67jyhfSeC5XuP72cI6NoDY.cache +0 -0
  106. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/1ld51qTCgZXC9suf2t2hWCTtpjSIsBirvsb90m9ie-8.cache +0 -1
  107. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/5g7dhxVp4YbZmFw_-T3aU2oYq2Z9Jgtps0CKneXYSS0.cache +0 -2
  108. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/6RdLjaglysmf-CPvVKaloO_-5q9ADlCh9heL_jAQz-8.cache +0 -1
  109. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/9TpslyozRKK68-sW9jLt13QIu1XWy-q-CzKU1EAb7RA.cache +0 -0
  110. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/BQtyJR3ccqed7_s43p3BPj3IL18LWu1Fo1ZnzWC3qcc.cache +0 -2
  111. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/KprhKxGjJIBw-qHcuN-fbQgVttWYDjUyQCKFvLUpSeQ.cache +0 -1
  112. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/Mbf0YromzGbDh3Q33bjwLGOTV9oj3u4de0ocFPBeXCY.cache +0 -1
  113. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/VNCapNKJLeponthNeFJhaBYs92UBT3P8PugENHP0474.cache +0 -2
  114. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/WivRTRHrfoezUj_7OaU50eG012NUWibGEeJYA4g59mY.cache +0 -1
  115. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/b7lBpkBxQaCxHBBRf-QF0CiQKnRE8kYGLUzgAPTjf_k.cache +0 -2
  116. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/eYr8LE29pvbLeoiuX1INZlTcPYWjQ7ThMYuRIvPPlCg.cache +0 -1
  117. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/gy9RGhwK8c2SEljBLCz_qiWrBoP_Cl5IgvCjJuxw148.cache +0 -0
  118. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/l_tJ9WwBL9Q8XjxQN56nGuGtCrP7kGBvE8e76g8tRC0.cache +0 -2
  119. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/mhIfYcBPFAF-_yuaqLVntwdB3zZcDDOc5femwATDC8Q.cache +0 -1
  120. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/rXBgGAYahPKy55mgXjkz5OcFFiiGfvCLoOsbkMQGNDs.cache +0 -1
  121. data/test/dummy_activerecord/tmp/cache/assets/test/sprockets/v3.0/uRsN6Sa_S5hSLGCCuuLNBXfhwvck-N7Sr2XbVq8waFY.cache +0 -1
  122. data/test/tmp/app/models/monster.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fedd1ff130d558fb306be8559c24744c04a07d37
4
- data.tar.gz: 1cd98b728ff23732d4fecc76686ba46662965f55
3
+ metadata.gz: 38f6e4c01058ea2bc5b48ffe2b2bd4be30e7163f
4
+ data.tar.gz: e3cb08aedcfc7691c4ec6aac849842924406ddfd
5
5
  SHA512:
6
- metadata.gz: aaea660651d7009b7868694cb2b52ae5f7cf9808a82588049e9e2ed73f7da363bba6516be3586a70c25b7b74f7dcf1e745b58d7e49312866ac14e93a15f0447a
7
- data.tar.gz: 2785e1b32bbec1ecca65d252565e651086c348fa2384ccaccec90dc4d7445604925a6c299e5203c2a913998af5c09257b4652722d908d33a436a5faecdcf5988
6
+ metadata.gz: a7b5df754ad9e5bc9ad8e2f092691cab8924003ae3349b1bdb54e7562caf130e7740570d98b42eb33bd193e1bf79a56136909e9bfb6f473c437def5a3926ee4f
7
+ data.tar.gz: c69ced5c12f9d2913792787413a62b14cd2ed62f519a99282c01e93894be4ea9f8ee3c92a10a88bf25b4dfe142cac738d374d35f9603e6456c7749cfabb01b6b
data/Gemfile CHANGED
@@ -2,7 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  gem 'rails'
4
4
  gem 'jquery-rails'
5
- gem 'maestrano', '~> 0.12.0'
5
+ gem 'maestrano', '~> 0.12.1'
6
6
 
7
7
  group :test do
8
8
  gem 'test-unit'
data/Gemfile.lock CHANGED
@@ -1,42 +1,54 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- actionmailer (4.1.4)
5
- actionpack (= 4.1.4)
6
- actionview (= 4.1.4)
7
- mail (~> 2.5.4)
8
- actionpack (4.1.4)
9
- actionview (= 4.1.4)
10
- activesupport (= 4.1.4)
11
- rack (~> 1.5.2)
4
+ actionmailer (4.2.5)
5
+ actionpack (= 4.2.5)
6
+ actionview (= 4.2.5)
7
+ activejob (= 4.2.5)
8
+ mail (~> 2.5, >= 2.5.4)
9
+ rails-dom-testing (~> 1.0, >= 1.0.5)
10
+ actionpack (4.2.5)
11
+ actionview (= 4.2.5)
12
+ activesupport (= 4.2.5)
13
+ rack (~> 1.6)
12
14
  rack-test (~> 0.6.2)
13
- actionview (4.1.4)
14
- activesupport (= 4.1.4)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
17
+ actionview (4.2.5)
18
+ activesupport (= 4.2.5)
15
19
  builder (~> 3.1)
16
20
  erubis (~> 2.7.0)
17
- activemodel (4.1.4)
18
- activesupport (= 4.1.4)
21
+ rails-dom-testing (~> 1.0, >= 1.0.5)
22
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
23
+ activejob (4.2.5)
24
+ activesupport (= 4.2.5)
25
+ globalid (>= 0.3.0)
26
+ activemodel (4.2.5)
27
+ activesupport (= 4.2.5)
19
28
  builder (~> 3.1)
20
- activerecord (4.1.4)
21
- activemodel (= 4.1.4)
22
- activesupport (= 4.1.4)
23
- arel (~> 5.0.0)
24
- activesupport (4.1.4)
25
- i18n (~> 0.6, >= 0.6.9)
29
+ activerecord (4.2.5)
30
+ activemodel (= 4.2.5)
31
+ activesupport (= 4.2.5)
32
+ arel (~> 6.0)
33
+ activesupport (4.2.5)
34
+ i18n (~> 0.7)
26
35
  json (~> 1.7, >= 1.7.7)
27
36
  minitest (~> 5.1)
28
- thread_safe (~> 0.1)
37
+ thread_safe (~> 0.3, >= 0.3.4)
29
38
  tzinfo (~> 1.1)
30
39
  addressable (2.3.6)
31
- arel (5.0.1.20140414130214)
40
+ arel (6.0.3)
32
41
  bson (1.10.2)
42
+ bson (1.10.2-java)
33
43
  bson_ext (1.10.2)
34
44
  bson (~> 1.10.2)
35
45
  builder (3.2.2)
46
+ concurrent-ruby (1.0.0)
47
+ concurrent-ruby (1.0.0-java)
36
48
  database_cleaner (1.3.0)
37
49
  descendants_tracker (0.0.4)
38
50
  thread_safe (~> 0.3, >= 0.3.1)
39
- domain_name (0.5.24)
51
+ domain_name (0.5.25)
40
52
  unf (>= 0.0.5, < 1.0.0)
41
53
  durran-validatable (2.0.1)
42
54
  erubis (2.7.0)
@@ -51,15 +63,16 @@ GEM
51
63
  multi_json (>= 1.7.5, < 2.0)
52
64
  nokogiri (~> 1.6.3)
53
65
  oauth2
66
+ globalid (0.3.6)
67
+ activesupport (>= 4.1.0)
54
68
  hashie (3.2.0)
55
69
  highline (1.6.21)
56
- hike (1.2.3)
57
70
  http-cookie (1.0.2)
58
71
  domain_name (~> 0.5)
59
72
  httparty (0.13.7)
60
73
  json (~> 1.8)
61
74
  multi_xml (>= 0.5.2)
62
- i18n (0.6.11)
75
+ i18n (0.7.0)
63
76
  jeweler (2.0.1)
64
77
  builder
65
78
  bundler (>= 1.0)
@@ -72,39 +85,42 @@ GEM
72
85
  jquery-rails (3.1.1)
73
86
  railties (>= 3.0, < 5.0)
74
87
  thor (>= 0.14, < 2.0)
75
- json (1.8.1)
76
- json (1.8.1-java)
88
+ json (1.8.3)
89
+ json (1.8.3-java)
77
90
  jwt (1.0.0)
78
91
  leshill-will_paginate (2.3.11)
92
+ loofah (2.0.3)
93
+ nokogiri (>= 1.5.9)
79
94
  macaddr (1.7.1)
80
95
  systemu (~> 2.6.2)
81
- maestrano (0.12.0)
96
+ maestrano (0.12.1)
82
97
  httparty (~> 0.13)
83
98
  json (~> 1.8)
84
99
  mime-types (~> 1.25)
85
100
  nokogiri (>= 1.5.0)
86
101
  rest-client (~> 1.4)
87
102
  uuid (~> 2.3)
88
- mail (2.5.4)
89
- mime-types (~> 1.16)
90
- treetop (~> 1.4.8)
103
+ mail (2.6.3)
104
+ mime-types (>= 1.16, < 3)
91
105
  metaclass (0.0.4)
92
106
  mime-types (1.25.1)
93
107
  mini_portile (0.6.0)
94
- minitest (5.4.0)
108
+ minitest (5.8.3)
95
109
  mocha (1.1.0)
96
110
  metaclass (~> 0.0.1)
97
111
  mongo (1.10.2)
98
112
  bson (= 1.10.2)
113
+ mongo (1.10.2-java)
114
+ bson (= 1.10.2)
99
115
  mongoid (1.0.6)
100
116
  activesupport (>= 2.2.2)
101
117
  durran-validatable (>= 2.0.1)
102
118
  leshill-will_paginate (>= 2.3.11)
103
119
  mongo (>= 0.18.2)
104
- multi_json (1.10.1)
120
+ multi_json (1.11.2)
105
121
  multi_xml (0.5.5)
106
122
  multipart-post (2.0.0)
107
- netrc (0.10.3)
123
+ netrc (0.11.0)
108
124
  nokogiri (1.6.3.1)
109
125
  mini_portile (= 0.6.0)
110
126
  nokogiri (1.6.3.1-java)
@@ -114,26 +130,34 @@ GEM
114
130
  multi_json (~> 1.3)
115
131
  multi_xml (~> 0.5)
116
132
  rack (~> 1.2)
117
- polyglot (0.3.5)
118
- rack (1.5.2)
119
- rack-test (0.6.2)
133
+ rack (1.6.4)
134
+ rack-test (0.6.3)
120
135
  rack (>= 1.0)
121
- rails (4.1.4)
122
- actionmailer (= 4.1.4)
123
- actionpack (= 4.1.4)
124
- actionview (= 4.1.4)
125
- activemodel (= 4.1.4)
126
- activerecord (= 4.1.4)
127
- activesupport (= 4.1.4)
136
+ rails (4.2.5)
137
+ actionmailer (= 4.2.5)
138
+ actionpack (= 4.2.5)
139
+ actionview (= 4.2.5)
140
+ activejob (= 4.2.5)
141
+ activemodel (= 4.2.5)
142
+ activerecord (= 4.2.5)
143
+ activesupport (= 4.2.5)
128
144
  bundler (>= 1.3.0, < 2.0)
129
- railties (= 4.1.4)
130
- sprockets-rails (~> 2.0)
131
- railties (4.1.4)
132
- actionpack (= 4.1.4)
133
- activesupport (= 4.1.4)
145
+ railties (= 4.2.5)
146
+ sprockets-rails
147
+ rails-deprecated_sanitizer (1.0.3)
148
+ activesupport (>= 4.2.0.alpha)
149
+ rails-dom-testing (1.0.7)
150
+ activesupport (>= 4.2.0.beta, < 5.0)
151
+ nokogiri (~> 1.6.0)
152
+ rails-deprecated_sanitizer (>= 1.0.1)
153
+ rails-html-sanitizer (1.0.2)
154
+ loofah (~> 2.0)
155
+ railties (4.2.5)
156
+ actionpack (= 4.2.5)
157
+ activesupport (= 4.2.5)
134
158
  rake (>= 0.8.7)
135
159
  thor (>= 0.18.1, < 2.0)
136
- rake (10.3.2)
160
+ rake (10.5.0)
137
161
  rdoc (4.1.1)
138
162
  json (~> 1.4)
139
163
  rest-client (1.8.0)
@@ -146,25 +170,20 @@ GEM
146
170
  shoulda-context (1.2.1)
147
171
  shoulda-matchers (2.6.2)
148
172
  activesupport (>= 3.0.0)
149
- sprockets (2.12.1)
150
- hike (~> 1.2)
151
- multi_json (~> 1.0)
152
- rack (~> 1.0)
153
- tilt (~> 1.1, != 1.3.0)
154
- sprockets-rails (2.1.3)
155
- actionpack (>= 3.0)
156
- activesupport (>= 3.0)
157
- sprockets (~> 2.8)
173
+ sprockets (3.5.2)
174
+ concurrent-ruby (~> 1.0)
175
+ rack (> 1, < 3)
176
+ sprockets-rails (3.0.0)
177
+ actionpack (>= 4.0)
178
+ activesupport (>= 4.0)
179
+ sprockets (>= 3.0.0)
158
180
  sqlite3 (1.3.9)
159
181
  systemu (2.6.5)
160
182
  test-unit (2.5.5)
161
183
  thor (0.19.1)
162
- thread_safe (0.3.4)
163
- tilt (1.4.1)
164
- treetop (1.4.15)
165
- polyglot
166
- polyglot (>= 0.3.1)
167
- tzinfo (1.2.1)
184
+ thread_safe (0.3.5)
185
+ thread_safe (0.3.5-java)
186
+ tzinfo (1.2.2)
168
187
  thread_safe (~> 0.1)
169
188
  unf (0.1.4)
170
189
  unf_ext
@@ -182,10 +201,13 @@ DEPENDENCIES
182
201
  database_cleaner
183
202
  jeweler
184
203
  jquery-rails
185
- maestrano (~> 0.12.0)
204
+ maestrano (~> 0.12.1)
186
205
  mocha
187
206
  mongoid
188
207
  rails
189
208
  shoulda
190
209
  sqlite3
191
210
  test-unit
211
+
212
+ BUNDLED WITH
213
+ 1.10.6
@@ -3,12 +3,10 @@ class Maestrano::Rails::SamlBaseController < ApplicationController
3
3
  protect_from_forgery :except => [:consume]
4
4
  around_filter :saml_response_transaction, only: [:consume]
5
5
 
6
- # GET /maestrano/auth/saml/init
7
6
  # GET /maestrano/auth/saml/init/:tenant
8
7
  #
9
8
  # Initialize the SAML request and redirects the user to Maestrano
10
9
  def init
11
- session[:tenant] = params[:tenant]
12
10
  redirect_to Maestrano::Saml::Request[params[:tenant]].new(params, session).redirect_url
13
11
  end
14
12
 
@@ -31,6 +31,7 @@ module ActiveRecord
31
31
  ## User source identification fields
32
32
  t.string :provider
33
33
  t.string :uid
34
+ t.string :tenant
34
35
  RUBY
35
36
  end
36
37
  end
@@ -31,6 +31,7 @@ module ActiveRecord
31
31
  ## User source identification fields
32
32
  t.string :provider
33
33
  t.string :uid
34
+ t.string :tenant
34
35
  RUBY
35
36
  end
36
37
  end
@@ -0,0 +1,12 @@
1
+ module Maestrano
2
+ module Generators
3
+ class InitializerGenerator < ::Rails::Generators::Base
4
+ source_root File.expand_path("../templates", __FILE__)
5
+ desc "Creates a Maestrano initializer and a customizable controller for SAML Single Sign-On"
6
+
7
+ def copy_initializer
8
+ template "maestrano.rb", "config/initializers/maestrano.rb"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,25 +1,27 @@
1
+ require_relative 'initializer_generator'
2
+
1
3
  module Maestrano
2
4
  module Generators
3
5
  class InstallGenerator < ::Rails::Generators::Base
4
6
  source_root File.expand_path("../templates", __FILE__)
5
7
  desc "Creates a Maestrano initializer and a customizable controller for SAML Single Sign-On"
6
-
8
+
7
9
  def copy_initializer
8
- template "maestrano.rb", "config/initializers/maestrano.rb"
10
+ Maestrano::Generators::InitializerGenerator.new('maestrano:initializer').invoke_all
9
11
  end
10
-
12
+
11
13
  def copy_saml_controller
12
14
  template "saml_controller.rb", "app/controllers/maestrano/auth/saml_controller.rb"
13
15
  end
14
-
16
+
15
17
  def copy_account_groups_controller
16
18
  template "groups_controller.rb", "app/controllers/maestrano/account/groups_controller.rb"
17
19
  end
18
-
20
+
19
21
  def copy_account_group_users_controller
20
22
  template "group_users_controller.rb", "app/controllers/maestrano/account/group_users_controller.rb"
21
23
  end
22
-
24
+
23
25
  def add_maestrano_routes
24
26
  maestrano_routes = <<-CONTENT
25
27
  maestrano_routes
@@ -7,7 +7,7 @@ module Maestrano
7
7
  if model_type == 'user'
8
8
  buffer = <<-CONTENT
9
9
  # Enable Maestrano for this user
10
- maestrano_user_via :provider, :uid do |user,maestrano|
10
+ maestrano_user_via :provider, :uid, :tenant do |user,maestrano|
11
11
  user.name = maestrano.first_name
12
12
  user.surname = maestrano.last_name
13
13
  user.email = maestrano.email
@@ -20,7 +20,7 @@ CONTENT
20
20
  else
21
21
  buffer = <<-CONTENT
22
22
  # Enable Maestrano for this group
23
- maestrano_group_via :provider, :uid do |group, maestrano|
23
+ maestrano_group_via :provider, :uid, :tenant do |group, maestrano|
24
24
  group.name = (maestrano.company_name || "Default Group name")
25
25
  # group.principal_email = maestrano.email
26
26
  # group.city = maestrano.city
@@ -1,11 +1,12 @@
1
1
  class Maestrano::Account::GroupUsersController < Maestrano::Rails::WebHookController
2
2
 
3
- # DELETE /maestrano/account/groups/cld-1/users/usr-1
3
+ # DELETE /maestrano/account/groups/cld-1/users/usr-1/:tenant
4
4
  # Remove a user from a group
5
5
  def destroy
6
6
  # Set the right uid based on Maestrano.param('sso.creation_mode')
7
7
  user_uid = Maestrano.mask_user(params[:id],params[:group_id])
8
8
  group_uid = params[:group_id]
9
+ tenant = params[:tenant]
9
10
 
10
11
  # Perform association deletion steps here
11
12
  # --
@@ -13,8 +14,8 @@ class Maestrano::Account::GroupUsersController < Maestrano::Rails::WebHookContro
13
14
  # then you might want to just delete/cancel/block the user
14
15
  #
15
16
  # E.g
16
- # user = User.find_by_provider_and_uid('maestrano',user_uid)
17
- # organization = Organization.find_by_provider_and_uid('maestrano',group_uid)
17
+ # user = User.find_by_tenant_and_uid(tenant, user_uid)
18
+ # organization = Organization.find_by_tenant_and_uid(tenant ,group_uid)
18
19
  #
19
20
  # if Maestrano.param('sso.creation_mode') == 'virtual'
20
21
  # user.destroy
@@ -1,9 +1,10 @@
1
1
  class Maestrano::Account::GroupsController < Maestrano::Rails::WebHookController
2
2
 
3
- # DELETE /maestrano/account/groups/cld-1
3
+ # DELETE /maestrano/account/groups/cld-1/:tenant
4
4
  # Delete an entire group
5
5
  def destroy
6
6
  group_uid = params[:id]
7
+ tenant = params[:tenant]
7
8
 
8
9
  # Perform deletion steps here
9
10
  # --
@@ -15,7 +16,7 @@ class Maestrano::Account::GroupsController < Maestrano::Rails::WebHookController
15
16
  # that group
16
17
  # --
17
18
  # E.g:
18
- # organization = Organization.find_by_provider_and_uid('maestrano',group_uid)
19
+ # organization = Organization.find_by_tenant_and_uid(tenant, group_uid)
19
20
  #
20
21
  # amount_cents = organization.calculate_total_due_remaining
21
22
  # Maestrano::Account::Bill.create({
@@ -52,7 +52,7 @@ Maestrano.configure do |config|
52
52
  # generated when you run 'rake maestrano:install' and is available at
53
53
  # <rails_root>/app/controllers/maestrano/auth/saml.rb
54
54
  #
55
- # config.sso.init_path = '/maestrano/auth/saml/init'
55
+ config.sso.init_path = '/maestrano/auth/saml/init/default'
56
56
 
57
57
  # ==> SSO Consumer endpoint
58
58
  # This is your application path to the SAML endpoint that allows users to
@@ -63,7 +63,7 @@ Maestrano.configure do |config|
63
63
  # generated when you run 'rake maestrano:install' and is available at
64
64
  # <rails_root>/app/controllers/maestrano/auth/saml.rb
65
65
  #
66
- # config.sso.consume_path = '/maestrano/auth/saml/consume'
66
+ config.sso.consume_path = '/maestrano/auth/saml/consume/default'
67
67
 
68
68
  # ==> Single Logout activation
69
69
  # Enable/Disable single logout. When troubleshooting authentication issues
@@ -121,8 +121,8 @@ Maestrano.configure do |config|
121
121
  # you run 'rake maestrano:install' and is available under
122
122
  # <rails_root>/app/controllers/maestrano/account/
123
123
  #
124
- # config.webhook.account.groups_path = '/maestrano/account/groups/:id',
125
- # config.webhook.account.group_users_path = '/maestrano/account/groups/:group_id/users/:id',
124
+ config.webhook.account.groups_path = '/maestrano/account/groups/:id/default'
125
+ config.webhook.account.group_users_path = '/maestrano/account/groups/:group_id/users/:id/default'
126
126
  end
127
127
 
128
128
  # Example of multi-tenant configuration
@@ -132,4 +132,9 @@ Maestrano['other-tenant'].configure do |config|
132
132
 
133
133
  config.api.id = (config.environment == 'production' ? 'prod_app_id' : 'sandbox_app_id')
134
134
  config.api.key = (config.environment == 'production' ? 'prod_api_key' : 'sandbox_api_key')
135
+
136
+ config.sso.init_path = '/maestrano/auth/saml/init/other-tenant'
137
+ config.sso.consume_path = '/maestrano/auth/saml/consume/other-tenant'
138
+ config.webhook.account.groups_path = '/maestrano/account/groups/:id/other-tenant'
139
+ config.webhook.account.group_users_path = '/maestrano/account/groups/:group_id/users/:id/other-tenant'
135
140
  end
@@ -1,6 +1,6 @@
1
1
  class Maestrano::Auth::SamlController < Maestrano::Rails::SamlBaseController
2
2
 
3
- #== POST '/maestrano/auth/saml/consume'
3
+ #== POST '/maestrano/auth/saml/consume/:tenant'
4
4
  # Final phase of the Single Sign-On handshake. Find or create
5
5
  # the required resources (user and group) and sign the user
6
6
  # in
@@ -25,6 +25,11 @@ class Maestrano::Auth::SamlController < Maestrano::Rails::SamlBaseController
25
25
  # user = User.find_or_create_for_maestrano(user_auth_hash)
26
26
  # organization = Organization.find_or_create_for_maestrano(group_auth_hash)
27
27
  #
28
+ # user.tenant = params[:tenant]
29
+ # user.save
30
+ # organization.tenant = params[:tenant]
31
+ # organization.save
32
+ #
28
33
  #
29
34
  ### 2) Add the user to the group if not already a member
30
35
  ### --
@@ -19,6 +19,7 @@ module Mongoid
19
19
  ## User source identification fields
20
20
  field :provider, type: String, default: ""
21
21
  field :uid, type: String, default: ""
22
+ field :tenant, type: String, default: ""
22
23
  RUBY
23
24
  end
24
25
  end
@@ -19,6 +19,7 @@ module Mongoid
19
19
  ## User source identification fields
20
20
  field :provider, type: String, default: ""
21
21
  field :uid, type: String, default: ""
22
+ field :tenant, type: String, default: ""
22
23
  RUBY
23
24
  end
24
25
  end
@@ -13,9 +13,9 @@ module Maestrano
13
13
  module ClassMethods
14
14
  # Configure a user model with mapping to SSO fields
15
15
  # and add user behaviour
16
- def maestrano_user_via(provider_field,uid_field, &block)
16
+ def maestrano_user_via(provider_field, uid_field, tenant_field, &block)
17
17
  extend Maestrano::Rails::MaestranoAuthResource::LocalClassGenericMethods
18
- self.maestrano_generic_configurator(provider_field,uid_field, &block)
18
+ self.maestrano_generic_configurator(provider_field, uid_field, tenant_field, &block)
19
19
 
20
20
  include Maestrano::Rails::MaestranoAuthResource::LocalInstanceUserMethods
21
21
 
@@ -27,9 +27,9 @@ module Maestrano
27
27
 
28
28
  # Configure a group model with mapping to SSO fields
29
29
  # and add group behaviour
30
- def maestrano_group_via(provider_field,uid_field, &block)
30
+ def maestrano_group_via(provider_field, uid_field, tenant_field, &block)
31
31
  extend Maestrano::Rails::MaestranoAuthResource::LocalClassGenericMethods
32
- self.maestrano_generic_configurator(provider_field,uid_field, &block)
32
+ self.maestrano_generic_configurator(provider_field, uid_field, tenant_field, &block)
33
33
 
34
34
  include Maestrano::Rails::MaestranoAuthResource::LocalInstanceGroupMethods
35
35
  end
@@ -38,11 +38,12 @@ module Maestrano
38
38
  # Actual class methods - injected after behaviour
39
39
  # has been added (don't polute the model scope)
40
40
  module LocalClassGenericMethods
41
- def maestrano_generic_configurator(provider_field,uid_field, &block)
41
+ def maestrano_generic_configurator(provider_field, uid_field, tenant_field, &block)
42
42
  cattr_accessor :maestrano_options
43
43
  self.maestrano_options = {
44
44
  provider: provider_field.to_s,
45
45
  uid: uid_field.to_s,
46
+ tenant: tenant_field.to_s,
46
47
  mapping: block
47
48
  }
48
49
 
@@ -51,11 +52,12 @@ module Maestrano
51
52
 
52
53
  # Find the resource based on provider and uid fields or create
53
54
  # it using the mapping block defined at the model level
54
- def find_or_create_for_maestrano(auth_hash)
55
+ def find_or_create_for_maestrano(auth_hash, tenant='default')
55
56
  # Look for the entity first
56
57
  entity = self.where(
57
58
  self.maestrano_options[:provider].to_sym => auth_hash[:provider],
58
59
  self.maestrano_options[:uid].to_sym => auth_hash[:uid],
60
+ self.maestrano_options[:tenant].to_sym => tenant
59
61
  ).first
60
62
 
61
63
  # Create it otherwise
@@ -78,11 +80,12 @@ module Maestrano
78
80
  end
79
81
 
80
82
  # Call mapping block
81
- self.maestrano_options[:mapping].call(entity,info,extra)
83
+ self.maestrano_options[:mapping].call(entity, info, extra)
82
84
 
83
- # Finally set provider and uid then save
84
- entity.send("#{self.maestrano_options[:provider]}=",auth_hash[:provider])
85
- entity.send("#{self.maestrano_options[:uid]}=",auth_hash[:uid])
85
+ # Finally set provider, uid and tenant then save
86
+ entity.send("#{self.maestrano_options[:provider]}=", auth_hash[:provider])
87
+ entity.send("#{self.maestrano_options[:uid]}=", auth_hash[:uid])
88
+ entity.send("#{self.maestrano_options[:tenant]}=", tenant)
86
89
  entity.save!
87
90
  end
88
91
 
@@ -3,22 +3,41 @@ module ActionDispatch::Routing
3
3
  def maestrano_routes
4
4
  namespace :maestrano do
5
5
  scope module: :rails do
6
+ # GET /maestrano/metadata
6
7
  get '/metadata', to: 'metadata#index'
7
- get '/metadata/:tenant', to: 'metadata#index', as: 'tenant'
8
+
9
+ # GET /maestrano/metadata/mytenant
10
+ get '/metadata/:tenant', to: 'metadata#index'
8
11
  end
9
12
 
10
13
  namespace :auth do
11
14
  resources :saml, only:[] do
12
- get 'init', on: :collection
13
- get 'init/:tenant', on: :collection, to: 'saml#init', as: 'tenant'
14
- post 'consume', on: :collection
15
+ # GET /maestrano/auth/saml/init
16
+ get 'init', on: :collection, to: 'saml#init', as: :default
17
+
18
+ # GET /maestrano/auth/saml/init/mytenant
19
+ get 'init/:tenant', on: :collection, to: 'saml#init', as: :tenant
20
+
21
+ # POST /maestrano/auth/saml/consume
22
+ post 'consume', on: :collection, to: 'saml#consume'
23
+
24
+ # POST /maestrano/auth/saml/consume/mytenant
25
+ post 'consume/:tenant', on: :collection, to: 'saml#consume'
15
26
  end
16
27
  end
17
-
28
+
18
29
  namespace :account do
19
- resources :groups, only: [:destroy] do
20
- resources :users, only: [:destroy], controller: 'group_users'
21
- end
30
+ # DELETE /maestrano/account/groups/cld-1234
31
+ delete 'groups/:id', to: 'groups#destroy'
32
+
33
+ # DELETE /maestrano/account/groups/cld-1234/mytenant
34
+ delete 'groups/:id/:tenant', to: 'groups#destroy'
35
+
36
+ # DELETE /maestrano/account/groups/cld-1234/users/usr-1234
37
+ delete 'groups/:group_id/users/:id', to: 'group_users#destroy'
38
+
39
+ # DELETE /maestrano/account/groups/cld-1234/users/usr-1234/mytenant
40
+ delete 'groups/:group_id/users/:id/:tenant', to: 'group_users#destroy'
22
41
  end
23
42
  end
24
43
  end