#-- Whitelist for SQL params
# Just realized this is redundant; because query {} accepts
# uninterpolated \$varnames as parameter placeholders.
proc sql::allowed {str} {
return [regexp {^[-a-zA-Z0-9 !$&/(){}=<>,.;:_+#*@]+$} $str]
}
#-- Also prohibit regex special chars
proc sql::allowed_regexp {str} {
return [regexp {^[-a-zA-Z0-9 !$&/ =<>,.;:_ # @]+$} $str]
}
#-- Check for existence of wiki page
proc sql::page_exists {name} {
query {SELECT 1 FROM tag WHERE tagname = ('wiki-' || $name)} { return 1 }
return 0
}
#-- Check if exact file name (including path) exists in repository
proc sql::file_exists {name} {
query {SELECT 1 FROM filename WHERE name = $name} { return 1 }
return 0
}
#-- Find file by basename
proc sql::find_file {path} {
if {![sql::allowed_regexp $path]} { return 0 }
query {SELECT name FROM filename WHERE name REGEXP ('(^|/)' || $path || '\$')} { return $name }
return ""
}
#-- Check if directory exists
proc sql::dir_exists {path} {
if {![sql::allowed_regexp $path]} { return 0 }
query {SELECT name FROM filename WHERE name REGEXP ('^' || $path || '/.+')} { return 1 }
return 0
}