tea-cleaner: Read configuration file

This commit is contained in:
2025-02-18 11:57:18 +01:00
parent 346b9dcfdf
commit 06fa97bfcf
6 changed files with 163 additions and 97 deletions

View File

@ -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