+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"
···
875
}
876
877
// Determine PR type based on input parameters
878
-
roles := f.RolesInRepo(user)
879
isPushAllowed := roles.IsPushAllowed()
880
isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == ""
881
isForkBased := fromFork != "" && sourceBranch != ""
···
1672
return
1673
}
1674
1675
-
roles := f.RolesInRepo(user)
1676
if !roles.IsPushAllowed() {
1677
log.Println("unauthorized user")
1678
w.WriteHeader(http.StatusUnauthorized)
···
2259
}
2260
2261
// auth filter: only owner or collaborators can close
2262
-
roles := f.RolesInRepo(user)
2263
isOwner := roles.IsOwner()
2264
isCollaborator := roles.IsCollaborator()
2265
isPullAuthor := user.Did == pull.OwnerDid
···
2333
}
2334
2335
// auth filter: only owner or collaborators can close
2336
-
roles := f.RolesInRepo(user)
2337
isOwner := roles.IsOwner()
2338
isCollaborator := roles.IsCollaborator()
2339
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"
···
876
}
877
878
// Determine PR type based on input parameters
879
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
880
isPushAllowed := roles.IsPushAllowed()
881
isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == ""
882
isForkBased := fromFork != "" && sourceBranch != ""
···
1673
return
1674
}
1675
1676
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
1677
if !roles.IsPushAllowed() {
1678
log.Println("unauthorized user")
1679
w.WriteHeader(http.StatusUnauthorized)
···
2260
}
2261
2262
// auth filter: only owner or collaborators can close
2263
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
2264
isOwner := roles.IsOwner()
2265
isCollaborator := roles.IsCollaborator()
2266
isPullAuthor := user.Did == pull.OwnerDid
···
2334
}
2335
2336
// auth filter: only owner or collaborators can close
2337
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
2338
isOwner := roles.IsOwner()
2339
isCollaborator := roles.IsCollaborator()
2340
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