tokenFactory/relay/channel/task/tencentvod/credentials.go

71 lines
1.6 KiB
Go

package tencentvod
import (
"errors"
"fmt"
"strconv"
"strings"
)
const defaultVODRegion = "ap-guangzhou"
type Credentials struct {
SubAppID uint64
SecretID string
SecretKey string
Region string
}
func ParseCredentials(raw string) (Credentials, error) {
s := strings.TrimSpace(strings.TrimPrefix(strings.TrimSpace(raw), "Bearer "))
if s == "" {
return Credentials{}, errors.New("empty tencent cloud vod credentials")
}
var parts []string
if strings.Contains(s, "|") {
for _, p := range strings.Split(s, "|") {
p = strings.TrimSpace(p)
if p != "" {
parts = append(parts, p)
}
}
} else {
for _, line := range strings.Split(s, "\n") {
line = strings.TrimSpace(line)
if line != "" {
parts = append(parts, line)
}
}
}
if len(parts) < 3 {
return Credentials{}, fmt.Errorf("invalid credentials: need SubAppId, SecretId and SecretKey (%d segments)", len(parts))
}
subID, err := strconv.ParseUint(parts[0], 10, 64)
if err != nil || subID == 0 {
return Credentials{}, fmt.Errorf("invalid SubAppId %q", parts[0])
}
c := Credentials{
SubAppID: subID,
SecretID: parts[1],
SecretKey: parts[2],
Region: defaultVODRegion,
}
if len(parts) >= 4 && strings.TrimSpace(parts[3]) != "" {
c.Region = strings.TrimSpace(parts[3])
}
return c, nil
}
func SplitCombinedModel(combined string) (modelName, modelVersion string) {
combined = strings.TrimSpace(combined)
if combined == "" {
return "", ""
}
idx := strings.Index(combined, "-")
if idx <= 0 || idx >= len(combined)-1 {
return combined, ""
}
return strings.TrimSpace(combined[:idx]), strings.TrimSpace(combined[idx+1:])
}