Files
services/pkg/tenant/tenant.go
Asim Aslam 542c105037 Chats (#96)
* stash

* replace chats sql with store

* strip unused method
2021-05-07 17:09:51 +01:00

50 lines
936 B
Go

// Package tenant provides multi-tenancy helpers
package tenant
import (
"context"
"fmt"
"github.com/micro/micro/v3/service/auth"
)
// FromContext returns a tenant from the context
func FromContext(ctx context.Context) (string, bool) {
acc, ok := auth.AccountFromContext(ctx)
if !ok {
return "", false
}
return FromAccount(acc), true
}
// FromAccount returns a tenant from
func FromAccount(acc *auth.Account) string {
id := acc.ID
issuer := acc.Issuer
owner := acc.Metadata["apikey_owner"]
if len(id) == 0 {
id = "micro"
}
if len(issuer) == 0 {
issuer = "micro"
}
if len(owner) == 0 {
owner = id
}
return fmt.Sprintf("%s/%s", acc.Issuer, owner)
}
// CreateKey generated a unique key for a resource
func CreateKey(ctx context.Context, key string) string {
t, ok := FromContext(ctx)
if !ok {
return key
}
// return a tenant prefixed key e.g micro/asim/foobar
return fmt.Sprintf("%s/%s", t, key)
}