safing-portmaster/sync/module.go
2023-10-25 13:54:06 +02:00

114 lines
2.5 KiB
Go

package sync
import (
"errors"
"net/http"
"github.com/safing/portbase/api"
"github.com/safing/portbase/database"
"github.com/safing/portbase/modules"
)
var (
module *modules.Module
db = database.NewInterface(&database.Options{
Local: true,
Internal: true,
})
)
func init() {
module = modules.Register("sync", prep, nil, nil, "profiles")
}
func prep() error {
if err := registerSettingsAPI(); err != nil {
return err
}
if err := registerSingleSettingAPI(); err != nil {
return err
}
return nil
}
// Type is the type of an export.
type Type string
// Export Types.
const (
TypeProfile = "profile"
TypeSettings = "settings"
TypeSingleSetting = "single-setting"
)
// Export IDs.
const (
ExportTargetGlobal = "global"
)
// Messages.
var (
MsgNone = ""
MsgValid = "Import is valid."
MsgSuccess = "Import successful."
MsgRequireRestart = "Import successful. Restart required for setting to take effect."
)
// ExportRequest is a request for an export.
type ExportRequest struct {
From string `json:"from"`
Key string `json:"key"`
}
// ImportRequest is a request to import an export.
type ImportRequest struct {
// Where the export should be import to.
Target string `json:"target"`
// Only validate, but do not actually change anything.
ValidateOnly bool `json:"validate_only"`
RawExport string `json:"raw_export"`
}
// ImportResult is returned by successful import operations.
type ImportResult struct {
RestartRequired bool `json:"restart_required"`
ReplacesExisting bool `json:"replaces_existing"`
}
// Errors.
var (
ErrMismatch = api.ErrorWithStatus(
errors.New("the supplied export cannot be imported here"),
http.StatusPreconditionFailed,
)
ErrTargetNotFound = api.ErrorWithStatus(
errors.New("import/export target does not exist"),
http.StatusGone,
)
ErrUnchanged = api.ErrorWithStatus(
errors.New("cannot export unchanged setting"),
http.StatusGone,
)
ErrInvalidImport = api.ErrorWithStatus(
errors.New("invalid import"),
http.StatusUnprocessableEntity,
)
ErrInvalidSetting = api.ErrorWithStatus(
errors.New("invalid setting"),
http.StatusUnprocessableEntity,
)
ErrInvalidProfile = api.ErrorWithStatus(
errors.New("invalid profile"),
http.StatusUnprocessableEntity,
)
ErrImportFailed = api.ErrorWithStatus(
errors.New("import failed"),
http.StatusInternalServerError,
)
ErrExportFailed = api.ErrorWithStatus(
errors.New("export failed"),
http.StatusInternalServerError,
)
)