GUACAMOLE-197: Working RADIUS Authentication, including dealing with Challenge/Response (e.g. 2/Multi-Factor)

This commit is contained in:
Nick Couchman
2017-02-07 15:37:49 -05:00
committed by Nick Couchman
parent dbb62ded77
commit 3e994021da
10 changed files with 238 additions and 99 deletions

View File

@@ -27,8 +27,13 @@ angular.module('guacRadius').config(['formServiceProvider',
// Define field for the challenge from the RADIUS service
formServiceProvider.registerFieldType('GUAC_RADIUS_CHALLENGE_RESPONSE', {
module : 'guacRadius',
controller : 'guacRadiusController',
templateUrl : 'app/ext/radius/templates/radiusChallengeResponseField.html'
controller : 'radiusResponseController',
templateUrl : 'app/ext/radius/templates/radiusResponseField.html'
});
formServiceProvider.registerFieldType('GUAC_RADIUS_STATE', {
module : 'guacRadius',
controller : 'radiusStateController',
template : '<input type=hidden ng-model="model" />'
});
}]);

View File

@@ -22,22 +22,15 @@
* API to prompt the user for additional credentials, ultimately receiving a
* signed response from the Duo service.
*/
angular.module('guacRadius').controller('guacRadiusController', ['$scope', '$element',
function guacRadiusController($scope, $element) {
console.log("In guacRadiusController() method.");
angular.module('guacRadius').controller('radiusResponseController', ['$scope', '$element',
function radiusResponseController($scope, $element) {
console.log("In radiusResponseController() method.");
// Find the area to display the challenge message
var radiusChallenge = $element.find(document.querySelector('#radius-challenge-text'));
// Find the hidden input to put the state in
var radiusState = $element.find(document.querySelector('#radius-state'));
// Populate the reply message field
console.log("RADIUS Reply Message: " + $scope.field.replyMsg);
radiusChellenge.html($scope.field.replyMsg);
// Populate the input area for the connection state
console.log("RADIUS State: " + scope.field.radiusState);
radiusState.value = $scope.field.radiusState;
radiusChallenge.html($scope.field.replyMsg);
}]);

View File

@@ -0,0 +1,33 @@
/*
* 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.
*/
/**
* Controller for the "GUAC_RADIUS_CHALLENGE_RESPONSE" field which uses the DuoWeb
* API to prompt the user for additional credentials, ultimately receiving a
* signed response from the Duo service.
*/
angular.module('guacRadius').controller('radiusStateController', ['$scope', '$element',
function radiusStateController($scope, $element) {
console.log("In radiusStateController() method.");
// Populate the input area for the connection state
console.log("RADIUS State: " + $scope.field.radiusState);
$scope.model = $scope.field.radiusState;
}]);

View File

@@ -1,9 +0,0 @@
<div class="radius-challenge-response-field-container">
<div id="radius-challenge-text" />
<div class="password-field">
<input type="{{passwordInputType}}" ng-model="model" ng-trim="false" autocorrect="off" autocapitalize="off"/>
<div class="icon toggle-password" ng-click="togglePassword()" title="{{getTogglePasswordHelpText() | translate}}"></div>
</div>
<input type="hidden" id="radius-challenge-state" />
<input type="submit" />
</div>

View File

@@ -0,0 +1,5 @@
<div id="radius-challenge-text" />
<div class="password-field">
<input type="{{passwordInputType}}" ng-model="model" ng-trim="false" autocorrect="off" autocapitalize="off"/>
<div class="icon toggle-password" ng-click="togglePassword()" title="{{getTogglePasswordHelpText() | translate}}"></div>
</div>