about summary refs log tree commit diff
path: root/app/validators
diff options
context:
space:
mode:
authorStarfall <us@starfall.systems>2022-11-10 08:50:11 -0600
committerStarfall <us@starfall.systems>2022-11-10 08:50:11 -0600
commit67d1a0476d77e2ed0ca15dd2981c54c2b90b0742 (patch)
tree152f8c13a341d76738e8e2c09b24711936e6af68 /app/validators
parentb581e6b6d4a5ba9ed4ae17427b7f2d5d158be4e5 (diff)
parentee7e49d1b1323618e16026bc8db8ab7f9459cc2d (diff)
Merge remote-tracking branch 'glitch/main'
- Remove Helm charts
- Lots of conflicts with our removal of recommended settings and custom
  icons
Diffstat (limited to 'app/validators')
-rw-r--r--app/validators/existing_username_validator.rb6
-rw-r--r--app/validators/import_validator.rb2
-rw-r--r--app/validators/language_validator.rb21
3 files changed, 26 insertions, 3 deletions
diff --git a/app/validators/existing_username_validator.rb b/app/validators/existing_username_validator.rb
index 8f7d96b8e..1c5596821 100644
--- a/app/validators/existing_username_validator.rb
+++ b/app/validators/existing_username_validator.rb
@@ -6,7 +6,7 @@ class ExistingUsernameValidator < ActiveModel::EachValidator
 
     usernames_and_domains = begin
       value.split(',').map do |str|
-        username, domain = str.strip.gsub(/\A@/, '').split('@')
+        username, domain = str.strip.gsub(/\A@/, '').split('@', 2)
         domain = nil if TagManager.instance.local_domain?(domain)
 
         next if username.blank?
@@ -21,8 +21,8 @@ class ExistingUsernameValidator < ActiveModel::EachValidator
 
     if options[:multiple]
       record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: usernames_with_no_accounts.join(', '))) if usernames_with_no_accounts.any?
-    else
-      record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) if usernames_with_no_accounts.any? || usernames_and_domains.size > 1
+    elsif usernames_with_no_accounts.any? || usernames_and_domains.size > 1
+      record.errors.add(attribute, I18n.t('existing_username_validator.not_found'))
     end
   end
 end
diff --git a/app/validators/import_validator.rb b/app/validators/import_validator.rb
index 9f19aee2a..cbad56df6 100644
--- a/app/validators/import_validator.rb
+++ b/app/validators/import_validator.rb
@@ -26,6 +26,8 @@ class ImportValidator < ActiveModel::Validator
     when 'following'
       validate_following_import(import, row_count)
     end
+  rescue CSV::MalformedCSVError
+    import.errors.add(:data, :malformed)
   end
 
   private
diff --git a/app/validators/language_validator.rb b/app/validators/language_validator.rb
new file mode 100644
index 000000000..b723e1a40
--- /dev/null
+++ b/app/validators/language_validator.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class LanguageValidator < ActiveModel::EachValidator
+  include LanguagesHelper
+
+  def validate_each(record, attribute, value)
+    record.errors.add(attribute, :invalid) unless valid?(value)
+  end
+
+  private
+
+  def valid?(str)
+    if str.nil?
+      true
+    elsif str.is_a?(Array)
+      str.all? { |x| valid_locale?(x) }
+    else
+      valid_locale?(str)
+    end
+  end
+end