3
0
corteza/server/docs/federation.yaml
2022-11-14 09:26:39 +01:00

831 lines
21 KiB
YAML

openapi: 3.0.0
info:
title: Corteza federation API
description: Corteza federation REST API definition
version: '2022.9'
contact:
email: info@cortezaproject.org
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
paths:
/federation/nodes/{nodeID}/handshake:
post:
tags:
- Federation node handshake
summary: Initialize the handshake step with node B
responses:
'200':
description: OK
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_0
pairToken:
type: string
description: >-
Pairing token to authenticate handshake initialization
request
sharedNodeID:
type: string
description: Remote (invoker's) node ID
authToken:
type: string
description: Authentication token so that remote
required:
- pairToken
- sharedNodeID
- authToken
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_0
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: &ref_3
type: string
/federation/nodes/:
get:
tags:
- Federation nodes
summary: Search federated nodes
responses:
'200':
description: OK
parameters:
- in: query
name: query
description: Filter nodes by name and host
required: false
schema: &ref_1
type: string
- in: query
name: status
description: Filter by status
required: false
schema: *ref_1
post:
tags:
- Federation nodes
summary: Create a new federation node
responses:
'200':
description: OK
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_2
baseURL:
type: string
description: Federation API base URL
name:
type: string
description: Name for this node
contact:
type: string
description: Contact email
pairingURI:
type: string
description: Pairing URI
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_2
/federation/nodes/{nodeID}:
get:
tags:
- Federation nodes
summary: Read a federation node
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
post:
tags:
- Federation nodes
summary: Updates existing node
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_4
name:
type: string
description: Name for this node
contact:
type: string
description: Contact email
baseURL:
type: string
description: Federation API base URL
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_4
delete:
tags:
- Federation nodes
summary: Deletes node
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/uri:
post:
tags:
- Federation nodes
summary: Creates new sharable federation URI
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/undelete:
post:
tags:
- Federation nodes
summary: Undeletes a node
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/pair:
post:
tags:
- Federation nodes
summary: Initialize the pairing process between the two nodes
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/handshake-confirm:
post:
tags:
- Federation nodes
summary: Confirm the requested handshake
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/handshake-complete:
post:
tags:
- Federation nodes
summary: Complete the handshake
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: NodeID
required: true
schema: *ref_3
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_5
authToken:
type: string
description: Node A token
required:
- authToken
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_5
/federation/nodes/{nodeID}/modules/{moduleID}/exposed:
get:
tags:
- Manage structure
summary: Exposed settings for module
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
post:
tags:
- Manage structure
summary: Update already exposed module
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_6
composeModuleID:
type: string
description: Compose module id
composeNamespaceID:
type: string
description: Compose namespace id
name:
type: string
description: Module name
handle:
type: string
description: Module handle
fields:
type: array
items: &ref_7
type: object
properties:
fieldID:
type: string
format: uuid
name:
type: string
kind:
type: string
label:
type: string
defaultValue:
type: array
items:
type: string
maxLength:
type: integer
isRequired:
type: boolean
isPrivate:
type: boolean
isMulti:
type: boolean
isSystem:
type: boolean
options:
type: object
description: Exposed module fields
required:
- composeModuleID
- composeNamespaceID
- name
- handle
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_6
delete:
tags:
- Manage structure
summary: Remove from federation
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/modules/:
put:
tags:
- Manage structure
summary: Add module to federation
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_8
composeModuleID:
type: string
description: Compose module id
composeNamespaceID:
type: string
description: Compose namespace id
name:
type: string
description: Module name
handle:
type: string
description: Module handle
fields:
type: array
items: *ref_7
description: Exposed module fields
required:
- composeModuleID
- composeNamespaceID
- name
- handle
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_8
get:
tags:
- Manage structure
summary: List of shared/exposed/mapped modules
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: query
name: shared
description: List shared modules
required: false
schema: &ref_9
type: boolean
- in: query
name: exposed
description: List exposed modules
required: false
schema: *ref_9
- in: query
name: mapped
description: List mapped modules
required: false
schema: *ref_9
/federation/nodes/{nodeID}/modules/{moduleID}/shared:
get:
tags:
- Manage structure
summary: Shared settings for module
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
/federation/nodes/{nodeID}/modules/{moduleID}/mapped:
put:
tags:
- Manage structure
summary: Add fields mappings to federated module
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_10
composeModuleID:
type: string
description: Compose module id
composeNamespaceID:
type: string
description: Compose namespace id
fields:
type: string
description: Exposed module fields
required:
- composeModuleID
- composeNamespaceID
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_10
get:
tags:
- Manage structure
summary: Fields mappings for module
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
- in: query
name: composeModuleID
description: Compose module id
required: false
schema: *ref_3
/federation/nodes/{nodeID}/modules/exposed/:
get:
tags:
- Sync structure
summary: List all exposed modules changes
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: query
name: lastSync
description: Last sync timestamp
required: false
schema: *ref_3
- in: query
name: query
description: Search query
required: false
schema: *ref_1
- in: query
name: limit
description: Limit
required: false
schema: &ref_11
type: string
- in: query
name: pageCursor
description: Page cursor
required: false
schema: *ref_1
- in: query
name: sort
description: Sort items
required: false
schema: *ref_1
/federation/nodes/{nodeID}/modules/exposed/activity-stream:
get:
tags:
- Sync structure
summary: List all exposed modules changes in activity streams format
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: query
name: lastSync
description: Last sync timestamp
required: false
schema: *ref_3
- in: query
name: query
description: Search query
required: false
schema: *ref_1
- in: query
name: limit
description: Limit
required: false
schema: *ref_11
- in: query
name: pageCursor
description: Page cursor
required: false
schema: *ref_1
- in: query
name: sort
description: Sort items
required: false
schema: *ref_1
/federation/nodes/{nodeID}/modules/exposed/records/:
get:
tags:
- Sync data
summary: List all record changes
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: query
name: lastSync
description: Last sync timestamp
required: false
schema: *ref_3
- in: query
name: query
description: Search query
required: false
schema: *ref_1
- in: query
name: limit
description: Limit
required: false
schema: *ref_11
- in: query
name: pageCursor
description: Page cursor
required: false
schema: *ref_1
- in: query
name: sort
description: Sort items
required: false
schema: *ref_1
/federation/nodes/{nodeID}/modules/{moduleID}/records/:
get:
tags:
- Sync data
summary: List all records per module
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
- in: query
name: lastSync
description: Last sync timestamp
required: false
schema: *ref_3
- in: query
name: query
description: Search query
required: false
schema: *ref_1
- in: query
name: limit
description: Limit
required: false
schema: *ref_11
- in: query
name: pageCursor
description: Page cursor
required: false
schema: *ref_1
- in: query
name: sort
description: Sort items
required: false
schema: *ref_1
/federation/nodes/{nodeID}/modules/{moduleID}/records/activity-stream/:
get:
tags:
- Sync data
summary: List all records per module in activitystreams format
responses:
'200':
description: OK
parameters:
- in: path
name: nodeID
description: Node ID
required: true
schema: *ref_3
- in: path
name: moduleID
description: Module ID
required: true
schema: *ref_3
- in: query
name: lastSync
description: Last sync timestamp
required: false
schema: *ref_3
- in: query
name: query
description: Search query
required: false
schema: *ref_1
- in: query
name: limit
description: Limit
required: false
schema: *ref_11
- in: query
name: pageCursor
description: Page cursor
required: false
schema: *ref_1
- in: query
name: sort
description: Sort items
required: false
schema: *ref_1
/federation/permissions/:
get:
tags:
- Permissions
summary: Retrieve defined permissions
responses:
'200':
description: OK
/federation/permissions/effective:
get:
tags:
- Permissions
summary: Effective rules for current user
responses:
'200':
description: OK
parameters:
- in: query
name: resource
description: Show only rules for a specific resource
required: false
schema: *ref_1
/federation/permissions/trace:
get:
tags:
- Permissions
summary: Evaluate rules for given user/role combo
responses:
'200':
description: OK
parameters:
- in: query
name: resource
description: Show only rules for a specific resource
required: false
schema:
type: array
items: *ref_1
- in: query
name: userID
required: false
schema: *ref_3
- in: query
name: roleID
required: false
schema:
type: array
items: *ref_3
/federation/permissions/{roleID}/rules:
get:
tags:
- Permissions
summary: Retrieve role permissions
responses:
'200':
description: OK
parameters:
- in: path
name: roleID
description: Role ID
required: true
schema: *ref_3
- in: query
name: resource
description: Show only rules for a specific resource
required: false
schema:
type: array
items: *ref_1
delete:
tags:
- Permissions
summary: Remove all defined role permissions
responses:
'200':
description: OK
parameters:
- in: path
name: roleID
description: Role ID
required: true
schema: *ref_3
patch:
tags:
- Permissions
summary: Update permission settings
responses:
'200':
description: OK
parameters:
- in: path
name: roleID
description: Role ID
required: true
schema: *ref_3
requestBody:
content:
application/json:
schema:
type: object
properties: &ref_12
rules:
type: string
description: List of permission rules to set
required:
- rules
application/x-www-form-urlencoded:
schema:
type: object
properties: *ref_12