UpdateWorkloadIdentity updates a workload identity.
(ctx context.Context, wi *WorkloadIdentityMessage, patch *UpdateWorkloadIdentityMessage)
| 231 | |
| 232 | // UpdateWorkloadIdentity updates a workload identity. |
| 233 | func (s *Store) UpdateWorkloadIdentity(ctx context.Context, wi *WorkloadIdentityMessage, patch *UpdateWorkloadIdentityMessage) (*WorkloadIdentityMessage, error) { |
| 234 | set := qb.Q() |
| 235 | if v := patch.Delete; v != nil { |
| 236 | set.Comma("deleted = ?", *v) |
| 237 | } |
| 238 | if v := patch.Name; v != nil { |
| 239 | set.Comma("name = ?", *v) |
| 240 | } |
| 241 | if v := patch.Config; v != nil { |
| 242 | configBytes, err := protojson.Marshal(v) |
| 243 | if err != nil { |
| 244 | return nil, err |
| 245 | } |
| 246 | set.Comma("config = ?", configBytes) |
| 247 | } |
| 248 | |
| 249 | if set.Len() == 0 { |
| 250 | return wi, nil |
| 251 | } |
| 252 | |
| 253 | sqlStr, args, err := qb.Q().Space(`UPDATE workload_identity SET ? WHERE email = ? AND workspace = ? |
| 254 | RETURNING deleted, email, name, workspace, project, config`, |
| 255 | set, wi.Email, wi.Workspace).ToSQL() |
| 256 | if err != nil { |
| 257 | return nil, errors.Wrapf(err, "failed to build sql") |
| 258 | } |
| 259 | |
| 260 | var updated WorkloadIdentityMessage |
| 261 | var project sql.NullString |
| 262 | var configBytes []byte |
| 263 | if err := s.GetDB().QueryRowContext(ctx, sqlStr, args...).Scan( |
| 264 | &updated.MemberDeleted, |
| 265 | &updated.Email, |
| 266 | &updated.Name, |
| 267 | &updated.Workspace, |
| 268 | &project, |
| 269 | &configBytes, |
| 270 | ); err != nil { |
| 271 | return nil, err |
| 272 | } |
| 273 | if project.Valid { |
| 274 | updated.Project = &project.String |
| 275 | } |
| 276 | var config storepb.WorkloadIdentityConfig |
| 277 | if err := common.ProtojsonUnmarshaler.Unmarshal(configBytes, &config); err != nil { |
| 278 | return nil, err |
| 279 | } |
| 280 | updated.Config = &config |
| 281 | |
| 282 | s.userEmailCache.Remove(wi.Email) |
| 283 | |
| 284 | return &updated, nil |
| 285 | } |
| 286 | |
| 287 | // DeleteWorkloadIdentity soft-deletes a workload identity. |
| 288 | func (s *Store) DeleteWorkloadIdentity(ctx context.Context, wi *WorkloadIdentityMessage) error { |