about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/lib/command_tag/command/account_tools.rb2
-rw-r--r--app/models/account_domain_permission.rb5
2 files changed, 4 insertions, 3 deletions
diff --git a/app/lib/command_tag/command/account_tools.rb b/app/lib/command_tag/command/account_tools.rb
index b433c32d4..8c8c74e68 100644
--- a/app/lib/command_tag/command/account_tools.rb
+++ b/app/lib/command_tag/command/account_tools.rb
@@ -56,7 +56,7 @@ module CommandTag::Command::AccountTools
         @account.user.settings.default_privacy = args[1]
       elsif args[1] == 'public'
         domains = args[2..-1].map { |domain| normalize_domain(domain) unless domain == '*' }.uniq.compact
-        @account.domain_permissions.where(domain: domains).destroy_all if domains.present?
+        @account.domain_permissions.where(domain: domains, sticky: false).destroy_all if domains.present?
       elsif args[1] != 'cc'
         args[2..-1].flat_map(&:split).uniq.each do |domain|
           domain = normalize_domain(domain) unless domain == '*'
diff --git a/app/models/account_domain_permission.rb b/app/models/account_domain_permission.rb
index 2606c4133..9e77950f2 100644
--- a/app/models/account_domain_permission.rb
+++ b/app/models/account_domain_permission.rb
@@ -7,6 +7,7 @@
 #  account_id :bigint(8)        not null
 #  domain     :string           default(""), not null
 #  visibility :integer          default("public"), not null
+#  sticky     :boolean          default(FALSE), not null
 #
 
 class AccountDomainPermission < ApplicationRecord
@@ -40,7 +41,7 @@ class AccountDomainPermission < ApplicationRecord
       domain_permissions = normalize(domain_permissions)
       permissions = find_by(domain: domain_permissions[:domain])
       if permissions.present?
-        permissions.update(**domain_permissions)
+        permissions.update(**domain_permissions) unless permissions.sticky? && %w(direct limited private).include?(domain_permissions[:visibility].to_s)
       else
         create(**domain_permissions)
       end
@@ -51,7 +52,7 @@ class AccountDomainPermission < ApplicationRecord
       domain_permissions = normalize(domain_permissions)
       permissions = find_by(domain: domain_permissions[:domain])
       if permissions.present?
-        permissions.update!(**domain_permissions)
+        permissions.update!(**domain_permissions) unless permissions.sticky? && %w(direct limited private).include?(domain_permissions[:visibility].to_s)
       else
         create!(**domain_permissions)
       end