-
Notifications
You must be signed in to change notification settings - Fork 1
/
YandexDnsApiService.cs
143 lines (121 loc) · 5.98 KB
/
YandexDnsApiService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using YandexDnsAPI.APIModels;
using YandexDnsAPI.APIModels.Response;
using YandexDnsAPI.Enums;
using YandexDnsAPI.Helpers;
using YandexDnsAPI.Models.Request;
using YandexDnsAPI.Models.Response;
namespace YandexDnsAPI.Services
{
public static class YandexDnsApiService
{
private static readonly string AddDnsEndpoint = "https://pddimp.yandex.ru/api2/admin/dns/add";
private static readonly string GetDnsEndpoint = "https://pddimp.yandex.ru/api2/admin/dns/list?domain=";
private static readonly string EditDnsEndpoint = "https://pddimp.yandex.ru/api2/admin/dns/edit";
private static readonly string DeleteDnsEndpoint = "https://pddimp.yandex.ru/api2/admin/dns/del";
public static async Task<RecordResponseModel> AddDnsRecord(AddDnsRequestModel request)
{
request.Validate();
var parameters = new Dictionary<string, string>();
parameters.Add(ApiParameters.Domain, request.DomainContent.Domain);
parameters.Add(ApiParameters.Content, request.DomainContent.Content);
parameters.Add(ApiParameters.Type, DnsSource.DnsTypes[request.DomainContent.Type]);
AddIfNotEmpty(request.AdminEmail, ApiParameters.AdminEmail, parameters);
AddIfNotEmpty(request.Port, ApiParameters.Port, parameters);
AddIfNotEmpty(request.Target, ApiParameters.Target, parameters);
AddIfNotEmpty(request.DomainContent.SubDomain, ApiParameters.SubDomain, parameters);
AddIfNotNull(request.DomainContent.Priority, ApiParameters.Priority, parameters);
AddIfNotNull(request.Weight, ApiParameters.Weight, parameters);
AddIfNotNull(request.DomainContent.TTL, ApiParameters.TTL, parameters);
var response = await HttpHelper.RequestPostAsync<AddDnsResponseApiModel>(AddDnsEndpoint, request.Token, parameters);
ValidationHelper.ThrowIfNull(response);
if (response.success == SuccessStates.Ok)
{
return RecordResponseModel.FromApiModel(response.record);
}
else
{
throw new ApplicationException(response.error);
}
}
public static async Task<IEnumerable<RecordResponseModel>> GetDnsRecord(GetDnsRequestModel request)
{
request.Validate();
var uri = GetDnsEndpoint + request.Domain;
var response = await HttpHelper.RequestGetAsync<GetDnsResponseApiModel>(uri, request.Token);
ValidationHelper.ThrowIfNull(response);
if (response.success == SuccessStates.Ok)
{
return response.records.Select(x => RecordResponseModel.FromApiModel(x));
}
else
{
throw new ApplicationException(response.error);
}
}
public static async Task<RecordResponseModel> EditDnsRecord(EditDnsRequestModel request)
{
request.Validate();
var parameters = new Dictionary<string, string>();
parameters.Add(ApiParameters.Domain, request.DomainContent.Domain);
parameters.Add(ApiParameters.RecordId, request.RecordId.ToString());
AddIfNotEmpty(request.DomainContent.SubDomain, ApiParameters.SubDomain, parameters);
AddIfNotEmpty(request.DomainContent.Content, ApiParameters.Content, parameters);
AddIfNotEmpty(request.AdminEmail, ApiParameters.AdminEmail, parameters);
AddIfNotEmpty(request.Port, ApiParameters.Port, parameters);
AddIfNotEmpty(request.Target, ApiParameters.Target, parameters);
AddIfNotNull(request.DomainContent.TTL, ApiParameters.TTL, parameters);
AddIfNotNull(request.Refresh, ApiParameters.Refresh, parameters);
AddIfNotNull(request.Retry, ApiParameters.Retry, parameters);
AddIfNotNull(request.Expire, ApiParameters.Expire, parameters);
AddIfNotNull(request.NegCache, ApiParameters.NegCache, parameters);
AddIfNotNull(request.DomainContent.Priority, ApiParameters.Priority, parameters);
AddIfNotNull(request.Weight, ApiParameters.Weight, parameters);
var response = await HttpHelper.RequestPostAsync<EditDnsResponseApiModel>(EditDnsEndpoint, request.Token, parameters);
ValidationHelper.ThrowIfNull(response);
if (response.success == SuccessStates.Ok)
{
return RecordResponseModel.FromApiModel(response.record);
}
else
{
throw new ApplicationException(response.error);
}
}
public static async Task<int> DeleteDnsRecord(DeleteDnsRequestModel request)
{
request.Validate();
var parameters = new Dictionary<string, string>();
parameters.Add(ApiParameters.Domain, request.Domain);
parameters.Add(ApiParameters.RecordId, request.RecordId.ToString());
var response = await HttpHelper.RequestPostAsync<DeleteDnsResponseApiModel>(DeleteDnsEndpoint, request.Token, parameters);
ValidationHelper.ThrowIfNull(response);
if (response.success == SuccessStates.Ok)
{
ValidationHelper.ThrowIfNull(response.record_id);
return response.record_id.Value;
}
else
{
throw new ApplicationException(response.error);
}
}
private static void AddIfNotEmpty(string value, string key, Dictionary<string, string> parameters)
{
if (!string.IsNullOrEmpty(value))
{
parameters.Add(key, value);
}
}
private static void AddIfNotNull(int? value, string key, Dictionary<string, string> parameters)
{
if (value.HasValue)
{
parameters.Add(key, value.Value.ToString());
}
}
}
}