Skip to content

Commit

Permalink
Merge pull request #24 from TAMULib/sprint3-staging-optional-token-auth
Browse files Browse the repository at this point in the history
remote project manager afford token auth
  • Loading branch information
wwelling committed Aug 14, 2018
2 parents 4afeb3b + 9596f16 commit 02c26d6
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 39 deletions.
22 changes: 4 additions & 18 deletions app/controllers/projectController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
app.controller('ProjectController', function ($controller, $scope, ProjectRepo, RemoteProjectManagerRepo, RemoteProjectsService) {
app.controller('ProjectController', function ($controller, $scope, ApiResponseActions, ProjectRepo, RemoteProjectManagerRepo, RemoteProjectsService) {

angular.extend(this, $controller('AbstractController', {
$scope: $scope
Expand Down Expand Up @@ -79,28 +79,14 @@ app.controller('ProjectController', function ($controller, $scope, ProjectRepo,
if ($scope.isManager() || $scope.isAdmin()) {
$scope.remoteProjectManagers = RemoteProjectManagerRepo.getAll();

$scope.remoteProjects = {};
$scope.remoteProjects = RemoteProjectsService.getRemoteProjects();

$scope.getRemoteProjectManagerRemoteProjects = function (remoteProjectManagerId) {
return $scope.remoteProjects[remoteProjectManagerId];
};

$scope.getRemoteProjectManagerRemoteProjects = function (remoteProjectManagerId) {
return $scope.remoteProjects[remoteProjectManagerId];
};

var getRemoteProjectManagerById = function (id) {
RemoteProjectsService.getAll(id).then(function (remoteProjects) {
$scope.remoteProjects[id] = remoteProjects;
});
};

RemoteProjectManagerRepo.ready().then(function () {
for (var i in $scope.remoteProjectManagers) {
if (i !== 'visibleColumnCount') {
getRemoteProjectManagerById($scope.remoteProjectManagers[i].id);
}
}
RemoteProjectManagerRepo.listen([ApiResponseActions.CREATE, ApiResponseActions.DELETE, ApiResponseActions.UPDATE], function () {
$scope.remoteProjectManagers = RemoteProjectManagerRepo.getAll();
});
}

Expand Down
9 changes: 6 additions & 3 deletions app/controllers/remoteProjectManagerController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
app.controller('RemoteProjectManagerController', function ($controller, $scope, RemoteProjectManagerRepo) {
app.controller('RemoteProjectManagerController', function ($controller, $scope, ApiResponseActions, RemoteProjectManagerRepo) {

angular.extend(this, $controller('AbstractController', {
$scope: $scope
Expand All @@ -13,6 +13,7 @@ app.controller('RemoteProjectManagerController', function ($controller, $scope,

RemoteProjectManagerRepo.getTypes().then(function (types) {
$scope.serviceTypes = types;
$scope.resetRemoteProjectManagerForms();
});

$scope.remoteProjectManagerForms = {
Expand All @@ -30,8 +31,6 @@ app.controller('RemoteProjectManagerController', function ($controller, $scope,
$scope.closeModal();
};

$scope.resetRemoteProjectManagerForms();

$scope.createRemoteProjectManager = function () {
RemoteProjectManagerRepo.create($scope.remoteProjectManagerToCreate).then(function (res) {
if (angular.fromJson(res.body).meta.status === 'SUCCESS') {
Expand Down Expand Up @@ -89,4 +88,8 @@ app.controller('RemoteProjectManagerController', function ($controller, $scope,
return [];
};

RemoteProjectManagerRepo.listen([ApiResponseActions.CREATE, ApiResponseActions.DELETE, ApiResponseActions.UPDATE], function () {
$scope.remoteProjectManagers = RemoteProjectManagerRepo.getAll();
});

});
48 changes: 47 additions & 1 deletion app/directives/remoteProjectManagerFormDirective.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,52 @@ app.directive('remoteProjectManagerForm', function () {
'managementSettings': '=',
'model': '='
},
link: function ($scope) {}
link: function ($scope) {

var isAuthRequired = function () {
for (var i in $scope.managementSettings) {
var key = $scope.managementSettings[i].key;
if (key === 'password' || key === 'token') {
return true;
}
}
};

var hasToken = function () {
for (var key in $scope.model.settings) {
var value = $scope.model.settings[key];
if (key === 'token' && value !== undefined && value.length > 0) {
return true;
}
}
};

$scope.auth = {
useToken: hasToken(),
required: isAuthRequired()
};

$scope.inputSetting = function (setting) {
var display = true;
if ($scope.auth.useToken) {
if (setting.key === 'username' || setting.key === 'password') {
display = false;
}
} else {
if (setting.key === 'token') {
display = false;
}
}
return display;
};

$scope.clearAuthSettings = function () {
for (var key in $scope.model.settings) {
if (key === 'token' || key === 'username' || key === 'password') {
$scope.model.settings[key] = '';
}
}
};
}
};
});
8 changes: 0 additions & 8 deletions app/services/remoteProjectsService.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,6 @@ app.service('RemoteProjectsService', function ($q, ProjectRepo, WsApi) {
return remoteProjects;
};

this.getAll = function (remoteProjectManagerId) {
return $q(function (resolve, reject) {
this.ready.then(function () {
resolve(remoteProjects[remoteProjectManagerId]);
});
}.bind(this));
};

this.getByScopeId = function (remoteProjectManagerId, scopeId) {
return $q(function (resolve, reject) {
this.ready.then(function () {
Expand Down
14 changes: 11 additions & 3 deletions app/views/directives/remoteProjectManagerForm.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
<div ng-repeat="setting in managementSettings" class=form-group>
<div ng-repeat="setting in managementSettings" class="form-group" ng-show="inputSetting(setting)">
<label for="{{setting.key}}-input">{{setting.gloss}}</label>
<input class="form-control" id="{{setting.key}}" type="{{setting.key === 'password' ? 'password' : 'text'}}" ng-model="model.settings[setting.key]"
placeholder="{{setting.gloss}} for Remote Project Manager" />
<input class="form-control" id="{{setting.key}}" type="{{setting.type}}" ng-model="model.settings[setting.key]" placeholder="{{setting.gloss}} for Remote Project Manager" />
</div>
<div class="form-group" ng-if="auth.required">
<label for="toggle-auth">Auth</label>
<div class="checkbox">
<label>
&nbsp;
<input id="toggle-auth" name="toggle-auth" type="checkbox" ng-model="auth.useToken" ng-changed="clearAuthSettings()" />Use token auth
</label>
</div>
</div>
4 changes: 2 additions & 2 deletions app/views/management/remoteProjectManager.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
<th>Settings</th>
<th class="actions-column text-center">Actions</th>
</tr>
<tr ng-repeat="remoteProjectManager in remoteProjectManagers | orderBy: 'name'">
<tr ng-repeat="remoteProjectManager in remoteProjectManagers">
<td title="'Remote Project Manager'">{{remoteProjectManager.name}}</td>
<td title="'Settings'">
<ul class="list-unstyled">
<li ng-repeat="setting in typeSettings(remoteProjectManager.type) | filter:{visible:true}">
<label>{{setting.gloss}}:</label>
<span>&nbsp{{remoteProjectManager.settings[setting.key]}}</span>
<span>&nbsp;{{remoteProjectManager.settings[setting.key]}}</span>
</li>
</ul>
</td>
Expand Down
4 changes: 2 additions & 2 deletions app/views/modals/addProjectModal.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ <h4 class="modal-title">Create Project</h4>

<div class="form-group" ng-if="projectToCreate.remoteProjectManager">
<label for="remoteProjectManager">Associate Version Project</label>
<select class="form-control" ng-options="vp.scopeId as vp.name for vp in getRemoteProjectManagerRemoteProjects(projectToCreate.remoteProjectManager.id) | orderBy:'name'" ng-model="projectToCreate.scopeId"
name="remoteProjectManager">
<select class="form-control" ng-options="remoteProjectManager.id as remoteProjectManager.name for remoteProjectManager in getRemoteProjectManagerRemoteProjects(projectToCreate.remoteProjectManager.id) | orderBy:'name'"
ng-model="projectToCreate.scopeId" name="remoteProjectManager">
<option value="" selected>None</option>
</select>
</div>
Expand Down
4 changes: 2 additions & 2 deletions app/views/modals/editProjectModal.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ <h4 class="modal-title">Edit Project</h4>

<div class="form-group" ng-if="projectToEdit.remoteProjectManager">
<label for="remoteProjectManager">Associate Version Project</label>
<select class="form-control" ng-options="vp.scopeId as vp.name for vp in getRemoteProjectManagerRemoteProjects(projectToEdit.remoteProjectManager.id) | orderBy:'name'" ng-model="projectToEdit.scopeId"
name="remoteProjectManager">
<select class="form-control" ng-options="remoteProjectManager.id as remoteProjectManager.name for remoteProjectManager in getRemoteProjectManagerRemoteProjects(projectToEdit.remoteProjectManager.id) | orderBy:'name'"
ng-model="projectToEdit.scopeId" name="remoteProjectManager">
<option value="" selected>None</option>
</select>
</div>
Expand Down
35 changes: 35 additions & 0 deletions tests/unit/controllers/remoteProjectManagerControllerTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ describe('controller: RemoteProjectManagerController', function () {
expect(scope.deleteRemoteProjectManager).toBeDefined();
expect(typeof scope.deleteRemoteProjectManager).toEqual('function');
});
it('typeSettings should be defined', function () {
expect(scope.typeSettings).toBeDefined();
expect(typeof scope.typeSettings).toEqual('function');
});
});

describe('Do the scope methods work as expected', function () {
Expand Down Expand Up @@ -205,6 +209,37 @@ describe('controller: RemoteProjectManagerController', function () {
expect(scope.cancelDeleteRemoteProjectManager).toHaveBeenCalled();
});

it('typeSettings should return appropriate scaffold', function () {
var scaffold = [{
"type": "text",
"key": "url",
"gloss": "URL",
"visible": true
}, {
"type": "text",
"key": "username",
"gloss": "Username",
"visible": false
}, {
"type": "password",
"key": "password",
"gloss": "Password",
"visible": false
}, {
"type": "password",
"key": "token",
"gloss": "Token",
"visible": false
}];
scope.serviceTypes = [{
"gloss": "Version One",
"scaffold": scaffold,
"value": "VERSION_ONE"
}];
var typeSettings = scope.typeSettings('VERSION_ONE');
expect(typeSettings).toEqual(scaffold);
});

});

});

0 comments on commit 02c26d6

Please sign in to comment.