Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions api/v1alpha1/scalityui_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,16 @@ type UIConfig struct {
// +kubebuilder:default=false
CanChangeTheme *bool `json:"canChangeTheme,omitempty"`

// CanUseGuardian controls whether the embedded Guardian AI assistant is
// available in the UI. It only takes effect when GuardianOrigin is also set.
// +kubebuilder:default=false
CanUseGuardian *bool `json:"canUseGuardian,omitempty"`

// GuardianOrigin is the origin (scheme + host + port, no path or query) of
// the embedded Guardian AI assistant. It is used as the iframe src and as
// the postMessage target origin.
GuardianOrigin string `json:"guardianOrigin,omitempty"`

// Favicon specifies the favicon for the UI
// +kubebuilder:default="/favicon.ico"
Favicon string `json:"favicon,omitempty"`
Expand Down
5 changes: 5 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions config/crd/bases/ui.scality.com_scalityuis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1396,10 +1396,22 @@ spec:
description: CanChangeTheme controls whether users can change
the UI theme
type: boolean
canUseGuardian:
default: false
description: |-
CanUseGuardian controls whether the embedded Guardian AI assistant is
available in the UI. It only takes effect when GuardianOrigin is also set.
type: boolean
favicon:
default: /favicon.ico
description: Favicon specifies the favicon for the UI
type: string
guardianOrigin:
description: |-
GuardianOrigin is the origin (scheme + host + port, no path or query) of
the embedded Guardian AI assistant. It is used as the iframe src and as
the postMessage target origin.
type: string
type: object
required:
- image
Expand Down
7 changes: 7 additions & 0 deletions internal/controller/scalityui/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,18 @@ func createConfigJSON(scalityui *uiscalitycomv1alpha1.ScalityUI) ([]byte, error)
configOutput["canChangeInstanceName"] = scalityui.Spec.UIConfig.CanChangeInstanceName
configOutput["canChangeLanguage"] = scalityui.Spec.UIConfig.CanChangeLanguage
configOutput["canChangeTheme"] = scalityui.Spec.UIConfig.CanChangeTheme
configOutput["canUseGuardian"] = scalityui.Spec.UIConfig.CanUseGuardian != nil && *scalityui.Spec.UIConfig.CanUseGuardian
configOutput["favicon"] = scalityui.Spec.UIConfig.Favicon
// Only emit guardianOrigin when set; shell-ui falls back to its own
// default origin otherwise.
if scalityui.Spec.UIConfig.GuardianOrigin != "" {
configOutput["guardianOrigin"] = scalityui.Spec.UIConfig.GuardianOrigin
}
} else {
configOutput["canChangeInstanceName"] = false
configOutput["canChangeLanguage"] = false
configOutput["canChangeTheme"] = false
configOutput["canUseGuardian"] = false
configOutput["favicon"] = "/favicon.ico"
}

Expand Down
6 changes: 6 additions & 0 deletions internal/controller/scalityui/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,8 @@ var _ = Describe("ScalityUI Shell Features", func() {
Expect(config["canChangeTheme"]).To(Equal(false))
Expect(config["canChangeInstanceName"]).To(Equal(false))
Expect(config["canChangeLanguage"]).To(Equal(false))
Expect(config["canUseGuardian"]).To(Equal(false))
Expect(config).NotTo(HaveKey("guardianOrigin"))
Expect(config["favicon"]).To(Equal("/favicon.ico"))

Expect(lightTheme["type"]).To(Equal("core-ui"))
Expand Down Expand Up @@ -1008,6 +1010,8 @@ var _ = Describe("ScalityUI Shell Features", func() {
CanChangeTheme: &[]bool{true}[0],
CanChangeInstanceName: &[]bool{true}[0],
CanChangeLanguage: &[]bool{true}[0],
CanUseGuardian: &[]bool{true}[0],
GuardianOrigin: "https://guardian.example.com",
Favicon: "/custom/favicon.ico",
}

Expand All @@ -1033,6 +1037,8 @@ var _ = Describe("ScalityUI Shell Features", func() {
Expect(config["canChangeTheme"]).To(Equal(true))
Expect(config["canChangeInstanceName"]).To(Equal(true))
Expect(config["canChangeLanguage"]).To(Equal(true))
Expect(config["canUseGuardian"]).To(Equal(true))
Expect(config["guardianOrigin"]).To(Equal("https://guardian.example.com"))
Expect(config["favicon"]).To(Equal("/custom/favicon.ico"))

By("Verifying custom navigation structure")
Expand Down
Loading