X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/9c0582f88fd2ef4e20c6eb922bcd4cb1a04258d5..6982903ae791702453bfa3f3a1cb9bfcf342fa2d:/app/models/user.rb diff --git a/app/models/user.rb b/app/models/user.rb index d7bfb2235..5c21736b0 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 home_location? + home_lat && home_lon + end + def nearby(radius = Settings.nearby_radius, num = Settings.nearby_users) - if home_lon && home_lat + if home_location? 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") @@ -277,18 +282,18 @@ class User < ApplicationRecord ## # returns true if the user has the moderator role, false otherwise def moderator? - has_role? "moderator" + role? "moderator" end ## # returns true if the user has the administrator role, false otherwise def administrator? - has_role? "administrator" + role? "administrator" end ## # returns true if the user has the requested role - def has_role?(role) + def role?(role) roles.any? { |r| r.role == role } 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 @@ -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 home_location? end end