[sysadmin-bin] Split is_user_trusted function from get_inactive_users
- From: Bartłomiej Piotrowski <bpiotrowski src gnome org>
- To: gnome-sysadmin gnome org,commits-list gnome org
- Subject: [sysadmin-bin] Split is_user_trusted function from get_inactive_users
- Date: Mon, 29 Nov 2021 12:01:24 +0000 (UTC)
commit 85f01f405fae6e43e44a4f91e3a12af281c99fcc
Author: Bartłomiej Piotrowski <bpiotrowski gnome org>
Date: Mon Nov 29 12:35:18 2021 +0100
Split is_user_trusted function from get_inactive_users
gitlab/inactive-gitlab-users.py | 73 ++++++++++++++++++++++-------------------
1 file changed, 39 insertions(+), 34 deletions(-)
---
diff --git a/gitlab/inactive-gitlab-users.py b/gitlab/inactive-gitlab-users.py
index 01cea9d..df292e0 100755
--- a/gitlab/inactive-gitlab-users.py
+++ b/gitlab/inactive-gitlab-users.py
@@ -7,16 +7,13 @@ import datetime
import json
import os
import re
-import sys
import gitlab
import polyglot.detect
import pytz
from dateutil.parser import parse as dateparser
from dateutil.relativedelta import relativedelta
-from gitlab.exceptions import GitlabGetError
from spam.surbl import SurblChecker
-from spam import DomainInexistentException
def timestamp2date(timestamp):
@@ -39,7 +36,7 @@ def check_if_spam(url):
return surbl
-def get_inactive_users(gl, timedelta_unit, timedelta_value):
+def is_user_trusted(user):
trusted_domains = [
"archlinux.org",
"canonical.com",
@@ -57,6 +54,42 @@ def get_inactive_users(gl, timedelta_unit, timedelta_value):
"ubuntu.com",
]
+ attrs = user.attributes
+ identities = [identity["provider"] for identity in attrs["identities"]]
+
+ if "ldapmain" in identities:
+ user.customattributes.set("trusted", "true")
+ return True
+
+ if attrs["email"].split("@")[1] in trusted_domains:
+ user.customattributes.set("trusted", "true")
+ return True
+
+ if attrs["two_factor_enabled"]:
+ user.customattributes.set("trusted", "true")
+ return True
+
+ if user.keys.list() or user.gpgkeys.list():
+ user.customattributes.set("trusted", "true")
+ return True
+
+ if len(user.identities) >= 2:
+ user.customattributes.set("trusted", "true")
+ return True
+
+ events = user.events.list(all=True)
+ for event in events:
+ if event.action_name == 'pushed to' or event.target_type in ('DiffNote', 'MergeRequest',
'DiscussionNote'):
+ project_id = event.project_id
+ project = gl.projects.get(project_id).path_with_namespace
+ if project.split('/')[0] in ('GNOME', 'Infrastructure', 'Teams'):
+ user.customattributes.set("trusted", "true")
+ return True
+
+ return False
+
+
+def get_inactive_users(gl, timedelta_unit, timedelta_value):
fields = [
"username",
"email",
@@ -82,30 +115,13 @@ def get_inactive_users(gl, timedelta_unit, timedelta_value):
if user in trusted_users:
continue
- identities = [identity["provider"] for identity in attrs["identities"]]
- if "ldapmain" in identities:
- user.customattributes.set("trusted", "true")
-
- if attrs["email"].split("@")[1] in trusted_domains:
- user.customattributes.set("trusted", "true")
- continue
-
- if attrs["two_factor_enabled"]:
- user.customattributes.set("trusted", "true")
+ if is_user_trusted(user):
continue
# Skip user if registered within timedelta
if dateparser(attrs["created_at"]) > timedelta:
continue
- # Skip users who configured SSH or GPG keys in their profile
- if user.keys.list() or user.gpgkeys.list():
- continue
-
- # Skip users with at least two identities
- if len(user.identities) >= 2:
- continue
-
created_at = timestamp2date(attrs["created_at"])
current_sign_in_at = timestamp2date(attrs["current_sign_in_at"])
last_activity_on = timestamp2date(attrs["last_activity_on"])
@@ -114,21 +130,11 @@ def get_inactive_users(gl, timedelta_unit, timedelta_value):
if (created_at == current_sign_in_at == last_activity_on) or not (
current_sign_in_at or last_activity_on
):
- events = user.events.list(all=True)
+ events = user.events.list(all=True, lazy=True)
if len(events) == 0:
userdata["reason"] = "inactivity"
results.append(userdata)
continue
- else:
- for event in events:
- print(event.project_id)
- if event.target_type in ('DiffNote', 'MergeRequest', 'DiscussionNote'):
- print(event.target_type)
- project_id = event.project_id
- project = gl.projects.get(project_id).path_with_namespace
- if 'GNOME' in project.split('/'):
- user.customattributes.set("trusted", "true")
- break
if attrs["bio"] and len(attrs["bio"]) > 0:
# Some users set URL in bio, check it against surbl
@@ -138,7 +144,6 @@ def get_inactive_users(gl, timedelta_unit, timedelta_value):
results.append(userdata)
continue
- # We have a problem with spam accounts with descriptions in some languages
try:
unwanted_langs = ["id", "es", "fr", "ms", "vi", "pt"]
detector = polyglot.detect.Detector(attrs["bio"])
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]