CreateTaskFromPeer creates one task on behalf of an authenticated network peer after channel and capability validation succeed.
( ctx context.Context, ingress TaskIngressContext, spec taskpkg.CreateTask, )
| 171 | // CreateTaskFromPeer creates one task on behalf of an authenticated network |
| 172 | // peer after channel and capability validation succeed. |
| 173 | func (m *Manager) CreateTaskFromPeer( |
| 174 | ctx context.Context, |
| 175 | ingress TaskIngressContext, |
| 176 | spec taskpkg.CreateTask, |
| 177 | ) (*taskpkg.Task, error) { |
| 178 | peerCtx, err := m.resolveTaskPeerContext(ctx, ingress, networkTaskActionCreate) |
| 179 | if err != nil { |
| 180 | return nil, err |
| 181 | } |
| 182 | if err := validateRequestedTaskChannel(peerCtx.ingress.Channel, spec.NetworkChannel); err != nil { |
| 183 | return nil, m.rejectTaskIngress(ctx, peerCtx.ingress, networkTaskActionCreate, err, map[string]any{ |
| 184 | tasksNetworkChannelKey: strings.TrimSpace(spec.NetworkChannel), |
| 185 | }) |
| 186 | } |
| 187 | |
| 188 | record, err := m.tasks.CreateTask(ctx, spec, peerCtx.actor) |
| 189 | if err != nil { |
| 190 | return nil, m.rejectTaskIngress(ctx, peerCtx.ingress, networkTaskActionCreate, err, map[string]any{ |
| 191 | tasksNetworkChannelKey: strings.TrimSpace(spec.NetworkChannel), |
| 192 | }) |
| 193 | } |
| 194 | m.recordTaskIngress(ctx, peerCtx.ingress, networkTaskActionCreate, AuditDirectionReceived, "", map[string]any{ |
| 195 | tasksTaskIDKey: record.ID, |
| 196 | tasksNetworkChannelKey: strings.TrimSpace(record.NetworkChannel), |
| 197 | }) |
| 198 | return record, nil |
| 199 | } |
| 200 | |
| 201 | // UpdateTaskFromPeer applies one mutable task patch through the task manager |
| 202 | // after enforcing channel-bound ingress rules. |