Skip to content
This repository has been archived by the owner on Dec 20, 2018. It is now read-only.

Commit

Permalink
Fixed exception messages for server variable parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
mikaelm12 authored Oct 24, 2016
1 parent 061f22b commit 88aff41
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ public static class ServerVariables
/// <summary>
/// Translates mod_rewrite server variables strings to an enum of different server variables.
/// </summary>
/// <param name="variable">The server variable string.</param>
/// <param name="serverVariable">The server variable string.</param>
/// <param name="context">The Parser context</param>
/// <returns>The appropriate enum if the server variable exists, else ServerVariable.None</returns>
public static PatternSegment FindServerVariable(string variable, ParserContext context)
public static PatternSegment FindServerVariable(string serverVariable, ParserContext context)
{
switch (variable)
switch (serverVariable)
{
case "HTTP_ACCEPT":
return new HeaderSegment(HeaderNames.Accept);
Expand Down Expand Up @@ -84,23 +84,23 @@ public static PatternSegment FindServerVariable(string variable, ParserContext c
case "SERVER_SOFTWARE":
throw new NotSupportedException("Rules using the SERVER_SOFTWARE server variable are not supported");
case "TIME_YEAR":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME_MON":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME_DAY":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME_HOUR":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME_MIN":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME_SEC":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME_WDAY":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "TIME":
return new DateTimeSegment(variable);
return new DateTimeSegment(serverVariable);
case "API_VERSION":
throw new NotSupportedException();
throw new NotSupportedException("Rules using the API_VERSION server variable are not supported");
case "HTTPS":
return new IsHttpsModSegment();
case "HTTP2":
Expand All @@ -116,7 +116,7 @@ public static PatternSegment FindServerVariable(string variable, ParserContext c
case "THE_REQUEST":
throw new NotSupportedException("Rules using the THE_REQUEST server variable are not supported");
default:
throw new FormatException(Resources.FormatError_InputParserUnrecognizedParameter(variable, context.Index));
throw new FormatException(Resources.FormatError_InputParserUnrecognizedParameter(serverVariable, context.Index));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ private static void ParseParameter(ParserContext context, IList<PatternSegment>
{
// This is just a server variable, so we do a lookup and verify the server variable exists.
parameter = context.Capture();
results.Add(ServerVariables.FindServerVariable(parameter));
results.Add(ServerVariables.FindServerVariable(parameter, context));
return;
}
else if (context.Current == Colon)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.IISUrlRewrite
{
public static class ServerVariables
{
public static PatternSegment FindServerVariable(string serverVariable)
public static PatternSegment FindServerVariable(string serverVariable, ParserContext context)
{
switch (serverVariable)
{
// TODO Add all server variables here.
case "ALL_RAW":
throw new NotSupportedException("Rules using the AUTH_TYPE server variable are not supported");
throw new NotSupportedException("Rules using the ALL_RAW server variable are not supported");
case "APP_POOL_ID":
throw new NotSupportedException("Rules using the AUTH_TYPE server variable are not supported");
throw new NotSupportedException("Rules using the APP_POOL_ID server variable are not supported");
case "CONTENT_LENGTH":
return new HeaderSegment(HeaderNames.ContentLength);
case "CONTENT_TYPE":
Expand All @@ -41,7 +41,7 @@ public static PatternSegment FindServerVariable(string serverVariable)
case "LOCAL_ADDR":
return new LocalAddressSegment();
case "HTTP_PROXY_CONNECTION":
throw new NotSupportedException("Rules using the AUTH_TYPE server variable are not supported");
throw new NotSupportedException("Rules using the HTTP_PROXY_CONNECTION server variable are not supported");
case "QUERY_STRING":
return new QueryStringSegment();
case "REMOTE_ADDR":
Expand All @@ -55,7 +55,7 @@ public static PatternSegment FindServerVariable(string serverVariable)
case "REQUEST_URI":
return new UrlSegment();
default:
throw new FormatException("Unrecognized server variable");
throw new FormatException(Resources.FormatError_InputParserUnrecognizedParameter(serverVariable, context.Index));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public class ServerVariableTests
public void CheckServerVariableParsingAndApplication(string variable, string expected)
{
// Arrange and Act
var serverVar = ServerVariables.FindServerVariable(variable);
var testParserContext = new ParserContext("test");
var serverVar = ServerVariables.FindServerVariable(variable, testParserContext);
var lookup = serverVar.Evaluate(CreateTestHttpContext(), CreateTestRuleMatch(), CreateTestCondMatch());
// Assert
Assert.Equal(expected, lookup);
Expand Down

0 comments on commit 88aff41

Please sign in to comment.