mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 21:19:28 -06:00
31 lines
1006 B
Go
31 lines
1006 B
Go
package orgchannel
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// PrependOrgID prepends orgID to a channel.
|
|
func PrependOrgID(orgID int64, channel string) string {
|
|
return strconv.FormatInt(orgID, 10) + "/" + channel
|
|
}
|
|
|
|
// StripOrgID strips organization ID from channel ID.
|
|
// The reason why we strip orgID is because we need to maintain multi-tenancy.
|
|
// Each organization can have the same channels which should not overlap. Due
|
|
// to this every channel in Centrifuge has orgID prefix. Internally in Grafana
|
|
// we strip this prefix since orgID is part of user identity and channel handlers
|
|
// supposed to have the same business logic for all organizations.
|
|
func StripOrgID(channel string) (int64, string, error) {
|
|
parts := strings.SplitN(channel, "/", 2)
|
|
if len(parts) != 2 {
|
|
return 0, "", fmt.Errorf("malformed channel: %s", channel)
|
|
}
|
|
orgID, err := strconv.ParseInt(parts[0], 10, 64)
|
|
if err != nil {
|
|
return 0, "", fmt.Errorf("invalid orgID part: %s", parts[0])
|
|
}
|
|
return orgID, parts[1], nil
|
|
}
|