appview: remove ResolvedRepo.RolesInRepo() #809

merged
opened by boltless.me targeting master from sl/yurolxtlpsmz

replace with rbac enforcer instead

Signed-off-by: Seongmin Lee git@boltless.me

Changed files
+16 -16
appview
issues
pulls
reporesolver
state
+7 -2
appview/issues/issues.go
···
"tangled.org/core/appview/oauth"
"tangled.org/core/appview/pages"
"tangled.org/core/appview/pages/markup"
+
"tangled.org/core/appview/pages/repoinfo"
"tangled.org/core/appview/pagination"
"tangled.org/core/appview/reporesolver"
"tangled.org/core/appview/validator"
"tangled.org/core/idresolver"
+
"tangled.org/core/rbac"
"tangled.org/core/tid"
)
type Issues struct {
oauth *oauth.OAuth
repoResolver *reporesolver.RepoResolver
+
enforcer *rbac.Enforcer
pages *pages.Pages
idResolver *idresolver.Resolver
db *db.DB
···
func New(
oauth *oauth.OAuth,
repoResolver *reporesolver.RepoResolver,
+
enforcer *rbac.Enforcer,
pages *pages.Pages,
idResolver *idresolver.Resolver,
db *db.DB,
···
return &Issues{
oauth: oauth,
repoResolver: repoResolver,
+
enforcer: enforcer,
pages: pages,
idResolver: idResolver,
db: db,
···
return
}
-
roles := f.RolesInRepo(user)
+
roles := repoinfo.RolesInRepo{Roles: rp.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
isRepoOwner := roles.IsOwner()
isCollaborator := roles.IsCollaborator()
isIssueOwner := user.Did == issue.Did
···
return
}
-
roles := f.RolesInRepo(user)
+
roles := repoinfo.RolesInRepo{Roles: rp.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
isRepoOwner := roles.IsOwner()
isCollaborator := roles.IsCollaborator()
isIssueOwner := user.Did == issue.Did
+5 -4
appview/pulls/pulls.go
···
"tangled.org/core/appview/oauth"
"tangled.org/core/appview/pages"
"tangled.org/core/appview/pages/markup"
+
"tangled.org/core/appview/pages/repoinfo"
"tangled.org/core/appview/reporesolver"
"tangled.org/core/appview/validator"
"tangled.org/core/appview/xrpcclient"
···
}
// Determine PR type based on input parameters
-
roles := f.RolesInRepo(user)
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
isPushAllowed := roles.IsPushAllowed()
isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == ""
isForkBased := fromFork != "" && sourceBranch != ""
···
return
-
roles := f.RolesInRepo(user)
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
if !roles.IsPushAllowed() {
log.Println("unauthorized user")
w.WriteHeader(http.StatusUnauthorized)
···
// auth filter: only owner or collaborators can close
-
roles := f.RolesInRepo(user)
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
isOwner := roles.IsOwner()
isCollaborator := roles.IsCollaborator()
isPullAuthor := user.Did == pull.OwnerDid
···
// auth filter: only owner or collaborators can close
-
roles := f.RolesInRepo(user)
+
roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())}
isOwner := roles.IsOwner()
isCollaborator := roles.IsCollaborator()
isPullAuthor := user.Did == pull.OwnerDid
+3 -10
appview/reporesolver/resolver.go
···
func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo {
repoAt := f.RepoAt()
isStarred := false
+
roles := repoinfo.RolesInRepo{}
if user != nil {
isStarred = db.GetStarStatus(f.rr.execer, user.Did, repoAt)
+
roles.Roles = f.rr.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())
}
stats := f.RepoStats
···
// info related to the session
IsStarred: isStarred,
-
Roles: f.RolesInRepo(user),
+
Roles: roles,
}
return repoInfo
}
-
func (f *ResolvedRepo) RolesInRepo(u *oauth.User) repoinfo.RolesInRepo {
-
if u != nil {
-
r := f.rr.enforcer.GetPermissionsInRepo(u.Did, f.Knot, f.DidSlashRepo())
-
return repoinfo.RolesInRepo{Roles: r}
-
} else {
-
return repoinfo.RolesInRepo{}
-
}
-
}
-
// extractPathAfterRef gets the actual repository path
// after the ref. for example:
//
+1
appview/state/router.go
···
issues := issues.New(
s.oauth,
s.repoResolver,
+
s.enforcer,
s.pages,
s.idResolver,
s.db,