From 06fa97bfcf255fd033d3b5bd77d77d68ec8beef6 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 18 Feb 2025 11:57:18 +0100 Subject: tea-cleaner: Read configuration file --- tea-cleaner/TeaCleaner/Filter.hs | 41 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'tea-cleaner/TeaCleaner/Filter.hs') diff --git a/tea-cleaner/TeaCleaner/Filter.hs b/tea-cleaner/TeaCleaner/Filter.hs index c4f243e..8448ff5 100644 --- a/tea-cleaner/TeaCleaner/Filter.hs +++ b/tea-cleaner/TeaCleaner/Filter.hs @@ -1,32 +1,43 @@ module TeaCleaner.Filter - ( filterByActivities + ( FilterResult(..) + , UserFilter(..) + , filterByActivities , filterByUserProperties ) where -import Data.Text (StrictText) import qualified Data.Text as Text import Data.Time (LocalTime(..), ZonedTime(..)) import Data.Time.Calendar.OrdinalDate (fromOrdinalDate) import qualified Data.Vector as Vector -import Text.URI (URI) import TeaCleaner.Client (Activity(..), User(..), getActivities) +import TeaCleaner.Configuration (Settings(..)) -filterByUserProperties :: User -> Bool -filterByUserProperties User{ created, lastLogin, description, website } - = zonedDay created == zonedDay lastLogin - && zonedDay created > fromOrdinalDate 2024 1 - && zonedDay created < fromOrdinalDate 2025 17 - && not (Text.null description) - && not (Text.null website) +data UserFilter + = PassFilter + | SuspiciousFilter + | FailedFilter + deriving (Eq, Show) + +data FilterResult = FilterResult User UserFilter + deriving (Show) + +filterByUserProperties :: User -> FilterResult +filterByUserProperties user@User{ created, lastLogin, description, website } + | zonedDay created == zonedDay lastLogin + , zonedDay created > fromOrdinalDate 2024 1 + , zonedDay created < fromOrdinalDate 2025 17 + , not (Text.null description) + , not (Text.null website) = FilterResult user SuspiciousFilter + | otherwise = FilterResult user PassFilter where zonedDay = localDay . zonedTimeToLocalTime -filterByActivities :: URI -> StrictText -> User -> IO Bool -filterByActivities server token user - = getActivities server token user +filterByActivities :: Settings -> User -> IO FilterResult +filterByActivities settings user = getActivities settings user >>= evalActivities where evalActivities activities | Just (Activity{ opType }, rest) <- Vector.uncons activities - , Vector.null rest = pure $ opType == "create_repo" - evalActivities _ = pure False + , Vector.null rest + , opType == "create_repo" = pure $ FilterResult user SuspiciousFilter + evalActivities _ = pure $ FilterResult user PassFilter -- cgit v1.2.3