(ctx context.Context, req *adminv1.DenyProjectAccessRequest)
| 1730 | } |
| 1731 | |
| 1732 | func (s *Server) DenyProjectAccess(ctx context.Context, req *adminv1.DenyProjectAccessRequest) (*adminv1.DenyProjectAccessResponse, error) { |
| 1733 | observability.AddRequestAttributes(ctx, |
| 1734 | attribute.String("args.id", req.Id), |
| 1735 | ) |
| 1736 | |
| 1737 | accessReq, err := s.admin.DB.FindProjectAccessRequestByID(ctx, req.Id) |
| 1738 | if err != nil { |
| 1739 | return nil, err |
| 1740 | } |
| 1741 | |
| 1742 | proj, err := s.admin.DB.FindProject(ctx, accessReq.ProjectID) |
| 1743 | if err != nil { |
| 1744 | return nil, err |
| 1745 | } |
| 1746 | |
| 1747 | claims := auth.GetClaims(ctx) |
| 1748 | if !claims.ProjectPermissions(ctx, proj.OrganizationID, proj.ID).ManageProjectMembers { |
| 1749 | return nil, status.Error(codes.PermissionDenied, "not allowed to set project member roles") |
| 1750 | } |
| 1751 | |
| 1752 | user, err := s.admin.DB.FindUser(ctx, accessReq.UserID) |
| 1753 | if err != nil { |
| 1754 | return nil, err |
| 1755 | } |
| 1756 | org, err := s.admin.DB.FindOrganization(ctx, proj.OrganizationID) |
| 1757 | if err != nil { |
| 1758 | return nil, err |
| 1759 | } |
| 1760 | |
| 1761 | // remove the invitation |
| 1762 | err = s.admin.DB.DeleteProjectAccessRequest(ctx, req.Id) |
| 1763 | if err != nil { |
| 1764 | return nil, err |
| 1765 | } |
| 1766 | |
| 1767 | err = s.admin.Email.SendProjectAccessRejected(&email.ProjectAccessRejected{ |
| 1768 | ToEmail: user.Email, |
| 1769 | ToName: user.DisplayName, |
| 1770 | OrgName: org.Name, |
| 1771 | ProjectName: proj.Name, |
| 1772 | }) |
| 1773 | if err != nil { |
| 1774 | return nil, err |
| 1775 | } |
| 1776 | |
| 1777 | return &adminv1.DenyProjectAccessResponse{}, nil |
| 1778 | } |
| 1779 | |
| 1780 | // getAndCheckGithubInstallationID returns a valid installation ID iff app is installed and user is a collaborator of the repo |
| 1781 | func (s *Server) getAndCheckGithubInstallationID(ctx context.Context, gitRemote, userID string) (repoID, installationID int64, err error) { |
nothing calls this directly
no test coverage detected