diff --git a/api/http/handler/ssl/ssl_update.go b/api/http/handler/ssl/ssl_update.go
index 28dba27b3..bd006584a 100644
--- a/api/http/handler/ssl/ssl_update.go
+++ b/api/http/handler/ssl/ssl_update.go
@@ -10,6 +10,7 @@ import (
)
type sslUpdatePayload struct {
+ // SSL Certificates
Cert *string
Key *string
HTTPEnabled *bool
diff --git a/app/portainer/error.ts b/app/portainer/error.ts
index c289f7d5f..806eac0cb 100644
--- a/app/portainer/error.ts
+++ b/app/portainer/error.ts
@@ -1,9 +1,9 @@
export default class PortainerError extends Error {
- err?: Error;
+ err?: unknown;
isPortainerError = true;
- constructor(msg: string, err?: Error) {
+ constructor(msg: string, err?: unknown) {
super(msg);
this.err = err;
}
diff --git a/app/portainer/react/components/file-upload-field.ts b/app/portainer/react/components/file-upload-field.ts
index 74f03d94d..518263eb9 100644
--- a/app/portainer/react/components/file-upload-field.ts
+++ b/app/portainer/react/components/file-upload-field.ts
@@ -10,4 +10,5 @@ export const fileUploadField = r2a(FileUploadField, [
'accept',
'inputId',
'color',
+ 'name',
]);
diff --git a/app/portainer/react/components/settings.ts b/app/portainer/react/components/settings.ts
index 5082a3252..c40c5af85 100644
--- a/app/portainer/react/components/settings.ts
+++ b/app/portainer/react/components/settings.ts
@@ -8,6 +8,7 @@ import { withReactQuery } from '@/react-tools/withReactQuery';
import { withUIRouter } from '@/react-tools/withUIRouter';
import { ApplicationSettingsPanel } from '@/react/portainer/settings/SettingsView/ApplicationSettingsPanel';
import { KubeSettingsPanel } from '@/react/portainer/settings/SettingsView/KubeSettingsPanel';
+import { HelmCertPanel } from '@/react/portainer/settings/SettingsView/HelmCertPanel';
export const settingsModule = angular
.module('portainer.app.react.components.settings', [])
@@ -24,6 +25,7 @@ export const settingsModule = angular
'applicationSettingsPanel',
r2a(withReactQuery(ApplicationSettingsPanel), ['onSuccess'])
)
+ .component('helmCertPanel', r2a(withReactQuery(HelmCertPanel), []))
.component(
'kubeSettingsPanel',
r2a(withUIRouter(withReactQuery(KubeSettingsPanel)), [])
diff --git a/app/portainer/services/axios.ts b/app/portainer/services/axios.ts
index be2d9432c..c811747f1 100644
--- a/app/portainer/services/axios.ts
+++ b/app/portainer/services/axios.ts
@@ -57,14 +57,14 @@ axios.interceptors.request.use(agentInterceptor);
* @returns A PortainerError with the parsed error message and details.
*/
export function parseAxiosError(
- err: Error,
+ err: unknown,
msg = '',
parseError = defaultErrorParser
) {
let resultErr = err;
let resultMsg = msg;
- if ('isAxiosError' in err) {
+ if (isAxiosError(err)) {
const { error, details } = parseError(err as AxiosError);
resultErr = error;
if (msg && details) {
diff --git a/app/portainer/settings/general/index.js b/app/portainer/settings/general/index.js
index fa01c87b7..ab9158702 100644
--- a/app/portainer/settings/general/index.js
+++ b/app/portainer/settings/general/index.js
@@ -1,6 +1,5 @@
import angular from 'angular';
import { sslCertificate } from './ssl-certificate';
-import { sslCaFileSettings } from './ssl-ca-file-settings';
-export default angular.module('portainer.settings.general', []).component('sslCertificateSettings', sslCertificate).component('sslCaFileSettings', sslCaFileSettings).name;
+export default angular.module('portainer.settings.general', []).component('sslCertificateSettings', sslCertificate).name;
diff --git a/app/portainer/settings/general/ssl-ca-file-settings/index.js b/app/portainer/settings/general/ssl-ca-file-settings/index.js
deleted file mode 100644
index 0dab9a576..000000000
--- a/app/portainer/settings/general/ssl-ca-file-settings/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import controller from './ssl-ca-file-settings-controller.js';
-
-export const sslCaFileSettings = {
- templateUrl: './ssl-ca-file-settings.html',
- controller,
-};
diff --git a/app/portainer/settings/general/ssl-ca-file-settings/ssl-ca-file-settings-controller.js b/app/portainer/settings/general/ssl-ca-file-settings/ssl-ca-file-settings-controller.js
deleted file mode 100644
index acf14c53f..000000000
--- a/app/portainer/settings/general/ssl-ca-file-settings/ssl-ca-file-settings-controller.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { FeatureId } from '@/react/portainer/feature-flags/enums';
-class SslCaFileSettingsController {
- /* @ngInject */
- constructor() {
- this.limitedFeature = FeatureId.CA_FILE;
- }
-}
-
-export default SslCaFileSettingsController;
diff --git a/app/portainer/settings/general/ssl-ca-file-settings/ssl-ca-file-settings.html b/app/portainer/settings/general/ssl-ca-file-settings/ssl-ca-file-settings.html
deleted file mode 100644
index c63e63fd3..000000000
--- a/app/portainer/settings/general/ssl-ca-file-settings/ssl-ca-file-settings.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
diff --git a/app/portainer/user-activity/activity-logs-view/activity-logs-view.html b/app/portainer/user-activity/activity-logs-view/activity-logs-view.html
index 91025a3d8..92dcd192f 100644
--- a/app/portainer/user-activity/activity-logs-view/activity-logs-view.html
+++ b/app/portainer/user-activity/activity-logs-view/activity-logs-view.html
@@ -1,6 +1,6 @@
-
+
-
+
-
+
-
+
-
+
+
diff --git a/app/react/components/BEFeatureIndicator/BEFeatureIndicator.css b/app/react/components/BEFeatureIndicator/BEFeatureIndicator.css
index 33e4eb1da..5104e41a5 100644
--- a/app/react/components/BEFeatureIndicator/BEFeatureIndicator.css
+++ b/app/react/components/BEFeatureIndicator/BEFeatureIndicator.css
@@ -22,5 +22,4 @@
.be-indicator-container {
border: solid 1px var(--BE-only);
- margin: 15px;
}
diff --git a/app/react/components/BEFeatureIndicator/BEOverlay.tsx b/app/react/components/BEFeatureIndicator/BEOverlay.tsx
new file mode 100644
index 000000000..a1bd94c33
--- /dev/null
+++ b/app/react/components/BEFeatureIndicator/BEOverlay.tsx
@@ -0,0 +1,31 @@
+import { FeatureId } from '@/react/portainer/feature-flags/enums';
+import { isLimitedToBE } from '@/react/portainer/feature-flags/feature-flags.service';
+
+import { Tooltip } from '@@/Tip/Tooltip';
+
+import { BEFeatureIndicator } from '.';
+
+export function BEOverlay({
+ featureId,
+ children,
+}: {
+ featureId: FeatureId;
+ children: React.ReactNode;
+}) {
+ const isLimited = isLimitedToBE(featureId);
+ if (!isLimited) {
+ return <>{children}>;
+ }
+
+ return (
+
+ );
+}
diff --git a/app/react/components/form-components/FileUpload/FileUploadField.tsx b/app/react/components/form-components/FileUpload/FileUploadField.tsx
index 06bdcacba..33d583dac 100644
--- a/app/react/components/form-components/FileUpload/FileUploadField.tsx
+++ b/app/react/components/form-components/FileUpload/FileUploadField.tsx
@@ -14,6 +14,7 @@ export interface Props {
required?: boolean;
inputId: string;
color?: ComponentProps
['color'];
+ name?: string;
}
export function FileUploadField({
@@ -24,6 +25,7 @@ export function FileUploadField({
required = false,
inputId,
color = 'primary',
+ name,
}: Props) {
const fileRef = createRef();
@@ -38,6 +40,7 @@ export function FileUploadField({
className={styles.fileInput}
onChange={changeHandler}
aria-label="file-input"
+ name={name}
/>