Skip to content

Commit d4b3cbb

Browse files
authored
Merge pull request #13 from Daniel-Ric/feature/2026-02-03/add-support-for-multiple-subdomains-and-tlds
Support multiple custom subdomains and domain endings
2 parents 7571d76 + 9ffd455 commit d4b3cbb

1 file changed

Lines changed: 70 additions & 7 deletions

File tree

internal/cli/cli.go

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"strings"
88
"sync/atomic"
99
"time"
10+
"unicode"
1011

1112
"UWP-TCP-Con/internal/ping"
1213
)
@@ -209,27 +210,46 @@ func (a *App) askBaseHost() (string, error) {
209210
}
210211

211212
func (a *App) askSubdomainChoice() ([]string, error) {
212-
index, err := selectOption("Subdomain", []string{"Eigene Subdomain", "Subdomain-Pool"})
213+
index, err := selectOption("Subdomain", []string{"Eigene Subdomains", "Subdomain-Pool", "Eigene + Pool"})
213214
if err != nil {
214215
return nil, err
215216
}
216217
if index == 1 {
217218
return subdomainPool, nil
218219
}
220+
if index == 2 {
221+
custom, err := a.askCustomSubdomains()
222+
if err != nil {
223+
return nil, err
224+
}
225+
return append(custom, subdomainPool...), nil
226+
}
219227

228+
return a.askCustomSubdomains()
229+
}
230+
231+
func (a *App) askCustomSubdomains() ([]string, error) {
220232
var errMsg string
221233
for {
222-
value, err := promptInput("Subdomain (optional)", "z.B. play (leer lassen für keine)", errMsg)
234+
value, err := promptInput("Subdomains (optional, kommasepariert)", "z.B. play, mc (leer lassen für keine)", errMsg)
223235
if err != nil {
224236
return nil, err
225237
}
226238
value = strings.TrimSpace(value)
227-
return []string{value}, nil
239+
if value == "" {
240+
return []string{""}, nil
241+
}
242+
list := splitList(value)
243+
if len(list) == 0 {
244+
errMsg = "Subdomain darf nicht leer sein"
245+
continue
246+
}
247+
return list, nil
228248
}
229249
}
230250

231251
func (a *App) askDomainEndings() ([]string, error) {
232-
index, err := selectOption("Domain-Endung", []string{"Eigene Endung", "Endungs-Pool"})
252+
index, err := selectOption("Domain-Endung", []string{"Eigene Endungen", "Endungs-Pool", "Eigene + Pool"})
233253
if err != nil {
234254
return nil, err
235255
}
@@ -240,19 +260,62 @@ func (a *App) askDomainEndings() ([]string, error) {
240260
}
241261
return endings, nil
242262
}
263+
custom, err := a.askCustomEndings()
264+
if err != nil {
265+
return nil, err
266+
}
267+
if index == 2 {
268+
endings, err := loadDomainEndings()
269+
if err != nil {
270+
return append(custom, endings...), nil
271+
}
272+
return append(custom, endings...), nil
273+
}
274+
return custom, nil
275+
}
276+
277+
func (a *App) askCustomEndings() ([]string, error) {
243278
var errMsg string
244279
for {
245-
value, err := promptInput("Domain-Endung", "z.B. com oder de", errMsg)
280+
value, err := promptInput("Domain-Endungen (kommasepariert)", "z.B. com, de", errMsg)
246281
if err != nil {
247282
return nil, err
248283
}
249-
value = normalizeEnding(value)
284+
value = strings.TrimSpace(value)
250285
if value == "" {
251286
errMsg = "Endung darf nicht leer sein"
252287
continue
253288
}
254-
return []string{value}, nil
289+
rawList := splitList(value)
290+
list := make([]string, 0, len(rawList))
291+
for _, entry := range rawList {
292+
normalized := normalizeEnding(entry)
293+
if normalized == "" {
294+
continue
295+
}
296+
list = append(list, normalized)
297+
}
298+
if len(list) == 0 {
299+
errMsg = "Endung darf nicht leer sein"
300+
continue
301+
}
302+
return list, nil
303+
}
304+
}
305+
306+
func splitList(value string) []string {
307+
parts := strings.FieldsFunc(value, func(r rune) bool {
308+
return r == ',' || unicode.IsSpace(r)
309+
})
310+
list := make([]string, 0, len(parts))
311+
for _, part := range parts {
312+
part = strings.TrimSpace(part)
313+
if part == "" {
314+
continue
315+
}
316+
list = append(list, part)
255317
}
318+
return list
256319
}
257320

258321
func (a *App) askPort(edition ping.Edition) (int, error) {

0 commit comments

Comments
 (0)