|
|
|
@ -53,85 +53,6 @@ type ResourceOriginInfo struct { |
|
|
|
|
_ any `json:"-"` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type BlobInfo struct { |
|
|
|
|
UID string `json:"uid"` |
|
|
|
|
Size int64 `json:"size,omitempty"` |
|
|
|
|
Hash string `json:"hash,omitempty"` |
|
|
|
|
MimeType string `json:"mime,omitempty"` |
|
|
|
|
Charset string `json:"charset,omitempty"` // content type = mime+charset
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Content type is mime + charset
|
|
|
|
|
func (b *BlobInfo) SetContentType(v string) { |
|
|
|
|
var params map[string]string |
|
|
|
|
var err error |
|
|
|
|
|
|
|
|
|
b.Charset = "" |
|
|
|
|
b.MimeType, params, err = mime.ParseMediaType(v) |
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
b.Charset = params["charset"] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Content type is mime + charset
|
|
|
|
|
func (b *BlobInfo) ContentType() string { |
|
|
|
|
sb := bytes.NewBufferString(b.MimeType) |
|
|
|
|
if b.Charset != "" { |
|
|
|
|
sb.WriteString("; charset=") |
|
|
|
|
sb.WriteString(b.Charset) |
|
|
|
|
} |
|
|
|
|
return sb.String() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (b *BlobInfo) String() string { |
|
|
|
|
sb := bytes.NewBufferString(b.UID) |
|
|
|
|
if b.Size > 0 { |
|
|
|
|
sb.WriteString(fmt.Sprintf("; size=%d", b.Size)) |
|
|
|
|
} |
|
|
|
|
if b.Hash != "" { |
|
|
|
|
sb.WriteString("; hash=") |
|
|
|
|
sb.WriteString(b.Hash) |
|
|
|
|
} |
|
|
|
|
if b.MimeType != "" { |
|
|
|
|
sb.WriteString("; mime=") |
|
|
|
|
sb.WriteString(b.MimeType) |
|
|
|
|
} |
|
|
|
|
if b.Charset != "" { |
|
|
|
|
sb.WriteString("; charset=") |
|
|
|
|
sb.WriteString(b.Charset) |
|
|
|
|
} |
|
|
|
|
return sb.String() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func ParseBlobInfo(v string) *BlobInfo { |
|
|
|
|
if v == "" { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
info := &BlobInfo{} |
|
|
|
|
for i, part := range strings.Split(v, ";") { |
|
|
|
|
if i == 0 { |
|
|
|
|
info.UID = part |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
kv := strings.Split(strings.TrimSpace(part), "=") |
|
|
|
|
if len(kv) == 2 { |
|
|
|
|
val := kv[1] |
|
|
|
|
switch kv[0] { |
|
|
|
|
case "size": |
|
|
|
|
info.Size, _ = strconv.ParseInt(val, 10, 64) |
|
|
|
|
case "hash": |
|
|
|
|
info.Hash = val |
|
|
|
|
case "mime": |
|
|
|
|
info.MimeType = val |
|
|
|
|
case "charset": |
|
|
|
|
info.Charset = val |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return info |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Accessor functions for k8s objects
|
|
|
|
|
type GrafanaMetaAccessor interface { |
|
|
|
|
metav1.Object |
|
|
|
@ -585,3 +506,82 @@ func (m *grafanaMetaAccessor) FindTitle(defaultTitle string) string { |
|
|
|
|
} |
|
|
|
|
return defaultTitle |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type BlobInfo struct { |
|
|
|
|
UID string `json:"uid"` |
|
|
|
|
Size int64 `json:"size,omitempty"` |
|
|
|
|
Hash string `json:"hash,omitempty"` |
|
|
|
|
MimeType string `json:"mime,omitempty"` |
|
|
|
|
Charset string `json:"charset,omitempty"` // content type = mime+charset
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Content type is mime + charset
|
|
|
|
|
func (b *BlobInfo) SetContentType(v string) { |
|
|
|
|
var params map[string]string |
|
|
|
|
var err error |
|
|
|
|
|
|
|
|
|
b.Charset = "" |
|
|
|
|
b.MimeType, params, err = mime.ParseMediaType(v) |
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
b.Charset = params["charset"] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Content type is mime + charset
|
|
|
|
|
func (b *BlobInfo) ContentType() string { |
|
|
|
|
sb := bytes.NewBufferString(b.MimeType) |
|
|
|
|
if b.Charset != "" { |
|
|
|
|
sb.WriteString("; charset=") |
|
|
|
|
sb.WriteString(b.Charset) |
|
|
|
|
} |
|
|
|
|
return sb.String() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (b *BlobInfo) String() string { |
|
|
|
|
sb := bytes.NewBufferString(b.UID) |
|
|
|
|
if b.Size > 0 { |
|
|
|
|
sb.WriteString(fmt.Sprintf("; size=%d", b.Size)) |
|
|
|
|
} |
|
|
|
|
if b.Hash != "" { |
|
|
|
|
sb.WriteString("; hash=") |
|
|
|
|
sb.WriteString(b.Hash) |
|
|
|
|
} |
|
|
|
|
if b.MimeType != "" { |
|
|
|
|
sb.WriteString("; mime=") |
|
|
|
|
sb.WriteString(b.MimeType) |
|
|
|
|
} |
|
|
|
|
if b.Charset != "" { |
|
|
|
|
sb.WriteString("; charset=") |
|
|
|
|
sb.WriteString(b.Charset) |
|
|
|
|
} |
|
|
|
|
return sb.String() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func ParseBlobInfo(v string) *BlobInfo { |
|
|
|
|
if v == "" { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
info := &BlobInfo{} |
|
|
|
|
for i, part := range strings.Split(v, ";") { |
|
|
|
|
if i == 0 { |
|
|
|
|
info.UID = part |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
kv := strings.Split(strings.TrimSpace(part), "=") |
|
|
|
|
if len(kv) == 2 { |
|
|
|
|
val := kv[1] |
|
|
|
|
switch kv[0] { |
|
|
|
|
case "size": |
|
|
|
|
info.Size, _ = strconv.ParseInt(val, 10, 64) |
|
|
|
|
case "hash": |
|
|
|
|
info.Hash = val |
|
|
|
|
case "mime": |
|
|
|
|
info.MimeType = val |
|
|
|
|
case "charset": |
|
|
|
|
info.Charset = val |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return info |
|
|
|
|
} |
|
|
|
|