| package idutil |
|
|
| import ( |
| "crypto/sha256" |
| "encoding/hex" |
| "fmt" |
| "time" |
| ) |
|
|
| |
| type Manager struct{} |
|
|
| |
| func NewManager() *Manager { |
| return &Manager{} |
| } |
|
|
| |
| |
| func (m *Manager) ProfileID(name string) string { |
| return hashID("prof", name) |
| } |
|
|
| |
| |
| |
| func (m *Manager) InstanceID(profileID, instanceName string) string { |
| data := fmt.Sprintf("%s:%s:%d", profileID, instanceName, time.Now().UnixNano()) |
| return hashID("inst", data) |
| } |
|
|
| |
| |
| |
| func (m *Manager) TabID(instanceID string, tabIndex int) string { |
| data := fmt.Sprintf("%s:%d", instanceID, tabIndex) |
| return hashID("tab", data) |
| } |
|
|
| |
| |
| func (m *Manager) TabIDFromCDPTarget(cdpTargetID string) string { |
| return cdpTargetID |
| } |
|
|
| |
| |
| func hashID(prefix, data string) string { |
| hash := sha256.Sum256([]byte(data)) |
| hexHash := hex.EncodeToString(hash[:]) |
| |
| return fmt.Sprintf("%s_%s", prefix, hexHash[:8]) |
| } |
|
|
| |
| func IsValidID(id, prefix string) bool { |
| if len(id) < len(prefix)+1 { |
| return false |
| } |
| return id[:len(prefix)] == prefix && id[len(prefix)] == '_' |
| } |
|
|
| |
| func ExtractPrefix(id string) string { |
| for i, c := range id { |
| if c == '_' { |
| return id[:i] |
| } |
| } |
| return "" |
| } |
|
|