mirror of
https://github.com/kopia/kopia.git
synced 2026-02-05 20:24:54 -05:00
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package server
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/natefinch/atomic"
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/kopia/kopia/internal/serverapi"
|
|
)
|
|
|
|
func (s *Server) getUIPreferencesOrEmpty() (serverapi.UIPreferences, error) {
|
|
p := serverapi.UIPreferences{}
|
|
|
|
if s.options.UIPreferencesFile == "" {
|
|
return p, nil
|
|
}
|
|
|
|
f, err := os.Open(s.options.UIPreferencesFile)
|
|
if os.IsNotExist(err) {
|
|
return p, nil
|
|
}
|
|
|
|
if err != nil {
|
|
return p, errors.Wrap(err, "unable to open UI preferences file")
|
|
}
|
|
|
|
defer f.Close() //nolint:errcheck,gosec
|
|
|
|
if err := json.NewDecoder(f).Decode(&p); err != nil {
|
|
return p, errors.Wrap(err, "invalid UI preferences file")
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
func (s *Server) handleGetUIPreferences(ctx context.Context, r *http.Request, body []byte) (interface{}, *apiError) {
|
|
p, err := s.getUIPreferencesOrEmpty()
|
|
if err != nil {
|
|
return nil, internalServerError(err)
|
|
}
|
|
|
|
return &p, nil
|
|
}
|
|
|
|
func (s *Server) handleSetUIPreferences(ctx context.Context, r *http.Request, body []byte) (interface{}, *apiError) {
|
|
var p serverapi.UIPreferences
|
|
|
|
// verify the JSON is valid by unmarshaling it
|
|
if err := json.Unmarshal(body, &p); err != nil {
|
|
return nil, requestError(serverapi.ErrorMalformedRequest, "malformed request")
|
|
}
|
|
|
|
if err := atomic.WriteFile(s.options.UIPreferencesFile, bytes.NewReader(body)); err != nil {
|
|
return nil, internalServerError(err)
|
|
}
|
|
|
|
return serverapi.Empty{}, nil
|
|
}
|