forked from OrchardCMS/OrchardCore
/
TenantSetupOptions.cs
152 lines (126 loc) · 5.33 KB
/
TenantSetupOptions.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
144
145
146
147
148
149
150
151
152
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using OrchardCore.Data;
using OrchardCore.Environment.Shell;
namespace OrchardCore.AutoSetup.Options
{
using System.Text.RegularExpressions;
/// <summary>
/// The tenant setup options.
/// </summary>
public class TenantSetupOptions
{
/// <summary>
/// The Shell Name
/// </summary>
public string ShellName { get; set; }
/// <summary>
/// Gets or sets the user friendly Tenant/Site Name.
/// </summary>
public string SiteName { get; set; }
/// <summary>
/// Gets or sets the admin username.
/// </summary>
public string AdminUsername { get; set; }
/// <summary>
/// Gets or sets the admin email.
/// </summary>
public string AdminEmail { get; set; }
/// <summary>
/// Gets or sets the admin password.
/// </summary>
public string AdminPassword { get; set; }
/// <summary>
/// Gets or sets the database provider.
/// </summary>
public DatabaseProviderName DatabaseProvider { get; set; }
/// <summary>
/// Gets or sets the database connection string.
/// </summary>
public string DatabaseConnectionString { get; set; }
/// <summary>
/// Gets or sets the database table prefix.
/// </summary>
public string DatabaseTablePrefix { get; set; }
/// <summary>
/// Gets or sets the recipe name.
/// </summary>
public string RecipeName { get; set; }
/// <summary>
/// Gets or sets the site time zone.
/// </summary>
public string SiteTimeZone { get; set; }
/// <summary>
/// Gets or sets the tenants request url host.
/// </summary>
public string RequestUrlHost { get; set; }
/// <summary>
/// Gets or sets the tenant request url prefix.
/// </summary>
public string RequestUrlPrefix { get; set; }
/// <summary>
/// Gets the Flag which indicates a Default/Root shell/tenant.
/// </summary>
public bool IsDefault => ShellName == ShellHelper.DefaultShellName;
/// <summary>
/// Error Message Format
/// </summary>
private readonly string RequiredErrorMessageFormat = "The {0} field is required.";
/// <summary>
/// Tenant validation.
/// </summary>
/// <param name="validationContext"> The validation context. </param>
/// <returns> The collection of errors. </returns>
public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (String.IsNullOrEmpty(ShellName) || !Regex.IsMatch(ShellName, @"^\w+$"))
{
yield return new ValidationResult("ShellName Can not be empty and must contain characters only and no spaces.");
}
if (!IsDefault && String.IsNullOrWhiteSpace(RequestUrlPrefix) && String.IsNullOrWhiteSpace(RequestUrlHost))
{
yield return new ValidationResult("RequestUrlPrefix or RequestUrlHost should be provided for no Default Tenant");
}
if (!String.IsNullOrWhiteSpace(RequestUrlPrefix) && RequestUrlPrefix.Contains('/'))
{
yield return new ValidationResult("The RequestUrlPrefix can not contain more than one segment.");
}
if (String.IsNullOrWhiteSpace(SiteName))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(SiteName)));
}
if (String.IsNullOrWhiteSpace(AdminUsername))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(AdminUsername)));
}
if (String.IsNullOrWhiteSpace(AdminEmail))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(AdminEmail)));
}
if (String.IsNullOrWhiteSpace(AdminPassword))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(AdminPassword)));
}
var selectedProvider = validationContext.GetServices<DatabaseProvider>().FirstOrDefault(x => x.Value == DatabaseProvider);
if (selectedProvider == null)
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(DatabaseProvider)));
}
if (selectedProvider != null && selectedProvider.HasConnectionString && String.IsNullOrWhiteSpace(DatabaseConnectionString))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(DatabaseConnectionString)));
}
if (String.IsNullOrWhiteSpace(RecipeName))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(RecipeName)));
}
if (String.IsNullOrWhiteSpace(SiteTimeZone))
{
yield return new ValidationResult(String.Format(RequiredErrorMessageFormat, nameof(SiteTimeZone)));
}
}
}
}