@@ -162,6 +162,7 @@ protected function generateCaddyfile(): void
162
162
{
163
163
$ getAllDomains = Domain::whereNot ('status ' , '<=> ' , 'broken ' )->get ();
164
164
$ caddyBlocks = [];
165
+ $ wildcardGroups = [];
165
166
166
167
// Get Apache port settings (non-SSL ports for proxying)
167
168
$ apacheHttpPort = setting ('caddy.apache_proxy_port ' ) ?? setting ('general.apache_http_port ' ) ?? '8080 ' ;
@@ -174,45 +175,60 @@ protected function generateCaddyfile(): void
174
175
$ cloudflareApiToken = setting ('caddy.cloudflare_api_token ' );
175
176
$ zeroSSlApiToken = setting ('caddy.zerossl_api_token ' );
176
177
177
- foreach ($ getAllDomains as $ domain ) {
178
- $ isBroken = false ;
178
+ // Check if wildcard is enabled
179
+ $ useWildcard = setting ('caddy.enable_wildcard_ssl ' , false );
180
+ $ wildcardDomainSetting = setting ('caddy.wildcard_domain ' );
179
181
182
+ // First pass - create regular blocks and identify wildcard subdomains
183
+ foreach ($ getAllDomains as $ domain ) {
180
184
if ($ domain ->status === 'broken ' ) {
181
185
continue ;
182
186
}
183
187
184
188
// Check if domain is valid
185
189
if (!filter_var ($ domain ->domain , FILTER_VALIDATE_DOMAIN )) {
186
- $ isBroken = true ;
187
- }
188
-
189
- if ($ isBroken ) {
190
190
continue ;
191
191
}
192
+
192
193
$ domainLog = '/var/log/caddy/ ' . $ domain ->domain . '.log ' ;
193
194
shell_exec ("chown caddy:caddy '/var/log/caddy/ " );
194
195
shell_exec ("chmod -R 777 /var/log/caddy/ " );
195
196
196
-
197
197
shell_exec ("sudo setfacl -R -m u:caddy:rx " . $ domain ->document_root );
198
198
shell_exec ("sudo setfacl -R -m u:caddy:rx " . $ domain ->domain_public );
199
199
shell_exec ("sudo setfacl -R -m u:caddy:rx " . $ domain ->home_root );
200
200
201
-
202
201
// Set permissions for Caddy to access user directories
203
202
shell_exec ("chmod o+x {$ domain ->home_root }" );
204
203
shell_exec ("chmod -R o+rX {$ domain ->document_root }" );
205
204
206
-
207
205
if (!file_exists ($ domainLog )) {
208
206
// Create log file for the domain if it doesn't exist
209
207
touch ($ domainLog );
210
208
shell_exec ("chown caddy:caddy {$ domainLog }" );
211
209
shell_exec ("chmod 777 {$ domainLog }" );
212
210
}
213
211
212
+ // Check if this domain belongs under a wildcard
213
+ $ isWildcardSubdomain = false ;
214
+ $ parentDomain = null ;
215
+
216
+ if ($ useWildcard && $ cloudflareApiToken && !empty ($ wildcardDomainSetting )) {
217
+ if (strpos ($ domain ->domain , '. ' . $ wildcardDomainSetting ) !== false &&
218
+ substr_count ($ domain ->domain , '. ' ) > substr_count ($ wildcardDomainSetting , '. ' )) {
219
+ $ isWildcardSubdomain = true ;
220
+ $ parentDomain = $ wildcardDomainSetting ;
221
+
222
+ // Add to wildcard group
223
+ if (!isset ($ wildcardGroups [$ parentDomain ])) {
224
+ $ wildcardGroups [$ parentDomain ] = [];
225
+ }
226
+ $ wildcardGroups [$ parentDomain ][] = $ this ->createCaddyBlock ($ domain , $ apacheHttpPort );
227
+ continue ;
228
+ }
229
+ }
214
230
215
- // Create Caddy block for SSL termination and proxy to Apache
231
+ // Non-wildcard domain, create regular block
216
232
$ caddyBlock = $ this ->createCaddyBlock ($ domain , $ apacheHttpPort );
217
233
if ($ caddyBlock ) {
218
234
$ caddyBlocks [] = $ caddyBlock ;
@@ -228,6 +244,16 @@ protected function generateCaddyfile(): void
228
244
}
229
245
}
230
246
247
+ // Add wildcard groups to the blocks list
248
+ foreach ($ wildcardGroups as $ parentDomain => $ subdomains ) {
249
+ $ caddyBlocks [] = [
250
+ 'is_wildcard_group ' => true ,
251
+ 'parent_domain ' => $ parentDomain ,
252
+ 'subdomains ' => $ subdomains ,
253
+ 'cloudflareApiToken ' => $ cloudflareApiToken
254
+ ];
255
+ }
256
+
231
257
// Generate Caddyfile
232
258
$ caddyfile = view ('caddy::caddyfile-build ' , [
233
259
'caddyBlocks ' => $ caddyBlocks ,
@@ -255,25 +281,19 @@ private function createCaddyBlock(Domain $domain, $apacheHttpPort): ?array
255
281
return null ;
256
282
}
257
283
258
- //gi matcth the wilcard use tls_cloudflare
259
-
260
284
$ useWildcard = setting ('caddy.enable_wildcard_ssl ' , false );
261
285
$ cloudflareApiToken = setting ('caddy.cloudflare_api_token ' );
262
286
$ wildcardDomainSettings = setting ('caddy.wildcard_domain ' );
263
287
$ tls_cloudflare = false ;
264
288
$ use_wildcard = false ;
265
- $ wildcardDomain = null ;
266
- if ($ useWildcard && $ cloudflareApiToken && !empty ($ domain ->domain )) {
267
289
290
+ if ($ useWildcard && $ cloudflareApiToken && !empty ($ domain ->domain )) {
268
291
if (!empty ($ wildcardDomainSettings ) && strpos ($ domain ->domain , $ wildcardDomainSettings ) !== false ) {
269
292
$ tls_cloudflare = true ;
270
293
$ use_wildcard = true ;
271
294
}
272
-
273
-
274
295
}
275
296
276
-
277
297
return array (
278
298
'domain ' => $ domain ->domain ,
279
299
'proxy_to ' => "127.0.0.1: {$ apacheHttpPort }" ,
0 commit comments