mirror of
https://github.com/strongdm/comply
synced 2024-11-16 21:04:54 +00:00
66 lines
1.1 KiB
Go
66 lines
1.1 KiB
Go
|
package model
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type TicketState string
|
||
|
|
||
|
const (
|
||
|
Open = TicketState("open")
|
||
|
Closed = TicketState("closed")
|
||
|
)
|
||
|
|
||
|
type Ticket struct {
|
||
|
ID string
|
||
|
Name string
|
||
|
State TicketState
|
||
|
Body string
|
||
|
Attributes map[string]interface{}
|
||
|
ClosedAt *time.Time
|
||
|
CreatedAt *time.Time
|
||
|
UpdatedAt *time.Time
|
||
|
}
|
||
|
|
||
|
func (t *Ticket) ProcedureID() string {
|
||
|
md := t.metadata()
|
||
|
if v, ok := md["Procedure-ID"]; ok {
|
||
|
return v
|
||
|
}
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
func (t *Ticket) metadata() map[string]string {
|
||
|
md := make(map[string]string)
|
||
|
lines := strings.Split(t.Body, "\n")
|
||
|
for _, line := range lines {
|
||
|
// TODO: transition to RFC822 parsing
|
||
|
if strings.Contains(line, ":") {
|
||
|
tokens := strings.Split(line, ":")
|
||
|
if len(tokens) != 2 {
|
||
|
continue
|
||
|
}
|
||
|
md[strings.TrimSpace(tokens[0])] = strings.TrimSpace(tokens[1])
|
||
|
}
|
||
|
}
|
||
|
return md
|
||
|
}
|
||
|
|
||
|
func (t *Ticket) SetBool(name string) {
|
||
|
t.Attributes[name] = true
|
||
|
}
|
||
|
func (t *Ticket) Bool(name string) bool {
|
||
|
bi, ok := t.Attributes[name]
|
||
|
if !ok {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
b, ok := bi.(bool)
|
||
|
if !ok {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
return b
|
||
|
}
|