44 lines
1.4 KiB
Haskell
Raw Normal View History

2025-01-26 10:17:33 +01:00
module TeaCleaner.Filter
2025-02-18 11:57:18 +01:00
( FilterResult(..)
, UserFilter(..)
, filterByActivities
2025-01-26 10:17:33 +01:00
, filterByUserProperties
) where
import qualified Data.Text as Text
import Data.Time (LocalTime(..), ZonedTime(..))
import Data.Time.Calendar.OrdinalDate (fromOrdinalDate)
import qualified Data.Vector as Vector
import TeaCleaner.Client (Activity(..), User(..), getActivities)
2025-02-18 11:57:18 +01:00
import TeaCleaner.Configuration (Settings(..))
2025-01-26 10:17:33 +01:00
2025-02-18 11:57:18 +01:00
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
2025-01-26 10:17:33 +01:00
where
zonedDay = localDay . zonedTimeToLocalTime
2025-02-18 11:57:18 +01:00
filterByActivities :: Settings -> User -> IO FilterResult
filterByActivities settings user = getActivities settings user
2025-01-26 10:17:33 +01:00
>>= evalActivities
where
evalActivities activities
| Just (Activity{ opType }, rest) <- Vector.uncons activities
2025-02-18 11:57:18 +01:00
, Vector.null rest
, opType == "create_repo" = pure $ FilterResult user SuspiciousFilter
evalActivities _ = pure $ FilterResult user PassFilter