Monorepo for Tangled
tangled.org
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}