-
-
Notifications
You must be signed in to change notification settings - Fork 43
/
ApplicationConfigurationValidator.cs
83 lines (64 loc) · 2.65 KB
/
ApplicationConfigurationValidator.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
using System;
using System.Linq;
using System.Net;
using FluentValidation;
namespace SharedLibraryCore.Configuration.Validation
{
/// <summary>
/// Validation class for main application configuration
/// </summary>
public class ApplicationConfigurationValidator : AbstractValidator<ApplicationConfiguration>
{
public ApplicationConfigurationValidator()
{
RuleFor(_app => _app.WebfrontBindUrl)
.NotEmpty();
RuleFor(_app => _app.CustomSayName)
.NotEmpty()
.When(_app => _app.EnableCustomSayName);
RuleFor(_app => _app.SocialLinkAddress)
.NotEmpty()
.When(_app => _app.EnableSocialLink);
RuleFor(_app => _app.SocialLinkTitle)
.NotEmpty()
.When(_app => _app.EnableSocialLink);
RuleFor(_app => _app.CustomParserEncoding)
.NotEmpty()
.When(_app => _app.EnableCustomParserEncoding);
RuleFor(_app => _app.WebfrontConnectionWhitelist)
.NotEmpty()
.When(_app => _app.EnableWebfrontConnectionWhitelist);
RuleForEach(_app => _app.WebfrontConnectionWhitelist)
.Must(_address => IPAddress.TryParse(_address, out _));
RuleFor(_app => _app.CustomLocale)
.NotEmpty()
.When(_app => _app.EnableCustomLocale);
RuleFor(_app => _app.DatabaseProvider)
.NotEmpty()
.Must(_provider => new[] { "sqlite", "mysql", "postgresql" }.Contains(_provider));
RuleFor(_app => _app.ConnectionString)
.NotEmpty()
.When(_app => _app.DatabaseProvider != "sqlite");
RuleFor(_app => _app.RConPollRate)
.GreaterThanOrEqualTo(1000);
RuleFor(_app => _app.AutoMessagePeriod)
.GreaterThanOrEqualTo(60);
RuleFor(_app => _app.Servers)
.NotEmpty();
RuleFor(_app => _app.AutoMessages)
.NotNull();
RuleFor(_app => _app.GlobalRules)
.NotNull();
RuleFor(_app => _app.MasterUrl)
.NotNull()
.Must(_url => _url != null && (_url.Scheme == Uri.UriSchemeHttp || _url.Scheme == Uri.UriSchemeHttps));
RuleFor(_app => _app.CommandPrefix)
.NotEmpty();
RuleFor(_app => _app.BroadcastCommandPrefix)
.NotEmpty();
RuleForEach(_app => _app.Servers)
.NotEmpty()
.SetValidator(new ServerConfigurationValidator());
}
}
}