cerebrate/webroot/docs/openapi.yaml

2056 lines
58 KiB
YAML

openapi: 3.0.0
info:
version: 1.3.0
title: Cerebrate Project API
description: |
Cerebrate is an open-source platform meant to act as a trusted contact information provider and interconnection orchestrator for other security tools.
servers:
- url: https://cerebrate.local
tags:
- name: Individuals
description: "Individuals are natural persons. They are meant to describe the basic information about an individual that may or may not be a user of this community. Users in genral require an individual object to identify the person behind them - however, no user account is required to store information about an individual. Individuals can have affiliations to organisations and broods as well as cryptographic keys, using which their messages can be verified and which can be used to securely contact them."
- name: Users
description: "Users enrolled in this Cerebrate instance."
- name: Organisations
description: "Organisations can be equivalent to legal entities or specific individual teams within such entities. Their purpose is to relate individuals to their affiliations and for release control of information using the Trust Circles."
- name: Tags
description: "Tags can be attached to entity to quickly classify them, allowing further filtering and searches."
- name: Inbox
description: "Inbox messages represent A list of requests to be manually processed."
- name: SharingGroups
description: "Sharing groups are distribution lists usable by tools that can exchange information with a list of trusted partners. Create recurring or ad hoc sharing groups and share them with the members of the sharing group."
- name: Broods
description: "Cerebrate can connect to other Cerebrate instances to exchange trust information and to instrument interconnectivity between connected local tools. Each such Cerebrate instance with its connected tools is considered to be a brood."
- name: EncryptionKeys
description: "Assign encryption keys to the user, used to securely communicate or validate messages coming from the user."
- name: AuthKeys
description: "Authkeys are used for API access. A user can have more than one authkey, so if you would like to use separate keys per tool that queries Cerebrate, add additional keys. Use the comment field to make identifying your keys easier."
paths:
/individuals/index:
get:
summary: "Get individuals list"
operationId: getIndividuals
tags:
- Individuals
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/IndividualListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/individuals/view/{individualId}:
get:
summary: "Get individual by ID"
operationId: getIndividualById
tags:
- Individuals
parameters:
- $ref: "#/components/parameters/individualId"
responses:
"200":
$ref: "#/components/responses/IndividualResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/individuals/add:
post:
summary: "Add individual"
operationId: addIndividual
tags:
- Individuals
requestBody:
$ref: "#/components/requestBodies/CreateIndividualRequest"
responses:
"200":
$ref: "#/components/responses/IndividualResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/individuals/edit/{individualId}:
put:
summary: "Edit individual"
operationId: editIndividual
tags:
- Individuals
parameters:
- $ref: "#/components/parameters/individualId"
requestBody:
$ref: "#/components/requestBodies/EditIndividualRequest"
responses:
"200":
$ref: "#/components/responses/IndividualResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/individuals/delete/{individualId}:
delete:
summary: "Delete individual by ID"
operationId: deleteIndividualById
tags:
- Individuals
parameters:
- $ref: "#/components/parameters/individualId"
responses:
"200":
$ref: "#/components/responses/IndividualResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/index:
get:
summary: "Get users list"
operationId: getUsers
tags:
- Users
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/UserListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/view:
get:
summary: "Get information about the current user"
operationId: viewUserMe
tags:
- Users
responses:
"200":
$ref: "#/components/responses/UserResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/view/{userId}:
get:
summary: "Get information of a user by ID"
operationId: viewUserById
tags:
- Users
parameters:
- $ref: "#/components/parameters/userId"
responses:
"200":
$ref: "#/components/responses/UserResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/add:
post:
summary: "Add user"
operationId: addUser
tags:
- Users
requestBody:
$ref: "#/components/requestBodies/CreateUserRequest"
responses:
"200":
$ref: "#/components/responses/UserResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/edit:
put:
summary: "Edit current user"
operationId: editUser
tags:
- Users
requestBody:
$ref: "#/components/requestBodies/EditUserRequest"
responses:
"200":
$ref: "#/components/responses/UserResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/edit/{userId}:
put:
summary: "Edit current user"
operationId: editUserById
tags:
- Users
parameters:
- $ref: "#/components/parameters/userId"
requestBody:
$ref: "#/components/requestBodies/EditUserRequest"
responses:
"200":
$ref: "#/components/responses/UserResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/users/delete/{userId}:
delete:
summary: "Delete user by ID"
operationId: deleteUserById
tags:
- Users
parameters:
- $ref: "#/components/parameters/userId"
responses:
"200":
$ref: "#/components/responses/UserResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/add:
post:
summary: "Add organisation"
operationId: addOrganisation
tags:
- Organisations
requestBody:
$ref: "#/components/requestBodies/CreateOrganisationRequest"
responses:
"200":
$ref: "#/components/responses/OrganisationResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/edit/{organisationId}:
put:
summary: "Edit organisation"
operationId: editOrganisation
tags:
- Organisations
parameters:
- $ref: "#/components/parameters/organisationId"
requestBody:
$ref: "#/components/requestBodies/EditOrganisationRequest"
responses:
"200":
$ref: "#/components/responses/OrganisationResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/index:
get:
summary: "Get organisations"
operationId: getOrganisations
tags:
- Organisations
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/OrganisationListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/view/{organisationId}:
get:
summary: "View organisation by ID"
operationId: getOrganisationById
tags:
- Organisations
parameters:
- $ref: "#/components/parameters/organisationId"
responses:
"200":
$ref: "#/components/responses/OrganisationResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/delete/{organisationId}:
delete:
summary: "Delete organisation by ID"
operationId: deleteOrganisationById
tags:
- Organisations
parameters:
- $ref: "#/components/parameters/organisationId"
responses:
"200":
$ref: "#/components/responses/OrganisationResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/tag/{organisationId}:
post:
summary: "Tag organisation by ID"
operationId: tagOrganisationById
tags:
- Organisations
parameters:
- $ref: "#/components/parameters/organisationId"
requestBody:
$ref: "#/components/requestBodies/TagOrganisationRequest"
responses:
"200":
$ref: "#/components/responses/OrganisationResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/organisations/untag/{organisationId}:
post:
summary: "Remove organisation tag by ID"
operationId: untagOrganisationById
tags:
- Organisations
parameters:
- $ref: "#/components/parameters/organisationId"
requestBody:
$ref: "#/components/requestBodies/UntagOrganisationRequest"
responses:
"200":
$ref: "#/components/responses/OrganisationResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/tags/index:
get:
summary: "Get tags list"
operationId: getTags
tags:
- Tags
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/TagListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/inbox/index:
get:
summary: "Get inbox list"
operationId: getinbox
tags:
- Inbox
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/InboxListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/inbox/createEntry/User/Registration:
post:
summary: "Create user registration inbox entry"
operationId: createInboxEntry
tags:
- Inbox
requestBody:
$ref: "#/components/requestBodies/CreateUserRegistrationInboxEntryRequest"
responses:
"200":
$ref: "#/components/responses/CreateUserRegistrationInboxEntryResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/sharingGroups/index:
get:
summary: "Get a sharing groups list"
operationId: getSharingGroups
tags:
- SharingGroups
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/SharingGroupListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/sharingGroups/add:
post:
summary: "Add sharing group"
operationId: addSharingGroup
tags:
- SharingGroups
requestBody:
$ref: "#/components/requestBodies/CreateSharingGroupRequest"
responses:
"200":
$ref: "#/components/responses/IndividualResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/sharingGroups/view/{sharingGroupId}:
get:
summary: "Get sharing group by ID"
operationId: getSharingGroupById
tags:
- SharingGroups
parameters:
- $ref: "#/components/parameters/sharingGroupId"
responses:
"200":
$ref: "#/components/responses/SharingGroupResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/sharingGroups/delete/{sharingGroupId}:
delete:
summary: "Delete sharing group by ID"
operationId: deleteSharingGroupById
tags:
- SharingGroups
parameters:
- $ref: "#/components/parameters/sharingGroupId"
responses:
"200":
$ref: "#/components/responses/SharingGroupResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/sharingGroups/edit/{sharingGroupId}:
put:
summary: "Edit sharing group"
operationId: editSharingGroup
tags:
- SharingGroups
parameters:
- $ref: "#/components/parameters/sharingGroupId"
requestBody:
$ref: "#/components/requestBodies/EditSharingGroupRequest"
responses:
"200":
$ref: "#/components/responses/SharingGroupResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/broods/index:
get:
summary: "Get broods list"
operationId: getBroods
tags:
- Broods
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/BroodListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/broods/view/{broodId}:
get:
summary: "Get brood by ID"
operationId: getBroodById
tags:
- Broods
parameters:
- $ref: "#/components/parameters/broodId"
responses:
"200":
$ref: "#/components/responses/BroodResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/broods/add:
post:
summary: "Add brood"
operationId: addBrood
tags:
- Broods
requestBody:
$ref: "#/components/requestBodies/CreateBroodRequest"
responses:
"200":
$ref: "#/components/responses/BroodResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/broods/edit/{broodId}:
put:
summary: "Edit brood"
operationId: editBrood
tags:
- Broods
parameters:
- $ref: "#/components/parameters/broodId"
requestBody:
$ref: "#/components/requestBodies/EditBroodRequest"
responses:
"200":
$ref: "#/components/responses/BroodResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/broods/delete/{broodId}:
delete:
summary: "Delete brood by ID"
operationId: deleteBroodById
tags:
- Broods
parameters:
- $ref: "#/components/parameters/broodId"
responses:
"200":
$ref: "#/components/responses/BroodResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/broods/testConnection/{broodId}:
get:
summary: "Test brood connection by ID"
operationId: testBroodConnectionById
tags:
- Broods
parameters:
- $ref: "#/components/parameters/broodId"
responses:
"200":
$ref: "#/components/responses/TestBroodConnectionResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
# EncryptionKeys
/encryptionKeys/index:
get:
summary: "Get encryption keys list"
operationId: getEncryptionKeys
tags:
- EncryptionKeys
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/EncryptionKeyListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/encryptionKeys/view/{encryptionKeyId}:
get:
summary: "Get encryption key by ID"
operationId: getEncryptionKeyId
tags:
- EncryptionKeys
parameters:
- $ref: "#/components/parameters/encryptionKeyId"
responses:
"200":
$ref: "#/components/responses/EncryptionKeyResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/encryptionKeys/add:
post:
summary: "Add encryption key"
operationId: addEncryptionKey
tags:
- EncryptionKeys
requestBody:
$ref: "#/components/requestBodies/CreateEncryptionKeyRequest"
responses:
"200":
$ref: "#/components/responses/EncryptionKeyResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/encryptionKeys/edit/{encryptionKeyId}:
put:
summary: "Edit encryption key"
operationId: editEncryptionKey
tags:
- EncryptionKeys
parameters:
- $ref: "#/components/parameters/encryptionKeyId"
requestBody:
$ref: "#/components/requestBodies/EditEncryptionKeyRequest"
responses:
"200":
$ref: "#/components/responses/EncryptionKeyResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/encryptionKeys/delete/{encryptionKeyId}:
delete:
summary: "Delete encryption key by ID"
operationId: deleteEncryptionKeyById
tags:
- EncryptionKeys
parameters:
- $ref: "#/components/parameters/encryptionKeyId"
responses:
"200":
$ref: "#/components/responses/EncryptionKeyResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
# AuthKeys
/authKeys/index:
get:
summary: "Get auth keys list"
operationId: getAuthKeys
tags:
- AuthKeys
parameters:
- $ref: "#/components/parameters/quickFilter"
responses:
"200":
$ref: "#/components/responses/AuthKeyListResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/authKeys/add:
post:
summary: "Add auth keys"
operationId: addAuthKey
tags:
- AuthKeys
requestBody:
$ref: "#/components/requestBodies/CreateAuthKeyRequest"
responses:
"200":
$ref: "#/components/responses/AuthKeyResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
/authKeys/delete/{authKeyId}:
delete:
summary: "Delete auth key by ID"
operationId: deleteAuthKeyById
tags:
- AuthKeys
parameters:
- $ref: "#/components/parameters/authKeyId"
responses:
"200":
$ref: "#/components/responses/AuthKeyResponse"
"403":
$ref: "#/components/responses/UnauthorizedApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedApiErrorResponse"
default:
$ref: "#/components/responses/ApiErrorResponse"
components:
schemas:
# General
UUID:
type: string
format: uuid
maxLength: 36
example: "c99506a6-1255-4b71-afa5-7b8ba48c3b1b"
ID:
type: integer
format: int32
example: 1
DateTime:
type: string
format: datetime
example: "2022-01-05T11:19:26+00:00"
Email:
type: string
format: email
example: "user@example.com"
ModelName:
type: string
enum:
- "Organisation"
- "User"
- "Individual"
- "EncryptionKey"
- "Role"
- "Tag"
- "SharingGroup"
- "Brood"
# Individuals
IndividualFirstName:
type: string
example: "John"
IndividualLastName:
type: string
example: "Doe"
IndividualFullName:
type: string
example: "John Doe"
IndividualPosition:
type: string
example: "Security Analyst"
Individual:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
email:
$ref: "#/components/schemas/Email"
first_name:
$ref: "#/components/schemas/IndividualFirstName"
last_name:
$ref: "#/components/schemas/IndividualLastName"
full_name:
$ref: "#/components/schemas/IndividualFullName"
position:
$ref: "#/components/schemas/IndividualPosition"
tags:
$ref: "#/components/schemas/TagList"
aligments:
$ref: "#/components/schemas/AligmentList"
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
# Users
Username:
type: string
example: "admin"
IndividualList:
type: array
items:
$ref: "#/components/schemas/Individual"
User:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
username:
$ref: "#/components/schemas/Username"
role_id:
$ref: "#/components/schemas/ID"
individual_id:
$ref: "#/components/schemas/ID"
disabled:
type: boolean
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
organisation_id:
$ref: "#/components/schemas/ID"
organisation:
$ref: "#/components/schemas/Organisation"
individual:
$ref: "#/components/schemas/Individual"
role:
$ref: "#/components/schemas/Role"
# user_settings: TODO
# user_settings_by_name: TODO
# user_settings_by_name_with_fallback: TODO
UserList:
type: array
items:
$ref: "#/components/schemas/User"
# Organisations
OrganisationName:
type: string
OrganisationUrl:
type: string
OrganisationSector:
type: string
nullable: true
OrganisationType:
type: string
nullable: true
OrganisationContacts:
type: string
nullable: true
OrganisationNationality:
type: string
nullable: true
Organisation:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/OrganisationName"
url:
$ref: "#/components/schemas/OrganisationUrl"
nationality:
$ref: "#/components/schemas/OrganisationNationality"
sector:
$ref: "#/components/schemas/OrganisationSector"
type:
$ref: "#/components/schemas/OrganisationType"
contacts:
$ref: "#/components/schemas/OrganisationContacts"
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
tags:
$ref: "#/components/schemas/TagList"
aligments:
$ref: "#/components/schemas/AligmentList"
OrganisationList:
type: array
items:
$ref: "#/components/schemas/Organisation"
# Tags
TagName:
type: string
example: "white"
TagNamespace:
type: string
nullable: true
example: "tlp"
TagPredicate:
type: string
nullable: true
TagValue:
type: string
nullable: true
TagColour:
type: string
example: "FFFFFF"
TagTextColour:
type: string
example: "white"
Tag:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
name:
$ref: "#/components/schemas/TagName"
namespace:
$ref: "#/components/schemas/TagNamespace"
predicate:
$ref: "#/components/schemas/TagPredicate"
value:
$ref: "#/components/schemas/TagValue"
colour:
$ref: "#/components/schemas/TagColour"
text_colour:
$ref: "#/components/schemas/TagTextColour"
counter:
type: integer
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
TagList:
type: array
items:
$ref: "#/components/schemas/Tag"
# Alignments
Alignment:
type: object
AligmentList:
type: array
items:
$ref: "#/components/schemas/Alignment"
# Roles
RoleName:
type: string
maxLength: 255
example: "admin"
Role:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
name:
$ref: "#/components/schemas/RoleName"
is_default:
type: boolean
perm_admin:
type: boolean
perm_sync:
type: boolean
perm_org_admin:
type: boolean
# Inbox
InboxScope:
type: string
enum:
- "User"
- "LocalTool"
- "Brood"
- "Proposal"
- "Synchronisation"
InboxAction:
type: string
enum:
- "Registration"
- "IncomingConnectionRequest"
- "AcceptedRequest"
- "DeclinedRequest"
- "Synchronisation"
- "OneWaySynchronization"
- "ProposalEdit"
- "DataExchange"
InboxTitle:
type: string
InboxOrigin:
type: string
InboxComment:
type: string
nullable: true
InboxDescription:
type: string
nullable: true
Inbox:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
scope:
$ref: "#/components/schemas/InboxScope"
action:
$ref: "#/components/schemas/InboxAction"
title:
$ref: "#/components/schemas/InboxTitle"
origin:
$ref: "#/components/schemas/InboxOrigin"
comment:
$ref: "#/components/schemas/InboxComment"
description:
$ref: "#/components/schemas/InboxDescription"
user_id:
$ref: "#/components/schemas/ID"
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
UserRegistrationInbox:
type: object
allOf:
- $ref: "#/components/schemas/Inbox"
- type: object
properties:
data:
type: object
properties:
email:
type: string
format: email
password:
type: string
user:
$ref: "#/components/schemas/User"
local_tool_connector_name:
type: string
nullable: true
IncomingConnectionRequestInbox:
type: object
allOf:
- $ref: "#/components/schemas/Inbox"
- type: object
properties:
data:
type: object
properties:
connectorName:
type: string
enum:
- "MispConnector"
cerebrateURL:
type: string
example: "http://192.168.0.1"
local_tool_id:
type: integer
remote_tool_id:
type: integer
InboxList:
type: array
items:
anyOf:
- $ref: "#/components/schemas/UserRegistrationInbox"
- $ref: "#/components/schemas/IncomingConnectionRequestInbox"
# SharingGroups
SharingGroupName:
type: string
SharingGroupReleasability:
type: string
SharingGroupDescription:
type: string
SharingGroup:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/SharingGroupName"
releasability:
$ref: "#/components/schemas/SharingGroupReleasability"
description:
$ref: "#/components/schemas/SharingGroupDescription"
organisation_id:
$ref: "#/components/schemas/ID"
user_id:
$ref: "#/components/schemas/ID"
active:
type: boolean
local:
type: boolean
sharing_group_orgs:
type: array
items:
$ref: "#/components/schemas/Organisation"
user:
$ref: "#/components/schemas/User"
organisation:
$ref: "#/components/schemas/Organisation"
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
SharingGroupList:
type: array
items:
$ref: "#/components/schemas/SharingGroup"
# Broods
BroodName:
type: string
BroodDescription:
type: string
BroodUrl:
type: string
BroodIsTrusted:
type: boolean
description: "Trusted upstream source"
BroodIsPull:
type: boolean
description: "Enable pulling of trust information"
Brood:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/BroodName"
url:
$ref: "#/components/schemas/BroodUrl"
description:
$ref: "#/components/schemas/BroodDescription"
organisation_id:
$ref: "#/components/schemas/ID"
trusted:
$ref: "#/components/schemas/BroodIsTrusted"
pull:
$ref: "#/components/schemas/BroodIsPull"
skip_proxy:
type: boolean
authkey:
$ref: "#/components/schemas/AuthKeyRaw"
organisation:
$ref: "#/components/schemas/Organisation"
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
BroodList:
type: array
items:
$ref: "#/components/schemas/Brood"
# EncryptionKeys
EncryptionKeyType:
type: string
enum:
- "pgp"
- "smime"
EncryptionKeyValue:
type: string
example: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----
EncryptionKeyExpiration:
type: integer
description: "UNIX timestamp or null of there is no expiration"
nullable: true
EncryptionKey:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
type:
$ref: "#/components/schemas/EncryptionKeyType"
encryption_key:
$ref: "#/components/schemas/EncryptionKeyValue"
revoked:
type: boolean
expires:
$ref: "#/components/schemas/EncryptionKeyExpiration"
owner_id:
$ref: "#/components/schemas/ID"
owner_model:
$ref: "#/components/schemas/ModelName"
created:
$ref: "#/components/schemas/DateTime"
modified:
$ref: "#/components/schemas/DateTime"
EncryptionKeyList:
type: array
items:
$ref: "#/components/schemas/EncryptionKey"
# AuthKeys
AuthKeyRaw:
type: string
AuthKeyHashed:
type: string
AuthKeyExpiration:
type: integer
description: "0 or UNIX timestamp"
example: 0
AuthKeyCreatedAt:
type: integer
description: "UNIX timestamp"
AuthKeyComment:
type: string
AuthKey:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
uuid:
$ref: "#/components/schemas/UUID"
authkey:
$ref: "#/components/schemas/AuthKeyHashed"
authkey_start:
type: string
example: abcd
authkey_end:
type: string
example: abcd
created:
$ref: "#/components/schemas/AuthKeyCreatedAt"
expiration:
$ref: "#/components/schemas/AuthKeyExpiration"
type: integer
description: "0 or UNIX timestamp"
user_id:
$ref: "#/components/schemas/ID"
comment:
$ref: "#/components/schemas/AuthKeyComment"
user:
$ref: "#/components/schemas/User"
AuthKeyList:
type: array
items:
$ref: "#/components/schemas/AuthKey"
# Errors
ApiError:
type: object
required:
- message
- url
- code
properties:
message:
type: string
url:
type: string
example: "/users"
code:
type: integer
example: 500
UnauthorizedApiError:
type: object
required:
- message
- url
- code
properties:
message:
type: string
example: "Authentication failed. Please make sure you pass the API key of an API enabled user along in the Authorization header."
url:
type: string
example: "/users"
code:
type: integer
example: 403
MethodNotAllowedApiError:
type: object
required:
- message
- url
- code
properties:
message:
type: string
example: "You do not have permission to use this functionality."
url:
type: string
example: "/users/index"
code:
type: integer
example: 405
NotFoundApiError:
type: object
required:
- message
- url
- code
properties:
message:
type: string
example: "Invalid user"
url:
type: string
example: "/users/users/view/1234"
code:
type: integer
example: 404
parameters:
individualId:
name: individualId
in: path
description: "Numeric ID of the User"
required: true
schema:
$ref: "#/components/schemas/ID"
userId:
name: userId
in: path
description: "Numeric ID of the User"
required: true
schema:
$ref: "#/components/schemas/ID"
organisationId:
name: organisationId
in: path
description: "Numeric ID of the Organisation"
required: true
schema:
$ref: "#/components/schemas/ID"
sharingGroupId:
name: sharingGroupId
in: path
description: "Numeric ID of the Sharing Group"
required: true
schema:
$ref: "#/components/schemas/ID"
broodId:
name: broodId
in: path
description: "Numeric ID of the Brood"
required: true
schema:
$ref: "#/components/schemas/ID"
encryptionKeyId:
name: encryptionKeyId
in: path
description: "Numeric ID of the EncryptionKey"
required: true
schema:
$ref: "#/components/schemas/ID"
authKeyId:
name: authKeyId
in: path
description: "Numeric ID of the AuthKey"
required: true
schema:
$ref: "#/components/schemas/ID"
quickFilter:
name: quickFilter
in: query
description: "Quick filter used to match multiple attributes such as name, description, emails, etc."
schema:
type: string
example: "user@example.com"
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: Authorization
description: |
The authorization is performed by using the following header in the HTTP requests:
Authorization: YOUR_API_KEY
requestBodies:
# Individuals
CreateIndividualRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
email:
$ref: "#/components/schemas/Email"
first_name:
$ref: "#/components/schemas/IndividualFirstName"
last_name:
$ref: "#/components/schemas/IndividualLastName"
position:
$ref: "#/components/schemas/IndividualPosition"
EditIndividualRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
email:
$ref: "#/components/schemas/IndividualLastName"
first_name:
$ref: "#/components/schemas/IndividualFirstName"
last_name:
type: boolean
position:
$ref: "#/components/schemas/IndividualPosition"
# Users
CreateUserRequest:
required: true
content:
application/json:
schema:
type: object
properties:
individual_id:
$ref: "#/components/schemas/ID"
organisation_id:
$ref: "#/components/schemas/ID"
role_id:
$ref: "#/components/schemas/ID"
disabled:
type: boolean
username:
$ref: "#/components/schemas/Username"
password:
type: string
EditUserRequest:
required: true
content:
application/json:
schema:
type: object
properties:
id:
$ref: "#/components/schemas/ID"
individual_id:
$ref: "#/components/schemas/ID"
organisation_id:
$ref: "#/components/schemas/ID"
role_id:
$ref: "#/components/schemas/ID"
disabled:
type: boolean
username:
$ref: "#/components/schemas/Username"
password:
type: string
# Organisations
CreateOrganisationRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/OrganisationName"
url:
$ref: "#/components/schemas/OrganisationUrl"
nationality:
$ref: "#/components/schemas/OrganisationNationality"
sector:
$ref: "#/components/schemas/OrganisationSector"
type:
$ref: "#/components/schemas/OrganisationType"
contacts:
$ref: "#/components/schemas/OrganisationContacts"
EditOrganisationRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/OrganisationName"
url:
$ref: "#/components/schemas/OrganisationUrl"
nationality:
$ref: "#/components/schemas/OrganisationNationality"
sector:
$ref: "#/components/schemas/OrganisationSector"
type:
$ref: "#/components/schemas/OrganisationType"
contacts:
$ref: "#/components/schemas/OrganisationContacts"
TagOrganisationRequest:
required: true
content:
application/json:
schema:
type: object
properties:
tag_list:
type: string
description: "Stringified JSON array of the tag names to add."
example: '["red"]'
UntagOrganisationRequest:
required: true
content:
application/json:
schema:
type: object
properties:
tag_list:
type: string
description: "Stringified JSON array of the tag names to remove."
example: '["red"]'
# Inbox
CreateUserRegistrationInboxEntryRequest:
description: "Create user registration inbox entry request"
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
password:
type: string
# SharingGroups
CreateSharingGroupRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/SharingGroupName"
releasability:
$ref: "#/components/schemas/SharingGroupReleasability"
description:
$ref: "#/components/schemas/SharingGroupDescription"
organisation_id:
$ref: "#/components/schemas/ID"
user_id:
$ref: "#/components/schemas/ID"
active:
type: boolean
local:
type: boolean
EditSharingGroupRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/SharingGroupName"
releasability:
$ref: "#/components/schemas/SharingGroupReleasability"
description:
$ref: "#/components/schemas/SharingGroupDescription"
organisation_id:
$ref: "#/components/schemas/ID"
user_id:
$ref: "#/components/schemas/ID"
active:
type: boolean
local:
type: boolean
# Broods
CreateBroodRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/BroodName"
url:
$ref: "#/components/schemas/BroodUrl"
description:
$ref: "#/components/schemas/BroodDescription"
organisation_id:
$ref: "#/components/schemas/ID"
trusted:
$ref: "#/components/schemas/BroodIsTrusted"
pull:
$ref: "#/components/schemas/BroodIsPull"
skip_proxy:
type: boolean
authkey:
$ref: "#/components/schemas/AuthKeyRaw"
EditBroodRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
name:
$ref: "#/components/schemas/BroodName"
url:
$ref: "#/components/schemas/BroodUrl"
description:
$ref: "#/components/schemas/BroodDescription"
organisation_id:
$ref: "#/components/schemas/ID"
trusted:
$ref: "#/components/schemas/BroodIsTrusted"
pull:
$ref: "#/components/schemas/BroodIsPull"
skip_proxy:
type: boolean
authkey:
$ref: "#/components/schemas/AuthKeyRaw"
CreateEncryptionKeyRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
type:
$ref: "#/components/schemas/EncryptionKeyType"
encryption_key:
$ref: "#/components/schemas/EncryptionKeyValue"
revoked:
type: boolean
expires:
$ref: "#/components/schemas/EncryptionKeyExpiration"
owner_id:
$ref: "#/components/schemas/ID"
owner_model:
$ref: "#/components/schemas/ModelName"
EditEncryptionKeyRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
type:
$ref: "#/components/schemas/EncryptionKeyType"
encryption_key:
$ref: "#/components/schemas/EncryptionKeyValue"
revoked:
type: boolean
expires:
$ref: "#/components/schemas/EncryptionKeyExpiration"
owner_id:
$ref: "#/components/schemas/ID"
owner_model:
$ref: "#/components/schemas/ModelName"
# AuthKeys
CreateAuthKeyRequest:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
$ref: "#/components/schemas/UUID"
authkey:
$ref: "#/components/schemas/AuthKeyRaw"
expiration:
$ref: "#/components/schemas/AuthKeyExpiration"
user_id:
$ref: "#/components/schemas/ID"
comment:
$ref: "#/components/schemas/AuthKeyComment"
responses:
# Individuals
IndividualResponse:
description: "Individual response"
content:
application/json:
schema:
$ref: "#/components/schemas/Individual"
IndividualListResponse:
description: "Individuals list response"
content:
application/json:
schema:
$ref: "#/components/schemas/IndividualList"
# Users
UserResponse:
description: "User response"
content:
application/json:
schema:
$ref: "#/components/schemas/User"
UserListResponse:
description: "Users list response"
content:
application/json:
schema:
$ref: "#/components/schemas/UserList"
# Organisations
OrganisationResponse:
description: "Organisation response"
content:
application/json:
schema:
$ref: "#/components/schemas/Organisation"
OrganisationListResponse:
description: "Organisations list response"
content:
application/json:
schema:
$ref: "#/components/schemas/OrganisationList"
# Tags
TagResponse:
description: "Tag response"
content:
application/json:
schema:
$ref: "#/components/schemas/Tag"
TagListResponse:
description: "Tags list response"
content:
application/json:
schema:
$ref: "#/components/schemas/TagList"
# Inbox
UserRegistrationInboxResponse:
description: "User registration inbox response"
content:
application/json:
schema:
$ref: "#/components/schemas/UserRegistrationInbox"
IncomingConnectionRequestInboxResponse:
description: "Incoming connection request inbox response"
content:
application/json:
schema:
$ref: "#/components/schemas/IncomingConnectionRequestInbox"
InboxListResponse:
description: "Inbox list response"
content:
application/json:
schema:
$ref: "#/components/schemas/InboxList"
CreateUserRegistrationInboxEntryResponse:
description: "Inbox response"
content:
application/json:
schema:
type: object
properties:
data:
allOf:
- $ref: "#/components/schemas/UserRegistrationInbox"
- properties:
local_tool_connector_name:
type: string
nullable: true
success:
type: boolean
message:
type: string
example: "User account creation requested. Please wait for an admin to approve your account."
errors:
type: array
items:
type: object
# TODO: describe
# SharingGroups
SharingGroupResponse:
description: "Sharing group response"
content:
application/json:
schema:
$ref: "#/components/schemas/SharingGroup"
SharingGroupListResponse:
description: "Sharing groups list response"
content:
application/json:
schema:
$ref: "#/components/schemas/SharingGroupList"
# Broods
BroodResponse:
description: "Brood response"
content:
application/json:
schema:
$ref: "#/components/schemas/Brood"
BroodListResponse:
description: "Brood list response"
content:
application/json:
schema:
$ref: "#/components/schemas/BroodList"
TestBroodConnectionResponse:
description: "Brood list response"
content:
application/json:
schema:
type: object
properties:
code:
type: integer
description: "HTTP status code"
example: 200
response:
type: object
properties:
version:
type: string
example: "0.1"
application:
type: string
example: "Cerebrate"
user:
type: string
example: "sync"
ping:
type: number
format: float
# EncryptionKeys
EncryptionKeyResponse:
description: "Encryption key response"
content:
application/json:
schema:
$ref: "#/components/schemas/EncryptionKey"
EncryptionKeyListResponse:
description: "Encryption key list response"
content:
application/json:
schema:
$ref: "#/components/schemas/EncryptionKeyList"
# AuthKeys
AuthKeyResponse:
description: "Auth key response"
content:
application/json:
schema:
$ref: "#/components/schemas/AuthKey"
AuthKeyListResponse:
description: "Auth key list response"
content:
application/json:
schema:
$ref: "#/components/schemas/AuthKeyList"
# Errors
ApiErrorResponse:
description: "Unexpected API error"
content:
application/json:
schema:
$ref: "#/components/schemas/ApiError"
UnauthorizedApiErrorResponse:
description: "Authentication failed. Please make sure you pass the API key of an API enabled user along in the Authorization header."
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedApiError"
MethodNotAllowedApiErrorResponse:
description: "Method not allowed. Your User Role is not allowed to access this resource."
content:
application/json:
schema:
$ref: "#/components/schemas/MethodNotAllowedApiError"
security:
- ApiKeyAuth: []