Osama
Septembre 16, 2024, 8:15
8
Penar Musaraj:
Je serais à l’aise avec un nettoyage global après un certain délai. @osama (puisque vous êtes l’auteur du commit lié ci-dessus), pensez-vous que nous pouvons nettoyer tous ces journaux après un certain temps (et si oui, après combien de temps) ? Il semble que nous devions en conserver certains pour détecter des connexions suspectes.
Oui, je pense que nous pouvons nettoyer la plupart des journaux, mais certains doivent rester. Plus précisément, je pense que tous les enregistrements qui ont suspicious, generate ou rotate comme action devront être conservés car ils sont utilisés pour détecter et générer des rapports sur les connexions suspectes.
title: I18n.t("reports.suspicious_logins.labels.login_time"),
},
]
report.data = []
sql = <<~SQL
SELECT u.id user_id, u.username, u.uploaded_avatar_id, t.client_ip, t.user_agent, t.created_at login_time
FROM user_auth_token_logs t
JOIN users u ON u.id = t.user_id
WHERE t.action = 'suspicious'
AND t.created_at >= :start_date
AND t.created_at <= :end_date
ORDER BY t.created_at DESC
SQL
DB
.query(sql, start_date: report.start_date, end_date: report.end_date)
.each do |row|
data = {}
Math.sin((lat2_rad - lat1_rad) / 2)**2 +
Math.cos(lat1_rad) * Math.cos(lat2_rad) * Math.sin((lon2_rad - lon1_rad) / 2)**2
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
c * EARTH_RADIUS_KM
end
def self.is_suspicious(user_id, user_ip)
return false unless User.find_by(id: user_id)&.staff?
ips = UserAuthTokenLog.where(user_id: user_id).pluck(:client_ip)
ips.delete_at(ips.index(user_ip) || ips.length) # delete one occurrence (current)
ips.uniq!
return false if ips.empty? # first login is never suspicious
if user_location = login_location(user_ip)
ips.none? do |ip|
if location = login_location(ip)
distance(user_location, location) < SiteSetting.max_suspicious_distance_km
end
end
3 « J'aime »