(ctx context.Context, req *adminv1.UpdateProjectVariablesRequest)
| 947 | } |
| 948 | |
| 949 | func (s *Server) UpdateProjectVariables(ctx context.Context, req *adminv1.UpdateProjectVariablesRequest) (*adminv1.UpdateProjectVariablesResponse, error) { |
| 950 | observability.AddRequestAttributes(ctx, |
| 951 | attribute.String("args.org", req.Org), |
| 952 | attribute.String("args.project", req.Project), |
| 953 | attribute.String("args.environment", req.Environment), |
| 954 | attribute.StringSlice("args.variables", maps.Keys(req.Variables)), |
| 955 | attribute.StringSlice("args.unset_variables", req.UnsetVariables), |
| 956 | ) |
| 957 | proj, err := s.admin.DB.FindProjectByName(ctx, req.Org, req.Project) |
| 958 | if err != nil { |
| 959 | return nil, err |
| 960 | } |
| 961 | |
| 962 | claims := auth.GetClaims(ctx) |
| 963 | perms := claims.ProjectPermissions(ctx, proj.OrganizationID, proj.ID) |
| 964 | if !perms.ManageDev && !perms.ManageProd { |
| 965 | return nil, status.Error(codes.PermissionDenied, "does not have permission to update variables") |
| 966 | } |
| 967 | if req.Environment == "prod" && !perms.ManageProd { |
| 968 | return nil, status.Error(codes.PermissionDenied, "does not have permission to update variables for the prod environment") |
| 969 | } |
| 970 | // NOTE: Not explicitly checking ManageDev for non-prod environments for simplicity; if you have ManageProd, you're good to manage variables for non-prod envs as well. |
| 971 | |
| 972 | var validationErr error |
| 973 | for k := range req.Variables { |
| 974 | if err := env.ValidateName(k); err != nil { |
| 975 | validationErr = errors.Join(validationErr, err) |
| 976 | } |
| 977 | } |
| 978 | if validationErr != nil { |
| 979 | return nil, status.Error(codes.InvalidArgument, validationErr.Error()) |
| 980 | } |
| 981 | |
| 982 | var userID string |
| 983 | if claims.OwnerType() == auth.OwnerTypeUser { |
| 984 | userID = claims.OwnerID() |
| 985 | } |
| 986 | |
| 987 | err = s.admin.UpdateProjectVariables(ctx, proj, req.Environment, req.Variables, req.UnsetVariables, userID) |
| 988 | if err != nil { |
| 989 | return nil, fmt.Errorf("variables updated failed with error %w", err) |
| 990 | } |
| 991 | |
| 992 | vars, err := s.admin.DB.FindProjectVariables(ctx, proj.ID, nil) |
| 993 | if err != nil { |
| 994 | return nil, err |
| 995 | } |
| 996 | resp := &adminv1.UpdateProjectVariablesResponse{} |
| 997 | for _, v := range vars { |
| 998 | resp.Variables = append(resp.Variables, projectVariableToDTO(v)) |
| 999 | } |
| 1000 | return resp, nil |
| 1001 | } |
| 1002 | |
| 1003 | func (s *Server) GetProjectMemberUser(ctx context.Context, req *adminv1.GetProjectMemberUserRequest) (*adminv1.GetProjectMemberUserResponse, error) { |
| 1004 | observability.AddRequestAttributes(ctx, |
nothing calls this directly
no test coverage detected