public SQLSanitizer(JToken JSON)
: base(JSON)
{
Parameters = new Dictionary<Tuple<uint,string>, Parameter>();
SQLITaint tmp;
bool success = Enum.TryParse((string)JSON.SelectToken(Keys.PHPDefinitionJSONKeys.GeneralKeys.DefaultStatusCode), out tmp);
DefaultStatus = success ? tmp : SQLITaint.SQL_ALL;
var paramsArray = (JArray) JSON.SelectToken(Keys.PHPDefinitionJSONKeys.GeneralKeys.Parameters);
foreach (JObject param in paramsArray)
{
var paramValues = (JArray)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterValues);
var type = (string)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterType);
var paramNumber = (uint)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterNumber);
var isOptional = (bool?)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterIsOptional);
var variadic = (bool?)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterIsVariadic);
var isReturn = (bool?)param.SelectToken(Keys.PHPDefinitionJSONKeys.ParameterJSONKeys.ParameterIsReturnValue);
if (paramValues == null)
{
var objectParam = new Parameter(isOptional ?? false, false, variadic ?? false, false, "", isReturn ?? false);
Parameters.Add(new Tuple<uint, string>(paramNumber, type), objectParam);
continue;
}
switch (type)
{
case "flag":
var flag = FlagParameterFactory.CreateFlagParameter<SQLITaint>(paramValues, DefaultStatus,
isOptional: isOptional, isVaridic: variadic, isReturn: isReturn);
Parameters.Add(new Tuple<uint,string>(paramNumber, type), flag);
break;
case "bool":
case "boolean":
var boolparam = BooleanParameterFactory.CreateBooleanParameter<SQLITaint>(paramValues, DefaultStatus,
isOptional: isOptional, isVariadic: variadic, isReturn: isReturn);
Parameters.Add(new Tuple<uint,string>(paramNumber, type), boolparam);
break;
case "int":
case "integer":
var intParam = IntegerParameterFactory.CreateIntParameter<SQLITaint>(paramValues, DefaultStatus,
isOptional: isOptional, isVariadic: variadic, isReturn: isReturn);
Parameters.Add(new Tuple<uint, string>(paramNumber, type), intParam);
break;
case "str":
case "string":
var strParam = StringParameterFactory.CreateStringParameter<SQLITaint>(paramValues, DefaultStatus,
isOptional: isOptional, isVariadic: variadic, isReturn: isReturn);
Parameters.Add(new Tuple<uint, string>(paramNumber, type), strParam);
break;
case "array":
break;
case "object":
break;
default:
string s = String.Format("Unknown parameter type. Parameter number: {0} had the type {1}", paramNumber, type).ToString();
throw new NotSupportedException(s);
}
}
}