maestrano-rails 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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