relay/internal/models/log_entry_block.go
2022-08-09 21:55:50 -07:00

130 lines
3.1 KiB
Go

package models
import (
"encoding/json"
"fmt"
"strings"
)
const LogEntryTypeBlockCreate LogEntryType = "BLOCK_CREATE"
var LogEntryTypeBlockCreateString = []string{
"Domain %s was blocked.", // 0
"Domain %s and it's subdomains were blocked.", // 1
}
type LogEntryBlockCreate struct {
Account string `json:"account"`
Domain string `json:"domain"`
BlockSubdomains bool `json:"subdomains"`
}
func (t *LogEntryBlockCreate) String() string {
if t.BlockSubdomains {
return fmt.Sprintf(LogEntryTypeBlockCreateString[1], t.Domain)
}
return fmt.Sprintf(LogEntryTypeBlockCreateString[0], t.Domain)
}
func (t *LogEntryBlockCreate) ToJSON() (metadata string, err error) {
jsonString, err := json.Marshal(t)
if err != nil {
return "", err
}
return string(jsonString), nil
}
func (t *LogEntryBlockCreate) FromJSON(metadata string) error {
return json.Unmarshal([]byte(metadata), t)
}
const LogEntryTypeBlockDelete LogEntryType = "BLOCK_DELETE"
var LogEntryTypeBlockDeleteString = []string{
"Domain %s was unblocked.", // 0
"Domain %s and it's subdomains were unblocked.", // 1
}
type LogEntryBlockDelete struct {
Account string `json:"account"`
Domain string `json:"domain"`
BlockSubdomains bool `json:"subdomains"`
}
func (t *LogEntryBlockDelete) String() string {
if t.BlockSubdomains {
return fmt.Sprintf(LogEntryTypeBlockDeleteString[1], t.Domain)
}
return fmt.Sprintf(LogEntryTypeBlockDeleteString[0], t.Domain)
}
func (t *LogEntryBlockDelete) ToJSON() (metadata string, err error) {
jsonString, err := json.Marshal(t)
if err != nil {
return "", err
}
return string(jsonString), nil
}
func (t *LogEntryBlockDelete) FromJSON(metadata string) error {
return json.Unmarshal([]byte(metadata), t)
}
const LogEntryTypeBlockUpdate LogEntryType = "BLOCK_UPDATE"
var LogEntryTypeBlockUpdateString = []string{
"Domain %s block was updated, %s.", // 0
"the field %s was changed from '%s' to '%s'", // 1
}
type LogEntryBlockUpdate struct {
Account string `json:"account"`
Domain string `json:"domain"`
Change []LogEntryBlockUpdateChange `json:"changes"`
}
type LogEntryBlockUpdateChange struct {
Field string `json:"field"`
Old string `json:"old"`
New string `json:"new"`
}
func (t *LogEntryBlockUpdate) String() string {
var fieldSB strings.Builder
lastChange := len(t.Change) - 1
for i, change := range t.Change {
if i > 0 && i < lastChange {
fieldSB.WriteString(", ")
}
if i != 0 && i == lastChange {
fieldSB.WriteString(" and ")
}
fieldSB.WriteString(fmt.Sprintf(
LogEntryTypeBlockUpdateString[1],
change.Field,
change.Old,
change.New,
))
}
return fmt.Sprintf(LogEntryTypeBlockUpdateString[0], t.Domain, fieldSB.String())
}
func (t *LogEntryBlockUpdate) ToJSON() (metadata string, err error) {
jsonString, err := json.Marshal(t)
if err != nil {
return "", err
}
return string(jsonString), nil
}
func (t *LogEntryBlockUpdate) FromJSON(metadata string) error {
return json.Unmarshal([]byte(metadata), t)
}