aboutsummaryrefslogtreecommitdiff
path: root/tea-cleaner/TeaCleaner/Filter.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-02-18 11:57:18 +0100
committerEugen Wissner <belka@caraus.de>2025-02-18 11:57:18 +0100
commit06fa97bfcf255fd033d3b5bd77d77d68ec8beef6 (patch)
tree4714437eb7b10325be5aaeb5744935167156c11c /tea-cleaner/TeaCleaner/Filter.hs
parent346b9dcfdf2a1c5d3339b4f3821080210316e6a9 (diff)
downloadkazbek-06fa97bfcf255fd033d3b5bd77d77d68ec8beef6.tar.gz
tea-cleaner: Read configuration file
Diffstat (limited to 'tea-cleaner/TeaCleaner/Filter.hs')
-rw-r--r--tea-cleaner/TeaCleaner/Filter.hs41
1 files changed, 26 insertions, 15 deletions
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