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
|
using PKISharp.WACS.Services;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace PKISharp.WACS.Extensions
{
public static class StringExtensions
{
public static string? CleanUri(this Uri? uri)
{
if (uri == null)
{
return null;
}
var str = uri.ToString();
if (!string.IsNullOrEmpty(uri.UserInfo))
{
str = str.Replace($"{uri.UserInfo}@", "");
}
str = str.Replace("https://", "").Replace("http://", "");
return str.CleanPath();
}
public static string? CleanPath(this string? fileName)
{
if (fileName == null)
{
return null;
}
return Path.GetInvalidFileNameChars().Aggregate(fileName, (current, c) => current.Replace(c.ToString(), string.Empty));
}
public static string ReplaceNewLines(this string input) => Regex.Replace(input, @"\r\n?|\n", " ");
public static string ConvertPunycode(this string input)
{
if (!string.IsNullOrEmpty(input) && (input.StartsWith("xn--") || input.Contains(".xn--")))
{
return new IdnMapping().GetUnicode(input);
}
else
{
return input;
}
}
public static List<string>? ParseCsv(this string? input)
{
if (string.IsNullOrWhiteSpace(input))
{
return null;
}
return input.
Split(',').
Where(x => !string.IsNullOrWhiteSpace(x)).
Select(x => x.Trim().ToLower()).
Distinct().
ToList();
}
public static bool ValidFile(this string? input, ILogService logService)
{
if (string.IsNullOrWhiteSpace(input))
{
logService.Error("No path specified");
return false;
}
try
{
var fi = new FileInfo(Environment.ExpandEnvironmentVariables(input));
if (!fi.Exists)
{
logService.Error("File {path} does not exist", fi.FullName);
return false;
}
return true;
}
catch
{
logService.Error("Unable to parse path {path}", input);
return false;
}
}
public static bool ValidPath(this string? input, ILogService logService)
{
if (string.IsNullOrWhiteSpace(input))
{
logService.Error("No path specified");
return false;
}
try
{
var di = new DirectoryInfo(Environment.ExpandEnvironmentVariables(input));
if (!di.Exists)
{
logService.Error("Directory {path} does not exist", di.FullName);
return false;
}
return true;
}
catch
{
logService.Error("Unable to parse path {path}", input);
return false;
}
}
public static string PatternToRegex(this string pattern)
{
var parts = pattern.ParseCsv();
return $"^({string.Join('|', parts.Select(x => Regex.Escape(x).Replace(@"\*", ".*").Replace(@"\?", ".")))})$";
}
}
}
|