MCPcopy Index your code
hub / github.com/rilldata/rill / UpdateProjectVariables

Method UpdateProjectVariables

admin/server/projects.go:949–1001  ·  view source on GitHub ↗
(ctx context.Context, req *adminv1.UpdateProjectVariablesRequest)

Source from the content-addressed store, hash-verified

947}
948
949func (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
1003func (s *Server) GetProjectMemberUser(ctx context.Context, req *adminv1.GetProjectMemberUserRequest) (*adminv1.GetProjectMemberUserResponse, error) {
1004 observability.AddRequestAttributes(ctx,

Callers

nothing calls this directly

Calls 13

AddRequestAttributesFunction · 0.92
GetClaimsFunction · 0.92
ValidateNameFunction · 0.92
projectVariableToDTOFunction · 0.85
StringMethod · 0.65
FindProjectByNameMethod · 0.65
ProjectPermissionsMethod · 0.65
OwnerTypeMethod · 0.65
OwnerIDMethod · 0.65
ErrorfMethod · 0.65
FindProjectVariablesMethod · 0.65

Tested by

no test coverage detected