Moves all the external login services into a set of classes that share as much code as possible. These services are then registered on both the client and server, allowing us in the followup change to dynamically register new handlers
42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
/**
|
|
* An element which displays a button for logging into the application via an external service.
|
|
*/
|
|
angular.module('quay').directive('externalLoginButton', function () {
|
|
var directiveDefinitionObject = {
|
|
priority: 0,
|
|
templateUrl: '/static/directives/external-login-button.html',
|
|
replace: false,
|
|
transclude: true,
|
|
restrict: 'C',
|
|
scope: {
|
|
'signInStarted': '&signInStarted',
|
|
'redirectUrl': '=redirectUrl',
|
|
'isLink': '=isLink',
|
|
'provider': '=provider',
|
|
'action': '@action'
|
|
},
|
|
controller: function($scope, $timeout, $interval, ApiService, KeyService, CookieService, ExternalLoginService) {
|
|
$scope.signingIn = false;
|
|
|
|
$scope.startSignin = function() {
|
|
$scope.signInStarted({'service': $scope.provider});
|
|
ApiService.generateExternalLoginToken().then(function(data) {
|
|
var url = ExternalLoginService.getLoginUrl($scope.provider, $scope.action || 'login');
|
|
url = url + '&state=' + encodeURIComponent(data['token']);
|
|
|
|
// Save the redirect URL in a cookie so that we can redirect back after the service returns to us.
|
|
var redirectURL = $scope.redirectUrl || window.location.toString();
|
|
CookieService.putPermanent('quay.redirectAfterLoad', redirectURL);
|
|
|
|
// Needed to ensure that UI work done by the started callback is finished before the location
|
|
// changes.
|
|
$scope.signingIn = true;
|
|
$timeout(function() {
|
|
document.location = url;
|
|
}, 250);
|
|
}, ApiService.errorDisplay('Could not perform sign in'));
|
|
};
|
|
}
|
|
};
|
|
return directiveDefinitionObject;
|
|
});
|