MCPcopy Index your code
hub / github.com/PatchMon/PatchMon / UpdateSettings

Method UpdateSettings

server-source-code/internal/handler/ai.go:111–162  ·  view source on GitHub ↗

UpdateSettings updates AI settings (admin only).

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

109
110// UpdateSettings updates AI settings (admin only).
111func (h *AIHandler) UpdateSettings(w http.ResponseWriter, r *http.Request) {
112 s, err := h.settings.GetFirst(r.Context())
113 if err != nil {
114 Error(w, http.StatusInternalServerError, "Failed to load settings")
115 return
116 }
117
118 var req UpdateSettingsRequest
119 if err := decodeJSON(r, &req); err != nil {
120 Error(w, http.StatusBadRequest, "Invalid request body")
121 return
122 }
123
124 if req.AiEnabled != nil {
125 s.AiEnabled = *req.AiEnabled
126 }
127 if req.AiProvider != nil && allowedProviders[*req.AiProvider] {
128 s.AiProvider = *req.AiProvider
129 }
130 if req.AiModel != nil {
131 s.AiModel = req.AiModel
132 if *req.AiModel == "" {
133 s.AiModel = nil
134 }
135 }
136 if req.AiAPIKey != nil && *req.AiAPIKey != "" {
137 if util.IsEncrypted(*req.AiAPIKey) {
138 s.AiAPIKey = req.AiAPIKey
139 } else {
140 encrypted, err := h.enc.Encrypt(*req.AiAPIKey)
141 if err != nil {
142 Error(w, http.StatusInternalServerError, "Failed to encrypt API key")
143 return
144 }
145 s.AiAPIKey = &encrypted
146 }
147 }
148
149 if err := h.settings.Update(r.Context(), s); err != nil {
150 Error(w, http.StatusInternalServerError, "Failed to update settings")
151 return
152 }
153
154 apiKeySet := s.AiAPIKey != nil && *s.AiAPIKey != ""
155 JSON(w, http.StatusOK, map[string]interface{}{
156 "message": "AI settings updated successfully",
157 "ai_enabled": s.AiEnabled,
158 "ai_provider": s.AiProvider,
159 "ai_model": s.AiModel,
160 "ai_api_key_set": apiKeySet,
161 })
162}
163
164// GetDebug returns encryption debug info (admin only).
165func (h *AIHandler) GetDebug(w http.ResponseWriter, r *http.Request) {

Callers

nothing calls this directly

Calls 6

ErrorFunction · 0.85
decodeJSONFunction · 0.85
GetFirstMethod · 0.80
EncryptMethod · 0.80
JSONFunction · 0.70
UpdateMethod · 0.45

Tested by

no test coverage detected