openapi: '3.0.0' info: description: '' version: 0.1.0-dev title: Nomilo components: securitySchemes: ApiToken: type: http scheme: bearer bearerFormat: JWT parameters: ZoneName: name: zone in: path schema: type: string required: true schemas: UserRequest: type: object required: - username - password - email properties: username: type: string password: type: string email: type: string role: type: string enum: - admin - zoneadmin TokenRequest: type: object required: - username - password properties: username: type: string password: type: string TokenResponse: type: object required: - token properties: token: type: string AddZoneMemberRequest: type: object required: - id properties: id: type: string CreateZoneRequest: type: object required: - name properties: name: type: string Zone: type: object required: - name properties: name: type: string ZoneList: type: array items: $ref: '#/components/schemas/Zone' RecordBase: type: object required: - Name - Class - TTL - Type properties: Name: type: string Class: type: string enum: - IN - CH - HS - NONE - ANY TTL: type: integer Type: type: string RecordTypeA: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Address properties: Address: type: string RecordTypeAAAA: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Address properties: Address: type: string RecordTypeCAA: type: object allOf: - $ref: '#/components/schemas/RecordBase' required: - IssuerCritical - Value - PropertyTag properties: IssuerCritical: type: boolean Value: type: string PropertyTag: type: string RecordTypeCNAME: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Target properties: Target: type: string RecordTypeMX: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Preference - MailExchanger properties: Preference: type: integer MailExchanger: type: string RecordTypeNS: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Target properties: Target: type: string RecordTypePTR: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Target properties: Target: type: string RecordTypeSOA: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - MasterServerName - MaintainerName - Refresh - Retry - Expire - Minimum - Serial properties: MasterServerName: type: string MaintainerName: type: string Refresh: type: integer Retry: type: integer Expire: type: integer Minimum: type: integer Serial: type: integer RecordTypeSRV: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Server - Port - Priority - Weight properties: Server: type: string Port: type: integer Priority: type: integer Weight: type: integer RecordTypeSSHFP: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Algorithm - DigestType - Fingerprint properties: Algorithm: type: integer DigestType: type: integer Fingerprint: type: string RecordTypeTXT: type: object allOf: - $ref: '#/components/schemas/RecordBase' - type: object required: - Text properties: Text: type: string Record: type: object oneOf: - $ref: '#/components/schemas/RecordTypeA' - $ref: '#/components/schemas/RecordTypeAAAA' - $ref: '#/components/schemas/RecordTypeCAA' - $ref: '#/components/schemas/RecordTypeCNAME' - $ref: '#/components/schemas/RecordTypeMX' - $ref: '#/components/schemas/RecordTypeNS' - $ref: '#/components/schemas/RecordTypePTR' - $ref: '#/components/schemas/RecordTypeSOA' - $ref: '#/components/schemas/RecordTypeSRV' - $ref: '#/components/schemas/RecordTypeSSHFP' - $ref: '#/components/schemas/RecordTypeTXT' discriminator: propertyName: Type mapping: A: '#/components/schemas/RecordTypeA' AAAA: '#/components/schemas/RecordTypeAAAA' CAA: '#/components/schemas/RecordTypeCAA' CNAME: '#/components/schemas/RecordTypeCNAME' MX: '#/components/schemas/RecordTypeMX' NS: '#/components/schemas/RecordTypeNS' PTR: '#/components/schemas/RecordTypePTR' SOA: '#/components/schemas/RecordTypeSOA' SRV: '#/components/schemas/RecordTypeSRV' SSHFP: '#/components/schemas/RecordTypeSSHFP' TXT: '#/components/schemas/RecordTypeTXT' RecordList: type: array items: $ref: '#/components/schemas/Record' paths: '/users': post: requestBody: content: application/json: schema: $ref: '#/components/schemas/UserRequest' responses: '201': description: '' '/users/me/token': post: requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenRequest' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/TokenResponse' '/zones': get: security: - ApiToken: [] responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ZoneList' post: security: - ApiToken: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateZoneRequest' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Zone' '/zones/{zone}/members': parameters: - $ref: '#/components/parameters/ZoneName' post: security: - ApiToken: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AddZoneMemberRequest' responses: '201': description: '' '/zones/{zone}/records': parameters: - $ref: '#/components/parameters/ZoneName' get: security: - ApiToken: [] responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/RecordList' post: security: - ApiToken: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/RecordList' responses: '200': description: ''