Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AuthenticationHeaderValue.cs
Go to the documentation of this file.
2
4
6{
7 private readonly string _scheme;
8
9 private readonly string _parameter;
10
11 public string Scheme => _scheme;
12
13 public string? Parameter => _parameter;
14
15 public AuthenticationHeaderValue(string scheme)
16 : this(scheme, null)
17 {
18 }
19
20 public AuthenticationHeaderValue(string scheme, string? parameter)
21 {
22 HeaderUtilities.CheckValidToken(scheme, "scheme");
24 _scheme = scheme;
25 _parameter = parameter;
26 }
27
33
34 public override string ToString()
35 {
36 if (string.IsNullOrEmpty(_parameter))
37 {
38 return _scheme;
39 }
40 return _scheme + " " + _parameter;
41 }
42
43 public override bool Equals([NotNullWhen(true)] object? obj)
44 {
45 if (!(obj is AuthenticationHeaderValue authenticationHeaderValue))
46 {
47 return false;
48 }
49 if (string.IsNullOrEmpty(_parameter) && string.IsNullOrEmpty(authenticationHeaderValue._parameter))
50 {
51 return string.Equals(_scheme, authenticationHeaderValue._scheme, StringComparison.OrdinalIgnoreCase);
52 }
53 if (string.Equals(_scheme, authenticationHeaderValue._scheme, StringComparison.OrdinalIgnoreCase))
54 {
55 return string.Equals(_parameter, authenticationHeaderValue._parameter, StringComparison.Ordinal);
56 }
57 return false;
58 }
59
60 public override int GetHashCode()
61 {
62 int num = StringComparer.OrdinalIgnoreCase.GetHashCode(_scheme);
63 if (!string.IsNullOrEmpty(_parameter))
64 {
65 num ^= _parameter.GetHashCode();
66 }
67 return num;
68 }
69
70 public static AuthenticationHeaderValue Parse(string? input)
71 {
72 int index = 0;
74 }
75
76 public static bool TryParse([NotNullWhen(true)] string? input, [NotNullWhen(true)] out AuthenticationHeaderValue? parsedValue)
77 {
78 int index = 0;
79 parsedValue = null;
80 if (GenericHeaderParser.SingleValueAuthenticationParser.TryParseValue(input, null, ref index, out var parsedValue2))
81 {
82 parsedValue = (AuthenticationHeaderValue)parsedValue2;
83 return true;
84 }
85 return false;
86 }
87
88 internal static int GetAuthenticationLength(string input, int startIndex, out object parsedValue)
89 {
90 parsedValue = null;
91 if (string.IsNullOrEmpty(input) || startIndex >= input.Length)
92 {
93 return 0;
94 }
96 if (tokenLength == 0)
97 {
98 return 0;
99 }
100 string text = null;
101 switch (tokenLength)
102 {
103 case 5:
104 text = "Basic";
105 break;
106 case 6:
107 text = "Digest";
108 break;
109 case 4:
110 text = "NTLM";
111 break;
112 case 9:
113 text = "Negotiate";
114 break;
115 }
116 string scheme = ((text != null && string.CompareOrdinal(input, startIndex, text, 0, tokenLength) == 0) ? text : input.Substring(startIndex, tokenLength));
117 int num = startIndex + tokenLength;
118 int whitespaceLength = HttpRuleParser.GetWhitespaceLength(input, num);
119 num += whitespaceLength;
120 if (num == input.Length || input[num] == ',')
121 {
122 parsedValue = new AuthenticationHeaderValue(scheme);
123 return num - startIndex;
124 }
125 if (whitespaceLength == 0)
126 {
127 return 0;
128 }
129 int num2 = num;
130 int parameterEndIndex = num;
131 if (!TrySkipFirstBlob(input, ref num, ref parameterEndIndex))
132 {
133 return 0;
134 }
135 if (num < input.Length && !TryGetParametersEndIndex(input, ref num, ref parameterEndIndex))
136 {
137 return 0;
138 }
139 string parameter = input.Substring(num2, parameterEndIndex - num2 + 1);
140 parsedValue = new AuthenticationHeaderValue(scheme, parameter);
141 return num - startIndex;
142 }
143
144 private static bool TrySkipFirstBlob(string input, ref int current, ref int parameterEndIndex)
145 {
146 while (current < input.Length && input[current] != ',')
147 {
148 if (input[current] == '"')
149 {
150 int length = 0;
151 if (HttpRuleParser.GetQuotedStringLength(input, current, out length) != 0)
152 {
153 return false;
154 }
155 current += length;
156 parameterEndIndex = current - 1;
157 }
158 else
159 {
160 int whitespaceLength = HttpRuleParser.GetWhitespaceLength(input, current);
161 if (whitespaceLength == 0)
162 {
163 parameterEndIndex = current;
164 current++;
165 }
166 else
167 {
168 current += whitespaceLength;
169 }
170 }
171 }
172 return true;
173 }
174
175 private static bool TryGetParametersEndIndex(string input, ref int parseEndIndex, ref int parameterEndIndex)
176 {
177 int num = parseEndIndex;
178 do
179 {
180 num++;
181 bool separatorFound = false;
182 num = HeaderUtilities.GetNextNonEmptyOrWhitespaceIndex(input, num, skipEmptyValues: true, out separatorFound);
183 if (num == input.Length)
184 {
185 return true;
186 }
187 int tokenLength = HttpRuleParser.GetTokenLength(input, num);
188 if (tokenLength == 0)
189 {
190 return false;
191 }
192 num += tokenLength;
194 if (num == input.Length || input[num] != '=')
195 {
196 return true;
197 }
198 num++;
200 int valueLength = NameValueHeaderValue.GetValueLength(input, num);
201 if (valueLength == 0)
202 {
203 return false;
204 }
205 num += valueLength;
206 parameterEndIndex = num - 1;
207 num = (parseEndIndex = num + HttpRuleParser.GetWhitespaceLength(input, num));
208 }
209 while (num < input.Length && input[num] == ',');
210 return true;
211 }
212
214 {
215 return new AuthenticationHeaderValue(this);
216 }
217}
override bool Equals([NotNullWhen(true)] object? obj)
static bool TryParse([NotNullWhen(true)] string? input, [NotNullWhen(true)] out AuthenticationHeaderValue? parsedValue)
static AuthenticationHeaderValue Parse(string? input)
static bool TryGetParametersEndIndex(string input, ref int parseEndIndex, ref int parameterEndIndex)
static bool TrySkipFirstBlob(string input, ref int current, ref int parameterEndIndex)
static int GetAuthenticationLength(string input, int startIndex, out object parsedValue)
static readonly GenericHeaderParser SingleValueAuthenticationParser
static void CheckValidToken(string value, string parameterName)
static int GetNextNonEmptyOrWhitespaceIndex(string input, int startIndex, bool skipEmptyValues, out bool separatorFound)
static void CheckContainsNewLine(string value)
static int GetValueLength(string input, int startIndex)
static HttpParseResult GetQuotedStringLength(string input, int startIndex, out int length)
static int GetTokenLength(string input, int startIndex)
static int GetWhitespaceLength(string input, int startIndex)
static StringComparer OrdinalIgnoreCase