private static (string, string, string) ParseRulesRequestArgs(dynamic args, Request request, bool parsePathPattern = true) { var dbid = (string)args.dbid; var path = (string)request.Query.path; var keyid = (string)request.Query.keyid; var wc = (string)request.Query.wc == "1"; // whether to parse as a wildcard if (string.IsNullOrWhiteSpace(dbid)) { dbid = null; } if (string.IsNullOrWhiteSpace(path)) { path = parsePathPattern ? WildcardMatcher.ToRegex("/*") : "/"; } if (wc) { // convert wildcard to regex path = WildcardMatcher.ToRegex(path); } else { if (parsePathPattern) { try { Regex.IsMatch("", path); } catch { // Path regex was invalid, parse as wildcard path = WildcardMatcher.ToRegex(path); } } } return(dbid, path, keyid); }
/// <summary> /// Creates a new security rule /// </summary> /// <param name="pathWildcard"></param> /// <param name="actions">The action flags to grant or restrict access to</param> /// <param name="allow">whether the rule should allow or deny</param> /// <param name="priority">If less than 0, the default priority calculation will be used</param> public SecurityRule(string pathWildcard, DatabaseAction actions = 0, bool allow = true, int priority = -1) : this( new Regex(WildcardMatcher.ToRegex(pathWildcard)), actions, allow, priority) { }