public SQLSink(JToken JSON)
: base(JSON)
{
SQLITaint tmp;
bool success = Enum.TryParse((string)JSON.SelectToken(Keys.PHPDefinitionJSONKeys.GeneralKeys.DefaultStatusCode), out tmp);
DefaultStatus = success ? tmp : SQLITaint.SQL_ALL;
this.Classnames = new List<string>();
var classnames = (JArray)JSON.SelectToken(Keys.PHPDefinitionJSONKeys.GeneralKeys.Classnames);
if (classnames != null)
{
foreach (string format in classnames)
{
this.Classnames.Add(format);
}
}
var paramArray = (JArray) JSON.SelectToken(Keys.PHPDefinitionJSONKeys.GeneralKeys.Parameters);
foreach (JObject param in paramArray)
{
//if (param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterValues) == null) continue;
var parameterNumber = (uint)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterNumber);
var type = (string)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterType);
var optional = (bool?)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterIsOptional);
var vulnerable = (bool?)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterCanCreateHole);
var paramValues = (JArray)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterValues);
var variadic = (bool?)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterIsVariadic);
switch (type)
{
case "flag":
var flagParam = FlagParameterFactory.CreateFlagParameter<SQLITaint>(paramValues, DefaultStatus, isOptional: optional,
isVulnerable: vulnerable, isVaridic: variadic);
Parameters.Add(new Tuple<uint,string>(parameterNumber, type), flagParam);
break;
case "bool":
case "boolean":
var boolParam = BooleanParameterFactory.CreateBooleanParameter<SQLITaint>(paramValues, DefaultStatus, isOptional: optional,
isVulnerable: vulnerable, isVariadic: variadic);
Parameters.Add(new Tuple<uint,string>(parameterNumber, type), boolParam);
break;
case "int":
case "integer":
var intParam = IntegerParameterFactory.CreateIntParameter<SQLITaint>(paramValues, DefaultStatus, isOptional: optional,
isVulnerable: vulnerable, isVariadic: variadic);
Parameters.Add(new Tuple<uint, string>(parameterNumber, type), intParam);
break;
case "str":
case "string":
var strParam = StringParameterFactory.CreateStringParameter<SQLITaint>(paramValues, DefaultStatus, isOptional: optional,
isVulnerable: vulnerable, isVariadic: variadic);
Parameters.Add(new Tuple<uint,string>(parameterNumber, type), strParam);
break;
case "array":
case "object":
default:
Parameters.Add(new Tuple<uint, string>(parameterNumber, type), new Parameter(optional ?? false, vulnerable ?? false));
break;
}
}
}