forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
Monorepo for Tangled
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package rbac
2
3import (
4 "fmt"
5 "slices"
6 "strings"
7)
8
9func (e *Enforcer) getDomainsForUser(did string, keepFunc func(string) bool, stripFunc func(string) string) ([]string, error) {
10 domains, err := e.E.GetDomainsForUser(did)
11 if err != nil {
12 return nil, err
13 }
14
15 n := 0
16 for _, x := range domains {
17 if keepFunc(x) {
18 domains[n] = stripFunc(x)
19 n++
20 }
21 }
22 domains = domains[:n]
23
24 return domains, nil
25}
26
27func (e *Enforcer) addOwner(domain, owner string) error {
28 _, err := e.E.AddGroupingPolicy(owner, "server:owner", domain)
29 return err
30}
31
32func (e *Enforcer) removeOwner(domain, owner string) error {
33 _, err := e.E.RemoveGroupingPolicy(owner, "server:owner", domain)
34 return err
35}
36
37func (e *Enforcer) addMember(domain, member string) error {
38 _, err := e.E.AddGroupingPolicy(member, "server:member", domain)
39 return err
40}
41
42func (e *Enforcer) removeMember(domain, member string) error {
43 _, err := e.E.RemoveGroupingPolicy(member, "server:member", domain)
44 return err
45}
46
47func (e *Enforcer) isRole(user, role, domain string) (bool, error) {
48 roles, err := e.E.GetImplicitRolesForUser(user, domain)
49 if err != nil {
50 return false, err
51 }
52 if slices.Contains(roles, role) {
53 return true, nil
54 }
55 return false, nil
56}
57
58func (e *Enforcer) isInviteAllowed(user, domain string) (bool, error) {
59 return e.E.Enforce(user, domain, domain, "server:invite")
60}
61
62func checkRepoFormat(repo string) error {
63 // sanity check, repo must be of the form ownerDid/repo
64 if parts := strings.SplitN(repo, "/", 2); !strings.HasPrefix(parts[0], "did:") {
65 return fmt.Errorf("invalid repo: %s", repo)
66 }
67
68 return nil
69}
70
71const spindlePrefix = "spindle:"
72
73func intoSpindle(domain string) string {
74 if !isSpindle(domain) {
75 return spindlePrefix + domain
76 }
77 return domain
78}
79
80func unSpindle(domain string) string {
81 if !isSpindle(domain) {
82 return domain
83 }
84 return strings.TrimPrefix(domain, spindlePrefix)
85}
86
87func isSpindle(domain string) bool {
88 return strings.HasPrefix(domain, spindlePrefix)
89}
90
91func isNotSpindle(domain string) bool {
92 return !isSpindle(domain)
93}