mirror of
https://github.com/portainer/portainer.git
synced 2025-07-20 13:59:40 +02:00
* feat(endpoint): migrate security settings to endpoint * feat(endpoint): check for specific endpoint settings * feat(endpoint): check security settings * feat(docker): add config page * feat(endpoint): save settings page * feat(endpoints): disable features when not agent * feat(sidebar): hide docker settings for regular user * fix(docker): small fixes in configs * fix(volumes): hide browse button for non admins * refactor(docker): introduce switch component * refactor(components/switch): seprate label from switch * feat(app/components): align switch label * refactor(app/components): move switch css * fix(docker/settings): add ngijnect * feat(endpoints): set default security values * style(portainer): sort types * fix(endpoint): rename security heading * fix(endpoints): update endpoints settings
94 lines
3.7 KiB
JavaScript
94 lines
3.7 KiB
JavaScript
export default class DockerFeaturesConfigurationController {
|
|
/* @ngInject */
|
|
constructor($async, EndpointService, Notifications, StateManager) {
|
|
this.$async = $async;
|
|
this.EndpointService = EndpointService;
|
|
this.Notifications = Notifications;
|
|
this.StateManager = StateManager;
|
|
|
|
this.formValues = {
|
|
enableHostManagementFeatures: false,
|
|
allowVolumeBrowserForRegularUsers: false,
|
|
disableBindMountsForRegularUsers: false,
|
|
disablePrivilegedModeForRegularUsers: false,
|
|
disableHostNamespaceForRegularUsers: false,
|
|
disableStackManagementForRegularUsers: false,
|
|
disableDeviceMappingForRegularUsers: false,
|
|
disableContainerCapabilitiesForRegularUsers: false,
|
|
};
|
|
|
|
this.isAgent = false;
|
|
|
|
this.state = {
|
|
actionInProgress: false,
|
|
};
|
|
|
|
this.save = this.save.bind(this);
|
|
}
|
|
|
|
isContainerEditDisabled() {
|
|
const {
|
|
disableBindMountsForRegularUsers,
|
|
disableHostNamespaceForRegularUsers,
|
|
disablePrivilegedModeForRegularUsers,
|
|
disableDeviceMappingForRegularUsers,
|
|
disableContainerCapabilitiesForRegularUsers,
|
|
} = this.formValues;
|
|
return (
|
|
disableBindMountsForRegularUsers ||
|
|
disableHostNamespaceForRegularUsers ||
|
|
disablePrivilegedModeForRegularUsers ||
|
|
disableDeviceMappingForRegularUsers ||
|
|
disableContainerCapabilitiesForRegularUsers
|
|
);
|
|
}
|
|
|
|
async save() {
|
|
return this.$async(async () => {
|
|
try {
|
|
this.state.actionInProgress = true;
|
|
const securitySettings = {
|
|
enableHostManagementFeatures: this.formValues.enableHostManagementFeatures,
|
|
allowBindMountsForRegularUsers: !this.formValues.disableBindMountsForRegularUsers,
|
|
allowPrivilegedModeForRegularUsers: !this.formValues.disablePrivilegedModeForRegularUsers,
|
|
allowVolumeBrowserForRegularUsers: this.formValues.allowVolumeBrowserForRegularUsers,
|
|
allowHostNamespaceForRegularUsers: !this.formValues.disableHostNamespaceForRegularUsers,
|
|
allowDeviceMappingForRegularUsers: !this.formValues.disableDeviceMappingForRegularUsers,
|
|
allowStackManagementForRegularUsers: !this.formValues.disableStackManagementForRegularUsers,
|
|
allowContainerCapabilitiesForRegularUsers: !this.formValues.disableContainerCapabilitiesForRegularUsers,
|
|
};
|
|
|
|
await this.EndpointService.updateSecuritySettings(this.endpoint.Id, securitySettings);
|
|
|
|
this.endpoint.SecuritySettings = securitySettings;
|
|
this.Notifications.success('Saved settings successfully');
|
|
} catch (e) {
|
|
this.Notifications.error('Failure', e, 'Failed saving settings');
|
|
}
|
|
this.state.actionInProgress = false;
|
|
});
|
|
}
|
|
|
|
checkAgent() {
|
|
const applicationState = this.StateManager.getState();
|
|
return applicationState.endpoint.mode.agentProxy;
|
|
}
|
|
|
|
$onInit() {
|
|
const securitySettings = this.endpoint.SecuritySettings;
|
|
|
|
const isAgent = this.checkAgent();
|
|
this.isAgent = isAgent;
|
|
|
|
this.formValues = {
|
|
enableHostManagementFeatures: isAgent && securitySettings.enableHostManagementFeatures,
|
|
allowVolumeBrowserForRegularUsers: isAgent && securitySettings.allowVolumeBrowserForRegularUsers,
|
|
disableBindMountsForRegularUsers: !securitySettings.allowBindMountsForRegularUsers,
|
|
disablePrivilegedModeForRegularUsers: !securitySettings.allowPrivilegedModeForRegularUsers,
|
|
disableHostNamespaceForRegularUsers: !securitySettings.allowHostNamespaceForRegularUsers,
|
|
disableDeviceMappingForRegularUsers: !securitySettings.allowDeviceMappingForRegularUsers,
|
|
disableStackManagementForRegularUsers: !securitySettings.allowStackManagementForRegularUsers,
|
|
disableContainerCapabilitiesForRegularUsers: !securitySettings.allowContainerCapabilitiesForRegularUsers,
|
|
};
|
|
}
|
|
}
|