+7
-2
appview/issues/issues.go
+7
-2
appview/issues/issues.go
···
24
"tangled.org/core/appview/oauth"
25
"tangled.org/core/appview/pages"
26
"tangled.org/core/appview/pages/markup"
27
"tangled.org/core/appview/pagination"
28
"tangled.org/core/appview/reporesolver"
29
"tangled.org/core/appview/validator"
30
"tangled.org/core/idresolver"
31
"tangled.org/core/tid"
32
)
33
34
type Issues struct {
35
oauth *oauth.OAuth
36
repoResolver *reporesolver.RepoResolver
37
pages *pages.Pages
38
idResolver *idresolver.Resolver
39
db *db.DB
···
47
func New(
48
oauth *oauth.OAuth,
49
repoResolver *reporesolver.RepoResolver,
50
pages *pages.Pages,
51
idResolver *idresolver.Resolver,
52
db *db.DB,
···
59
return &Issues{
60
oauth: oauth,
61
repoResolver: repoResolver,
62
pages: pages,
63
idResolver: idResolver,
64
db: db,
···
285
return
286
}
287
288
-
roles := f.RolesInRepo(user)
289
isRepoOwner := roles.IsOwner()
290
isCollaborator := roles.IsCollaborator()
291
isIssueOwner := user.Did == issue.Did
···
333
return
334
}
335
336
-
roles := f.RolesInRepo(user)
337
isRepoOwner := roles.IsOwner()
338
isCollaborator := roles.IsCollaborator()
339
isIssueOwner := user.Did == issue.Did
···
24
"tangled.org/core/appview/oauth"
25
"tangled.org/core/appview/pages"
26
"tangled.org/core/appview/pages/markup"
27
+
"tangled.org/core/appview/pages/repoinfo"
28
"tangled.org/core/appview/pagination"
29
"tangled.org/core/appview/reporesolver"
30
"tangled.org/core/appview/validator"
31
"tangled.org/core/idresolver"
32
+
"tangled.org/core/rbac"
33
"tangled.org/core/tid"
34
)
35
36
type Issues struct {
37
oauth *oauth.OAuth
38
repoResolver *reporesolver.RepoResolver
39
+
enforcer *rbac.Enforcer
40
pages *pages.Pages
41
idResolver *idresolver.Resolver
42
db *db.DB
···
50
func New(
51
oauth *oauth.OAuth,
52
repoResolver *reporesolver.RepoResolver,
53
+
enforcer *rbac.Enforcer,
54
pages *pages.Pages,
55
idResolver *idresolver.Resolver,
56
db *db.DB,
···
63
return &Issues{
64
oauth: oauth,
65
repoResolver: repoResolver,
66
+
enforcer: enforcer,
67
pages: pages,
68
idResolver: idResolver,
69
db: db,
···
290
return
291
}
292
293
+
roles := repoinfo.RolesInRepo{Roles: rp.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
294
isRepoOwner := roles.IsOwner()
295
isCollaborator := roles.IsCollaborator()
296
isIssueOwner := user.Did == issue.Did
···
338
return
339
}
340
341
+
roles := repoinfo.RolesInRepo{Roles: rp.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
342
isRepoOwner := roles.IsOwner()
343
isCollaborator := roles.IsCollaborator()
344
isIssueOwner := user.Did == issue.Did
+5
-4
appview/pulls/pulls.go
+5
-4
appview/pulls/pulls.go
···
23
"tangled.org/core/appview/oauth"
24
"tangled.org/core/appview/pages"
25
"tangled.org/core/appview/pages/markup"
26
"tangled.org/core/appview/reporesolver"
27
"tangled.org/core/appview/validator"
28
"tangled.org/core/appview/xrpcclient"
···
877
}
878
879
// Determine PR type based on input parameters
880
-
roles := f.RolesInRepo(user)
881
isPushAllowed := roles.IsPushAllowed()
882
isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == ""
883
isForkBased := fromFork != "" && sourceBranch != ""
···
1674
return
1675
}
1676
1677
-
roles := f.RolesInRepo(user)
1678
if !roles.IsPushAllowed() {
1679
log.Println("unauthorized user")
1680
w.WriteHeader(http.StatusUnauthorized)
···
2261
}
2262
2263
// auth filter: only owner or collaborators can close
2264
-
roles := f.RolesInRepo(user)
2265
isOwner := roles.IsOwner()
2266
isCollaborator := roles.IsCollaborator()
2267
isPullAuthor := user.Did == pull.OwnerDid
···
2335
}
2336
2337
// auth filter: only owner or collaborators can close
2338
-
roles := f.RolesInRepo(user)
2339
isOwner := roles.IsOwner()
2340
isCollaborator := roles.IsCollaborator()
2341
isPullAuthor := user.Did == pull.OwnerDid
···
23
"tangled.org/core/appview/oauth"
24
"tangled.org/core/appview/pages"
25
"tangled.org/core/appview/pages/markup"
26
+
"tangled.org/core/appview/pages/repoinfo"
27
"tangled.org/core/appview/reporesolver"
28
"tangled.org/core/appview/validator"
29
"tangled.org/core/appview/xrpcclient"
···
878
}
879
880
// Determine PR type based on input parameters
881
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
882
isPushAllowed := roles.IsPushAllowed()
883
isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == ""
884
isForkBased := fromFork != "" && sourceBranch != ""
···
1675
return
1676
}
1677
1678
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
1679
if !roles.IsPushAllowed() {
1680
log.Println("unauthorized user")
1681
w.WriteHeader(http.StatusUnauthorized)
···
2262
}
2263
2264
// auth filter: only owner or collaborators can close
2265
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
2266
isOwner := roles.IsOwner()
2267
isCollaborator := roles.IsCollaborator()
2268
isPullAuthor := user.Did == pull.OwnerDid
···
2336
}
2337
2338
// auth filter: only owner or collaborators can close
2339
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
2340
isOwner := roles.IsOwner()
2341
isCollaborator := roles.IsCollaborator()
2342
isPullAuthor := user.Did == pull.OwnerDid
+3
-10
appview/reporesolver/resolver.go
+3
-10
appview/reporesolver/resolver.go
···
79
func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo {
80
repoAt := f.RepoAt()
81
isStarred := false
82
if user != nil {
83
isStarred = db.GetStarStatus(f.rr.execer, user.Did, repoAt)
84
}
85
86
stats := f.RepoStats
···
130
131
// info related to the session
132
IsStarred: isStarred,
133
-
Roles: f.RolesInRepo(user),
134
}
135
136
return repoInfo
137
-
}
138
-
139
-
func (f *ResolvedRepo) RolesInRepo(u *oauth.User) repoinfo.RolesInRepo {
140
-
if u != nil {
141
-
r := f.rr.enforcer.GetPermissionsInRepo(u.Did, f.Knot, f.DidSlashRepo())
142
-
return repoinfo.RolesInRepo{Roles: r}
143
-
} else {
144
-
return repoinfo.RolesInRepo{}
145
-
}
146
}
147
148
// extractPathAfterRef gets the actual repository path
···
79
func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo {
80
repoAt := f.RepoAt()
81
isStarred := false
82
+
roles := repoinfo.RolesInRepo{}
83
if user != nil {
84
isStarred = db.GetStarStatus(f.rr.execer, user.Did, repoAt)
85
+
roles.Roles = f.rr.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())
86
}
87
88
stats := f.RepoStats
···
132
133
// info related to the session
134
IsStarred: isStarred,
135
+
Roles: roles,
136
}
137
138
return repoInfo
139
}
140
141
// extractPathAfterRef gets the actual repository path