# utilities to prevent malicious user input
module CrystalGauntlet::Clean
  extend self

  # for descriptions & similar
  def clean_special(str : String)
    str.gsub(/[\0]/, "")
  end

  # only allow alphanumeric chars & space
  def clean_char(str)
    str.gsub(/[^A-Za-z0-9 ]/, "")
  end

  # only allow "basic" characters (roughly printable ascii, excluding format-breaking chars)
  def clean_basic(str)
    str.gsub(/[^A-Za-z0-9\-_ ]/, "")
  end

  # only allows numbers
  def clean_number(str)
    str.gsub(/[^0-9]/, "")
  end

  # for b64 inputs; thoroughly cleans them
  def clean_b64(str)
    Base64.urlsafe_encode(Base64.decode_string(str))
  end
end
