mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	SAML authorized accounts might be across various domains, this allows for switching of accounts only in case of SAML authenticated user accounts across other accounts with the same SAML uid/username. Moves the previous switch account logic to its own ui-custom module (cherry picked from commit 1065661cd50c8d43bf65644a13d164b96732b011) Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com> Conflicts: plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java ui/index.jsp
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you under the Apache License, Version 2.0 (the
 | |
| // "License"); you may not use this file except in compliance
 | |
| // with the License.  You may obtain a copy of the License at
 | |
| //
 | |
| //   http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing,
 | |
| // software distributed under the License is distributed on an
 | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| // KIND, either express or implied.  See the License for the
 | |
| // specific language governing permissions and limitations
 | |
| // under the License.
 | |
| 
 | |
| (function($, cloudStack) {
 | |
|     $(window).bind('cloudStack.ready', function() {
 | |
|         var showSamlDomainSwitcher = false;
 | |
|         if (g_idpList) {
 | |
|             showSamlDomainSwitcher = true;
 | |
|         }
 | |
|         if (!showSamlDomainSwitcher) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         var $label = $('<label>').html('Domain:');
 | |
|         var $header = $('#header .controls');
 | |
|         var $domainSwitcher = $('<div>').addClass('domain-switcher');
 | |
|         var $domainSelect = $('<select>');
 | |
|         $domainSwitcher.append($label, $domainSelect);
 | |
| 
 | |
|         var switchAccount = function(userId, domainId) {
 | |
|             var toReload = true;
 | |
|             $.ajax({
 | |
|                 url: createURL('listAndSwitchSamlAccount'),
 | |
|                 type: 'POST',
 | |
|                 async: false,
 | |
|                 data: {
 | |
|                     userid: userId,
 | |
|                     domainid: domainId
 | |
|                 },
 | |
|                 success: function(data, textStatus) {
 | |
|                     document.location.reload(true);
 | |
|                 },
 | |
|                 error: function(data) {
 | |
|                     cloudStack.dialog.notice({
 | |
|                         message: parseXMLHttpResponse(data)
 | |
|                     });
 | |
|                     if (data.status !== 200) {
 | |
|                         toReload = false;
 | |
|                     }
 | |
|                 },
 | |
|                 complete: function() {
 | |
|                     if (toReload) {
 | |
|                         document.location.reload(true);
 | |
|                     }
 | |
|                     toReload = true;
 | |
|                 }
 | |
|             });
 | |
|         };
 | |
| 
 | |
|         $domainSelect.change(function() {
 | |
|             var selectedOption = $domainSelect.val();
 | |
|             var userId = selectedOption.split('/')[0];
 | |
|             var domainId = selectedOption.split('/')[1];
 | |
|             switchAccount(userId, domainId);
 | |
|         });
 | |
| 
 | |
|         $.ajax({
 | |
|             url: createURL('listAndSwitchSamlAccount'),
 | |
|             success: function(json) {
 | |
|                 var accounts = json.listandswitchsamlaccountresponse.samluseraccount;
 | |
|                 if (accounts.length < 2) {
 | |
|                     return;
 | |
|                 };
 | |
|                 $domainSelect.empty();
 | |
|                 for (var i = 0; i < accounts.length; i++) {
 | |
|                     var option = $('<option>');
 | |
|                     option.data("userId", accounts[i].userId);
 | |
|                     option.data("domainId", accounts[i].domainId);
 | |
|                     option.val(accounts[i].userId + '/' + accounts[i].domainId);
 | |
|                     option.html(accounts[i].accountName + "/" + accounts[i].domainName);
 | |
|                     option.appendTo($domainSelect);
 | |
|                 }
 | |
|                 var currentAccountDomain = g_userid + '/' + g_domainid;
 | |
|                 $domainSelect.find('option[value="' + currentAccountDomain + '"]').attr("selected", "selected");
 | |
|                 $domainSwitcher.insertAfter($header.find('.region-switcher'));
 | |
|             },
 | |
|             error: function(data) {
 | |
|                 // if call fails, the logged in user in not a SAML authenticated user
 | |
|             }
 | |
|         });
 | |
|     });
 | |
| }(jQuery, cloudStack));
 |