X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/aef7439c56cc26ec3faa22aa851f6ed80e5fb691..d8abf0dc7e1189c99a4c34668216594ee16ba5d9:/app/models/user.rb?ds=sidebyside diff --git a/app/models/user.rb b/app/models/user.rb index e7e077a9b..41f249d4e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -210,6 +210,7 @@ class User < ApplicationRecord # Mark the account as deleted and remove personal data event :soft_destroy do before do + revoke_authentication_tokens remove_personal_data end @@ -237,8 +238,12 @@ class User < ApplicationRecord @preferred_languages ||= Locale.list(languages) end + def has_home? + home_lat && home_lon + end + def nearby(radius = Settings.nearby_radius, num = Settings.nearby_users) - if home_lon && home_lat + if has_home? gc = OSM::GreatCircle.new(home_lat, home_lon) sql_for_area = QuadTile.sql_for_area(gc.bounds(radius), "home_") sql_for_distance = gc.sql_for_distance("home_lat", "home_lon") @@ -258,7 +263,7 @@ class User < ApplicationRecord OSM::GreatCircle.new(home_lat, home_lon).distance(nearby_user.home_lat, nearby_user.home_lon) end - def is_friends_with?(new_friend) + def friends_with?(new_friend) friendships.exists?(:befriendee => new_friend) end @@ -299,6 +304,13 @@ class User < ApplicationRecord blocks.active.detect(&:needs_view?) end + ## + # revoke any authentication tokens + def revoke_authentication_tokens + oauth_tokens.authorized.each(&:invalidate!) + access_tokens.not_expired.each(&:revoke) + end + ## # remove personal data - leave the account but purge most personal data def remove_personal_data @@ -370,7 +382,7 @@ class User < ApplicationRecord account_age_in_hours = account_age_in_seconds / 3600 recent_messages = messages.where("sent_on >= ?", Time.now.utc - 3600).count active_reports = issues.with_status(:open).sum(:reports_count) - max_messages = account_age_in_hours.ceil + recent_messages - active_reports * 10 + max_messages = account_age_in_hours.ceil + recent_messages - (active_reports * 10) max_messages.clamp(0, Settings.max_messages_per_hour) end @@ -379,7 +391,7 @@ class User < ApplicationRecord account_age_in_hours = account_age_in_seconds / 3600 recent_friends = Friendship.where(:befriendee => self).where("created_at >= ?", Time.now.utc - 3600).count active_reports = issues.with_status(:open).sum(:reports_count) - max_friends = account_age_in_hours.ceil + recent_friends - active_reports * 10 + max_friends = account_age_in_hours.ceil + recent_friends - (active_reports * 10) max_friends.clamp(0, Settings.max_friends_per_hour) end @@ -393,6 +405,6 @@ class User < ApplicationRecord end def update_tile - self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_lat && home_lon + self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if has_home? end end