Monorepo for Tangled tangled.org
at sl/shared-stacks 41 lines 1.1 kB view raw
1package pull 2 3import ( 4 "context" 5 6 "tangled.org/core/appview/models" 7 "tangled.org/core/appview/pages/repoinfo" 8 "tangled.org/core/appview/session" 9) 10 11func (s *Service) MergePull(ctx context.Context, pull *models.Pull2) error { 12 l := s.logger.With("method", "MergePull") 13 sess := session.FromContext(ctx) 14 if sess == nil { 15 l.Error("user session is missing in context") 16 return ErrForbidden 17 } 18 sessDid := sess.Data.AccountDID 19 l = l.With("did", sessDid) 20 21 // TODO: make this more granular 22 roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(sessDid.String(), pull.Repo.Knot, pull.Repo.DidSlashRepo())} 23 isRepoOwner := roles.IsOwner() 24 isCollaborator := roles.IsCollaborator() 25 isAuthor := sessDid == pull.Did 26 if !(isRepoOwner || isCollaborator || isAuthor) { 27 l.Error("user is not authorized") 28 return ErrForbidden 29 } 30 31 // 1. request knot to apply series of patches 32 // 2. create new pull.state record 33 // 3. update db 34 35 panic("unimplemented") 36 37 pull.State = models.PullMerged 38 39 // s.notifier.NewPullState(ctx, sessDid, pull) 40 return nil 41}