sh0rt.kr-pdns/README.md
2024-07-19 12:56:21 +09:00

899 lines
16 KiB
Markdown

# Cloudflare compatible PowerDNS API Server
[![Discord](https://img.shields.io/discord/630271953806295051)](https://discord.gg/EPnCfz7xx5) [![Build Status](https://teamcity.mori.space/app/rest/builds/buildType:PdnsApi_Build/statusIcon)](https://teamcity.mori.space/project/PdnsApi)
> Version v1.0.0
## env Table
| name | value |
| --- |-----------------------------------------------------------------------|
| DB_HOST | database host (mysql/mariadb) |
| DB_PORT | database port (3306) |
| DB_NAME | database name |
| DB_USER | database connect user |
| DB_PASSWORD | database connect password |
| PDNS_API_KEY | PowerDNS Auth API Key |
| PDNS_API_URL | PowerDNS HTTP API URL (contain host, port ex: http://pdns:8081) |
| PDNS_NS | Nameserver addresses with comma splitted. (ns1.sh0rt.kr,ns2.sh0rt.kr) |
## Path Table
| Method | Path | Description |
| --- | --- | --- |
| GET | [/zones](#getzones) | Get all domains |
| POST | [/zones](#postzones) | Create domain |
| GET | [/zones/{zone_id}/dns_records](#getzoneszone_iddns_records) | Get all records |
| POST | [/zones/{zone_id}/dns_records](#postzoneszone_iddns_records) | Add Record by ID |
| GET | [/zones/{zone_id}/dns_records/{dns_record_id}](#getzoneszone_iddns_recordsdns_record_id) | Get Record by ID |
| DELETE | [/zones/{zone_id}/dns_records/{dns_record_id}](#deletezoneszone_iddns_recordsdns_record_id) | Remove Record by ID |
| PUT | [/zones/{zone_id}/dns_records/{dns_record_id}](#putzoneszone_iddns_recordsdns_record_id) | Update Record by ID |
| GET | [/zones/{cfid}](#getzonescfid) | Get domain |
| DELETE | [/zones/{domain_id}](#deletezonesdomain_id) | Delete domain |
## Reference Table
| Name | Path | Description |
| --- | --- | --- |
| DomainRequestDTO | [#/components/schemas/DomainRequestDTO](#componentsschemasdomainrequestdto) | Request DTO for Domain |
| ApiResponseDTO | [#/components/schemas/ApiResponseDTO](#componentsschemasapiresponsedto) | |
| ErrorOrMessage | [#/components/schemas/ErrorOrMessage](#componentsschemaserrorormessage) | |
| ApiResponseDTODomainResponseDTO | [#/components/schemas/ApiResponseDTODomainResponseDTO](#componentsschemasapiresponsedtodomainresponsedto) | |
| DomainResponseDTO | [#/components/schemas/DomainResponseDTO](#componentsschemasdomainresponsedto) | Response DTO for Domain |
| RecordRequestDTO | [#/components/schemas/RecordRequestDTO](#componentsschemasrecordrequestdto) | Request DTO for Record |
| ApiResponseDTORecordResponseDTO | [#/components/schemas/ApiResponseDTORecordResponseDTO](#componentsschemasapiresponsedtorecordresponsedto) | |
| RecordResponseDTO | [#/components/schemas/RecordResponseDTO](#componentsschemasrecordresponsedto) | Response DTO for Record |
| ApiResponseDTOListDomainResponseDTO | [#/components/schemas/ApiResponseDTOListDomainResponseDTO](#componentsschemasapiresponsedtolistdomainresponsedto) | |
| ApiResponseDTOListRecordResponseDTO | [#/components/schemas/ApiResponseDTOListRecordResponseDTO](#componentsschemasapiresponsedtolistrecordresponsedto) | |
| ApiResponseDTODeleteResponseWithId | [#/components/schemas/ApiResponseDTODeleteResponseWithId](#componentsschemasapiresponsedtodeleteresponsewithid) | |
| DeleteResponseWithId | [#/components/schemas/DeleteResponseWithId](#componentsschemasdeleteresponsewithid) | |
| api token | [#/components/securitySchemes/api token](#componentssecurityschemesapi-token) | |
## Path Details
***
### [GET]/zones
- Summary
Get all domains
#### Responses
- 200 Returns all domains
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Domain
result: {
// Domain CFID
id: string
// Domain name(TLD)
name: string
}[]
}
```
- 404 Returns not found
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [POST]/zones
- Summary
Create domain
#### RequestBody
- application/json
```ts
// Request DTO for Domain
{
// Domain name(TLD)
name: string
}
```
#### Responses
- 200 Created domain
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Domain
result: {
// Domain CFID
id: string
// Domain name(TLD)
name: string
}
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [GET]/zones/{zone_id}/dns_records
- Summary
Get all records
#### Responses
- 200 Return All Records
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Record
result: {
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}[]
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [POST]/zones/{zone_id}/dns_records
- Summary
Add Record by ID
#### RequestBody
- application/json
```ts
// Request DTO for Record
{
// Record type
type: string
// Host name
name: string
// Record data
content: string
// TTL (Time to Live)
ttl: integer
// Priority
priority?: integer
// Proxied: cloudflare api compatibility
proxied: boolean
// comment
comment: string
}
```
#### Responses
- 200 Return Record
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Record
result: {
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [GET]/zones/{zone_id}/dns_records/{dns_record_id}
- Summary
Get Record by ID
#### Responses
- 200 Return Record
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Record
result: {
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [DELETE]/zones/{zone_id}/dns_records/{dns_record_id}
- Summary
Remove Record by ID
#### Responses
- 200 Return Record
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
id: string
}
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [PUT]/zones/{zone_id}/dns_records/{dns_record_id}
- Summary
Update Record by ID
#### RequestBody
- application/json
```ts
// Request DTO for Record
{
// Record type
type: string
// Host name
name: string
// Record data
content: string
// TTL (Time to Live)
ttl: integer
// Priority
priority?: integer
// Proxied: cloudflare api compatibility
proxied: boolean
// comment
comment: string
}
```
#### Responses
- 200 Return Record
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Record
result: {
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [GET]/zones/{cfid}
- Summary
Get domain
#### Responses
- 200 Returns domain
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Domain
result: {
// Domain CFID
id: string
// Domain name(TLD)
name: string
}
}
```
- 404 Returns not found
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
***
### [DELETE]/zones/{domain_id}
- Summary
Delete domain
#### Responses
- 200 Deleted domain
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
id: string
}
}
```
- 400 Bad request
`application/json`
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
## References
### #/components/schemas/DomainRequestDTO
```ts
// Request DTO for Domain
{
// Domain name(TLD)
name: string
}
```
### #/components/schemas/ApiResponseDTO
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
}
}
```
### #/components/schemas/ErrorOrMessage
```ts
{
code: integer
message: string
}
```
### #/components/schemas/ApiResponseDTODomainResponseDTO
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Domain
result: {
// Domain CFID
id: string
// Domain name(TLD)
name: string
}
}
```
### #/components/schemas/DomainResponseDTO
```ts
// Response DTO for Domain
{
// Domain CFID
id: string
// Domain name(TLD)
name: string
}
```
### #/components/schemas/RecordRequestDTO
```ts
// Request DTO for Record
{
// Record type
type: string
// Host name
name: string
// Record data
content: string
// TTL (Time to Live)
ttl: integer
// Priority
priority?: integer
// Proxied: cloudflare api compatibility
proxied: boolean
// comment
comment: string
}
```
### #/components/schemas/ApiResponseDTORecordResponseDTO
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Record
result: {
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}
}
```
### #/components/schemas/RecordResponseDTO
```ts
// Response DTO for Record
{
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}
```
### #/components/schemas/ApiResponseDTOListDomainResponseDTO
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Domain
result: {
// Domain CFID
id: string
// Domain name(TLD)
name: string
}[]
}
```
### #/components/schemas/ApiResponseDTOListRecordResponseDTO
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
// Response DTO for Record
result: {
// Record ID
id: string
// Record type
type: string
// Record name
name: string
// Record content
content: string
// Zone(TLD) ID
zoneId: string
// Zone name(TLD)
zoneName: string
// Record creation time
createdOn: string
// Record modification time
modifiedOn: string
// Record priority
priority?: integer
// is proxyable: must false
proxiable: boolean
// is proxied: must false
proxied: boolean
// Record TTL
ttl: integer
// Record is locked: must false
locked: boolean
// Record comments
comment?: string
}[]
}
```
### #/components/schemas/ApiResponseDTODeleteResponseWithId
```ts
{
success: boolean
errors: {
code: integer
message: string
}[]
messages:#/components/schemas/ErrorOrMessage[]
result: {
id: string
}
}
```
### #/components/schemas/DeleteResponseWithId
```ts
{
id: string
}
```
### #/components/securitySchemes/api token
```ts
{
"type": "http",
"scheme": "bearer"
}
```