[sysadmin-bin] Split is_user_trusted function from get_inactive_users



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]